В защиту Фабрик
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
По следам поста на Хабре «Почему я ненавижу фреймворки»
Стоит отметить, что пост помещён на Хабре под тегом «юмор», однако кто их читает эти теги?
Статья написано в американской манере капитана очевидность, но достаточно легко, и в этом её опасность. То есть, неопытный, начинающий разработчик может найти в ней опору и оправдание для своего спагетти кода, который с каждым днём, словно лиренейская гидра, вместо исправленных ошибок отращивает новые, которые ещё веселее прежних и уже конфликтуют со вчерашними.
Зачем нужны фабрики фабрик фабрик? В принципе, это описано в любой книге и любом блоге с пометкой ООП.
ФФФ избавляют нас от необходимости писать нечто такое new Hammer(new Нandhold(new Weather(new .... и так далее в самых разных местах программы.
Попробую описать ситуацию в аналогии молотка которую использует автор.
Допустим вам надо выполнить очень простое действие — забить гвоздь.
Как программист, вы создаёте Гвоздь, вы создаёте Молоток и в зависимости от предпочтений и начитанности делаете или Гвоздь.Забивайся(Молоток) или Молоток.Забить(Гвоздь)
В принципе, если программа на этом и ограничится, то статья автора могла бы иметь основания для сарказма. Но так не бывает никогда! Это самое незыблемое правило программирования, после правила «Все лгут».
Программа начнёт меняться как только ваш заказчик утвердит тремя печатями самые железобетонные требования в ТЗ. Так было, так есть, так будет. Меняться будет всё.
И ситуация несколько осложнится — потребуется забить двадцать пять гвоздей. Причём, десять до авторизации, а остальные сорок семь после. Вы не ослышались так и будет — всего двадцать пять, но десять до, а сорок семь после. Почему? Ну понимаете, гвоздей двадцать пять, а ещё шестьдесят восемь это дюбели. Погодите, погодите, двадцать пять плюс шестьдесят восемь... Ой, там ещё обойные гвоздики есть. Россыпью. Они лежат в разных частях программы, под самыми разными именами. Понятно?
И радуйтесь если молоток останется один.
Что произойдёт на самом деле, если ффф будут осмеяны и отложены.
Вы начнёте забивать гвоздь и захотите положить молоток на стол, но там уже будет какой-то молоток. Вы попытаетесь переложить молоток в другую руку, но и там молоток, только красный. Тогда вы решите продолжить забивать гвоздь и с удивлением обнаружите что гвоздь, который вы забивали теперь лежит в коробке, а вместо него на нужном месте стоит дюбель, причём вверх ногами, а руки у вас заняты молотками. И почти наверняка скоро вся комната будет заполнена забитыми, полузабитыми, согнутыми и накрытыми бумагой чтобы никто не заметил, гвоздями, дюбелями, шурупами, отвёртками и множеством подобных вещей, а в руках и ногах у вас будут молотки, но как только вы захотите ударить то обнаружите что вместо молотка у вас кофейник.
Вы можете подумать что это страшилка или бред, но поверьте — если вы пишите что то сложнее Привет, Мир! То вы очень скоро столкнётесь с этой ситуацией.
Если же правильно использовать ффф то ситуация будет фантастически простой — как только вы замахнётесь пустой рукой, желая что-либо забить, то в ту же секунду в руке появится молоток, причём сила удара будет им вычисленна, в зависимости от того, что вы собираетесь забивать и как только вы забьёте свой гвоздь, то молоток тут же исчезнет. Кстати если вы мальчик то молоток будет появляться голубенький, а если девочка, то розовенький, а после забивания гвоздя, другой инструмент, из ужасной ффф, запишет, что гвоздь забит вами и забит удачно, в ваш логфайл без вас.
Я обращаюсь к начинающим программистам, то есть таким как я — первый круг вы пройдёте в рукопашную (и это хорошо, на самом деле), без всяких IoC контейнеров и прочих инъекций. Но если вы хотите получать кайф от программирования то во втором круге без ООП, без шаблонов и без Фабрики фабрик фабрик ваш кайф всегда будет очень тяжёлым и скучным и заветную мечту о сеньёрстве придётся оставить.
ps. Фабрики фабрик фабрик — это иронический термин. Лично, я пока не ощутил необходимости даже в фабрике фабрик. Простой фабрики в виде готовой сторонней библиотеки типа ninject или castle должно хватить для всего.
ззы. Разумеется сами по себе фабрики никаких чудес делать не будут, но написать класс со множеством инъекций (по простому — интерфейсных ссылок), который будет удобно использовать в разных местах программы, который будет сам следить за временем жизни объектов от которых он завист, который сам будет уничтожаться и появлятся в нужный момент, всё это лучше оставить фабрике, а не пихать в конструктор десяток своих ссылок и уж тем более не писать new в конструкторе. Всё имхо с учётом моего небольшого опыта.
зззы. Я говорил только о .net Возможно, на других платформах создание фабрик сопряжено со значительными трудностями.
77 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів