У меня есть один вопрос, на который я не могу ответить нигде. Это касается развязки кода с интерфейсами. Вопрос в том, должен ли ВСЕ объекты внутри других объектов (созданных и используемых) рефакторироваться в интерфейс, чтобы следовать принципу инверсии зависимостей S.O.L.I.D.? Как насчет новых объектов внутри четного управляемого метода ?, например. метод, который называется, когда я нажимаю кнопку. Должен ли объект проходить через, скажем, конструктор? Конечно, все это относится к моим объектам, а не к BCL?Если все объекты развязаны
ответ
millimoose дал отличный ответ. Это особенно хорошо, потому что это правильный ответ на любую проблему программирования.
Я хотел бы немного уточнить. При работе со сценариями, как это, выполняются следующие условия:
- Развязка поставляется за свой счет.
- Никакой код не будет идеальным, так как вы, вероятно, не будете получать все время, чтобы работать на нем.
- Это не конец света, если ваш код более связан, чем может быть.
Так что не смотрите на это с точки зрения предложения «все или ничего» и вместо этого смотрите на него как на счет. Какую связь вы готовы мириться? Сколько вы готовы заплатить за развязку? В какой-то момент есть баланс между временем разработки и воспринимаемой ремонтопригодностью - имея в виду, что вы даже не знаете, как изменится ваш код.
Слышали ли вы о книге «Программирование на основе событий: принятие событий к пределу»? Это все о связи: http://books.google.com/books?id=9CL446IzhuAC&pg=PR21&dq=taking+events+to+the+limit&hl=en&sa=X&ei=bcfLUMzRMcWLqgHi-oHoBw&ved=0CDUQ6wEwAA
Автор утверждает, что вы не можете устранить все муфты, но вы можете преобразовать их, а связь должна быть перенесена на более простые классы. Возможно, вы можете использовать это как руководство для своих усилий.
«Сколько вы готовы заплатить за развязку? В какой-то момент есть баланс между временем проектирования и воспринимаемой ремонтопригодностью - имея в виду, что вы даже не знаете, как ваш код все равно изменится ». Похоже, что если вы начнете с философии, что с самого начала вы будете полностью отделены от всех, что в ваш проект не будет добавлено никаких накладных расходов, поэтому вам не нужно будет оправдывать расходы на дополнительное развязывание времени. вы просто автоматически сделаете это, как вы разработали. – user1186050
Я думаю, что если вы планируете развязать с самого начала, тогда это будет дешевле, но это может стоить больше, чем (частично) связанный дизайн. Это зависит от множества факторов. Также имейте в виду, я просто беру расходы на первоначальный выпуск; не зная, где будет вести долгосрочное техническое обслуживание, я не могу сказать, будет ли определенная развязка «окупаться». – RonaldBarzell
Ответ «это зависит». – millimoose
Спросите своего жителя «архитектор». (Это зависит от общего видения вашего проекта.) – McGarnagle