Блог

Несвязанные представления

Очень часто в книгах о хорошем тоне в программировании можно увидеть термин Decoupling в отношении кода. Смысл в том, что ваши классы не должны быть жёстко привязаны к определённой реализации другого класса (внешней зависимости). И я иногда вижу, что народ следует этой рекомендации в своём коде. 

Но почему при этом все так жёстко привязываются к определённому фреймворку в представлениях (View)?

Я ненавижу использовать различные хелперы в виде Html.BeginForm в представлениях. От того, что это превращается во время выполнения в <html> выгоды ноль. Проще же сразу написать HTML тэги и отвязаться от абсолютно ненужно помощи фреймворка. 

Обязательная Dependency Injection

Я люблю Dependency Injection, я считаю этот патерн очень даже удобным, но я стал замечать, что им пренебрегают. Мне не нравится в последних версиях Symfony, что если у класса есть конструктор с параметрами, то он автоматически пытается привязывать все эти параметры. 

А я не хочу этого делать. У меня очень часто в моделях есть классы, которые получают жизненно важные данные через параметры. Symfony заставляет указать autowiring или отключить его в конфигурации. И это реально бесит. Простое использование классов с моими личными параметрами – теперь боль. Может кто знает, как просто отключить Dependency Injection на один из параметров, без необходимости лезть в service файл? 

Мало кто пишет не связанный код

Наверно в каждой книге написано про то, что нужно писать код без жёстких зависимостей - использовать интерфейсы и инъекцию зависимостей. Но почему-то мало, кто реально следует этому. И отчасти это проблема документации, на которую смотрят программисты. 

Вот взять для примера всеми любимые фреймворки для PHP и посмотреть на код оправки почты - вот возьмем пример отправки E-mail из Symfony. Я специально беру его, потому что фреймворк хороший и в нем можно писать код без записимостей. 

.NET Core шаг в сторону Linux

Я обожаю .NET для Web и если строить большой сайт с E-Commerce, то я на первом месте бы смотрел на .NET и только потом на LAMP. Да, LAMP хостинг будет дешевле и можно смириться с некоторыми ограничениями PHP и проблемами, но .NET реально проще и удобнее для больших проектов. 

И благодаря .NET Core я могу написать на нем сайт и запустить его на Linux. Да это же мечта. Я понимаю, зачем Microsoft делают .NET Core, он быстрее и реально лучше, в нем исправили все недостатки .NET, которые остались после перехода с 1.0 на 2.0 и живы до сих пор. 

Вторая причина - Microsoft Azure. Компания хочет, чтобы программисты могли писать для Azure код на любой платформе. Ну люблю я macOS, так почему же не позволить мне писать код под моей любимой ОС, но публиковать его в Azure? Идея логична и понятна, а если я не захочу публиковать его в Azure? С классическим .NET я вынужден был бы купить Windows сервера и хостить их самостоятельно, а теперь я буду хостить самостоятельно, но на Linux серверах. 

Windows developer day 2018

Я иногда делаю онлайн трансляции с различных событий, когда кто-то ведет конференцию, а я в онлайн режиме пишу заметку и обновляю ее на сайте. В этот раз будет не онлайн режим, а по мере просмотра. Сейчас смотрю Windows Developer Day 2018 и буду одновременно писать свои комментарии относительно того, что вижу. 

Enhanced методы

Я достаточно нормально отношусь к именованиям методов и классов. Имя просто должно быть понятным и отражать суть. Но вот что меня бесит, так это имена типа EnhancedMethod. Был раньше просто Method, а теперь стал EnhancedMethod. 

А через год, когда поймут что текущий метод не очень хороший будут создавать EnhancedMethod2 или может EnhancedEnhancedMethod? 

Слова паразиты типа Enhanced или New должны быть исключены при именовании. Нужно быть более креативным. 

Почему я до сих пор не использую Linq к базам данных

В этом видео показатель, почему я до сих пор не использую Linq. На 4:26 показана интересная конструкция, которую Linq сгенерировал на простую просьбу найти записи, которые начинаются с определенного слова. Такая задача решается очень просто, достаточно просто LIKE 'СЛОВО%', но Linq зачем-то добавил еще какую-то проверку на длину совпадения. Вот этого я не совсем понял, зачем такое нужно. 

Боязнь индексов – это паранойя

Мне тут довелось общаться со специалистом по базам данных MS SQL Server и из разговора вышло, что он противник индексов. По его мнению, индексы – это практически зло, потому что они замедляют вставку и обновление данных. 

Мне нужно было создать индекс на одну колонку таблицы информации о сессиях пользователей. Каждый раз, когда пользователь входит в систему, в базе создается новая запись о сессии и она может обновиться, если пользователь выходит из системы. Одна операция вставки и возможны редкие операции обновления. Чтобы эти операции не затормозить, мне не давали создать индекс, хотя в базе до этого вообще не было ни одного индекса. 

Да, индексы могут затормозить операции вставки и обновления, но их не стоит боятся. Один или два индекса на таблицу – это вообще норма. Если у вас четыре или более индексов, то вот тут уже можно думать, а стоит ли создавать еще один, или использовать уже существующий. 

А что ты делаешь с исключительными ситуациями?

Сейчас у меня был просто великолепный звонок с одним агентством, которому нужна была помощь. У них на сайте валится определенная функция. Чтобы понять проблему, я попросил показать код, где у них проблема и о чудо, они не знают. Уже неделю пытаются вычислить проблему, но даже не знают, в каком файле находится код. Неделю команда из трёх программистов работала над проблемой. Не знаю, что они неделю делали, если никто из них не додумался найти код. 

Хрен с ним, начали искать конечно же это заняло не более 10 минут. Код выглядит вот так:

Поиск решения для Swift 3

Swift 3 так сильно изменился по сравнению с первой версией, что это стало проблемой при поиске возможного решения простых проблем. Когда гуглишь какое-то решение, то в первых рядах вылетают ответы для более старых Swift и приходится постоянно фильтровать - это работает только в Swift 2, это только в Swift 1 и т.д. Пока найдешь самое свежее решение, хочется вернуться на .NET. 

Если Swift первого пришествия был простым и гибким, то сейчас далеко не все так выглядит. То, что некоторые методы упростили и теперь имена выглядят короткими и понятными - это круто. Но количество символов ! и ? очень сильно увеличилось. После открытия старого проекта на Swift 1 я добавил столько этих восклицательных знаков, что в них можно было утонуть. 

С одной стороны, я понимаю, что у Apple были причины для введения этих символов в каждом из мест, но просто читаемость все же с ними не улучшилась. 

Микросервисы

Сейчас очень часто можно увидеть в интернете информацию о микросервисах и может показаться, что это какая-то мода. Да, в ИТ очень часто бывает что-то модное и понтовое, но микросервисы - это как раз необходимость, а не мода. И это необходимость для любого более менее крупного сайта или мобильного приложения, которое использует какие-то сервисы в интернете. 

Когда-то давно появилась технология сервисов и многие говорили, что это круто и именно так нужно строить свои сайты. Я не увидел тогда необходимости использования SOAP внутри проекта. Для взаимодействия между вендоровами и различными системами - да, я использовал сервисы. В очень редких случаях я использовал их и для внутренних нужд, но не так часто. 

С появлением подхода микросервисов я вынужден согласится с теми, кто их продвигает, что микросервисы - это правильно реализованные сервисы.

Тормоза компиляции Xcode

Мне понадобилось тут освежить одно из своих приложений для iOS, которое я писал на Swift и количество изменений в язык заставили меня потратить целый день на то, чтобы вручную адаптировать код. И это уже немного начинает бесить. Причем код теперь выглядит не так уж и красиво, как раньше. Большое количество ужесточений привели к более некрасивому результату. 

Пока я исправлял косяки, меня начала бесить более серьезная проблема - компиляция была невероятно медленной - как минимум минуту и постоянно шла какая-то индексация, которая не должна быть. Я уже перегрузил Xcode, собирался уже перезагрузить Mac (вообще для меня это очень редкая операция), но после фикса очередной ошибки типа: "операция слишком сложная, подумайте над тем, чтобы ее разбить на несколько", компиляция стала проходить практически мгновенно. 

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповидания на русском или английском языке.

Пишите мне


Я в социальных сетях
Facebook Twitter Telegram Youtube Instagram