Roy wrote:АццкоМото wrote:
Вовсе нет. Дизайн ради дизайна не есть гуд.
Если сегодня я пишу
DBProvider p = new DBProvider();
а завтра мне нужно сделать внезапно IGenericDBProvider, MyRealDBProvider, MyTestDBProvider и DBProviderSureshAskedFor()
И объявлять все это каким-нибудь странным образом типа @InjectHellKnowsWhatExactly - ничего хорошего само по себе это не несет.
Нужно IGenericDBProvider, MyRealDBProvider. Вам ведь всё равно надо писать класс MyRealDBProvider или вы data access код пишите прямо внутри бизнес логики?
Нет-нет, суть в том, что кроме MyRealDBProvider должны быть и другие реализации, иначе где же иньекция и в чем смысл выделения интерфейса? Итого, вместо одного класса - минимум три. Это и есть усложнение. Трехкратное. Ради тестирования. А аксиома гласит - test harness должен по минимуму усложнять код. И выход - который работает в большинстве случаев - тупо DBProvider (Endpoint whatever);
В _некоторых_ случаях DI может быть полезен, но всегда нужно трижды подумать, а не бездумно поклоняться новым богам. А то 10 лет на иконостасе был Gang Of Four, а тут видите ли мода поменялась и синглтон - безусловное зло. А самому подумать вместо религии - не?
Roy wrote:Тесты пишуться с помощью мок-библиотек типа Rhino, так что тестовые классы писать не надо.
Вот только мок-либы, только Rhino. А вы не задумывались, что не везде так? Что не все живут в мире типа база-логика-бэкэнд-вебморда?
Roy wrote:Что такое @InjectHellKnowsWhatExactly - не понял.
Беда какая. А как же вы инжектить собираетесь? Как бы оно не выглядело в конкретной реализации, суть все равно в том, что в каком-то месте вы делаете приседание и не знаете прямо из кода, какой именно объект вам подсунут. В этом - суть
Roy wrote:Всё это несет в себе много хорошего. Всяко лучше чем SQL спагетти по коду разбрасывать.
Да ничего хорошего оно не несет. И SQL-спагетти совершенно не имеет никакого отношения к проблеме. Уаще страшная тайна - SQL может и не быть. А может и не быть базы данных. И веб-морды.
Roy wrote:Если "через несколько лет" для вас не аргумент, то аргументов нет. Вы никогда не работали с кодом старше 3 лет? Если его писали приверженцы подхода "После нас хоть потоп", то лучше даже не начинать с ним работать.
Я думаю, что я вас лет на 10 старше и я видел такой код, что из него торчат cathode ray tubes. Но что с того? Бывал и говнокод, бывал и прекрасный.
Капитан очевидность говорит, что если я буду писать исключительно идеальный (хм, кто даст определение?) код, я все равно не смогу развидеть то, что уже видел. И даже никак не повлияю на то, что мне еще предстоит увидеть. Неужели это так сложно?
ЗЫ. Я так понимаю, с обоснованием тезиса "синглтон - зло" не задалось, поэтому пошла демагогия