Я думаю, что «правильный» путь объяснялся в других ответах. Но напишу сейчас на собственном опыте.
Есть несколько вещей, которые вы должны учитывать при выборе архитектуры.
а. Клиент
У вас есть достаточно времени, чтобы сделать все «правильным» (отличная архитектура, тесты и т. Д.)? Иногда клиент хочет быстро увидеть результат. Мы можем пожаловаться на то, что времени мало, и продукт не будет соответствовать самым высоким стандартам, но, в конце концов, это наша проблема. В таких ситуациях мы объясняем клиенту, что он получит, и пишем известный всем нам спагетти-код.
Каковы требования клиентов (с точки зрения надежности, масштабируемости, расширяемости, скорости)? Я думаю, это не требует пояснений. Иногда клиент диктует «правильный» путь. Мы можем предложить клиенту «правильный» путь, но в конечном итоге все будет решать клиент (конечно, в зависимости от времени и денег).
Кто будет поддерживать систему после того, как вы ее разработаете? Я хотел бы поддержать красивый и несвязанный код. Поэтому, когда я пишу код, я стараюсь сделать его «правильным». Когда-нибудь я мог бы соединить представление и контроллер или соединить какой-нибудь сервис и быть доволен этим. Зная свой собственный код, его легко поддерживать.
б. Проект
Каков размер проекта? Некоторые проекты настолько малы, что не требуется сложной архитектуры.
Есть ли шанс на быстрое развитие программного обеспечения в будущем (больше функций)? Это одна из самых больших проблем. Но если программа растет, значит, она успешна. У вас, вероятно, будет больше ресурсов для работы. Реорганизовать код и сделать его «правильным» относительно легко.
Будут ли у проекта проблемы с масштабируемостью? Есть проекты, которые никогда не будут расти с точки зрения пользователей и данных. Я видел проекты, которые пытаются выглядеть серьезно, используя настройку базы данных Oracle RAC, когда простая встроенная база данных будет работать нормально!
Вы начали проект или перенимаете его у других разработчиков? Это комбинация вопросов о том, кто будет поддерживать программное обеспечение и будет ли оно расти. Вы можете получить спагетти-код от других разработчиков. Будет ли у вас время и ресурсы, чтобы сделать это «правильным»?
c. Команда разработчиков
Достаточно ли у команды опыта, чтобы правильно выполнить развязку? Когда я был менее опытен, я пытался написать «правильный» код. И я потерпел неудачу. Дело в том, чтобы действительно знать свою команду разработчиков, их навыки и знания. Не стоит недооценивать эту проблему. Работая с менее опытными разработчиками, я обычно жертвую архитектурой. Жертва, которая будет принесена, - это наиболее обоснованное предположение, которое у меня есть. Есть некоторые моменты в архитектуре, которыми вы можете пожертвовать, а есть некоторые, которыми вы не можете. Обычно одна или несколько жертв, которые вы принесли ранее, вернутся и укусят вас.
Есть ли у разработчиков опыт написания автоматических тестов? Недостаточно иметь автоматические тесты. Они должны быть полными (насколько это возможно) и выполнены правильно. Если ваши тесты слабые, то лучше вообще их не брать. Не стоит опираться на дырявую стену.
Заключение:
Я знаю, что все мы хотим быть профессионалами. И, как профессионалы, мы должны все учитывать. Мы не можем тратить время и энергию на то, чтобы делать что-то «правильным» образом. Иногда мы должны смотреть на другие факторы (реальность) и делать свой выбор. И самое главное - с этим жить.
person
Bojan Milenkoski
schedule
05.07.2011