Недавно я оказался в состоянии объяснить (внутреннее) выражение, которое я написал двум кандидатам, которые моя компания любит нанимать, чтобы помочь в обслуживании и добавлении второстепенных функций.
Это первое "производственное" приложение, которое я написал, оно имеет 45 тыс. LOC, и я провел почти два года "сольного" развития на нем. Я довольно молод (18 лет) и написал приложение с нуля, будучи заключенным на контрактной основе для бывшего разработчика, который покинул компанию. Не имея опыта разработки приложений такого размера, я попытался использовать общие архитектурные и дизайнерские шаблоны.
Сегодня я знаю, что сделал некоторые серьезные надстройки, например. используя отключаемую архитектуру отслеживания изменений вместо шаблона Unit Of Work, который выбранный ORM уже реализован. Мне, вероятно, никогда не придется идти "реальными" тремя уровнями.
Оба кандидата имеют 10 лет + опыт разработки приложений внутри компании с соответствующей платформой. Будучи наполовину их возраста и имея небольшой опыт, я уважаю их мнение. Когда я объяснял им архитектуру приложения, комментарии были следующими:
- Боже, никто бы не заплатил мне за то, что я делал, мне нужно все сделать.
- Придерживайтесь того, что делает фреймворк, не используйте причудливые библиотеки/технологии
- Не завершайте код рамки. В команде все будут писать свой собственный код обертки.
- Вы используете .NET 3.5? Ну, мы используем 2.0.
- Что заставляет меня покупать LINQ? Вся эта композиция запроса и проекция кажутся слишком сложными.
Теперь я спрашиваю себя:
Я архитектура астронавта? Откуда я знаю, что я зашел слишком далеко с архитектурой? Каковы общие симптомы чрезмерной инженерии?