Пожалуйста, дайте мне знать, если это хорошая архитектура для подражания?
Это прекрасный старт - единственная вещь, которую я хотел бы предложить вам добавить это слой абстракции между вашей бизнес-логики и доступа к данным (т.е.: Dependency Inversion/Injection) - см это: An Introduction to Dependency Inversion.
я знаю, его не обязательно, но я думаю, что это делает проект выглядит более профессионально :-)
Ха! Обычно вы обнаружите, что много «вещей» не необходимо - вплоть до момента, когда оно есть, и в этот момент, как правило, слишком поздно.
Re View Engine: Я по-прежнему новичок в ASP.NET MVC и поэтому не знаком с двигателями просмотра, о которых вы говорите; если бы я был вами, я бы придумал некоторые тестовые сценарии, а затем попытался решить их с каждым продуктом, чтобы вы могли напрямую сравнить их. Часто вам нужно взять вещи, чтобы тест-драйв стал более удобным - хотя это может занять некоторое время, но обычно это стоит того.
Edit:
Если я предлагаю этот слой к моей PM и дать ему две вышеупомянутые причины, то я не думаю, что он примет его
Во-первых , PM's не tech ведет (обычно); вы несете ответственность за разработку решения, а не за PM. Это не редкость, по моему опыту большую часть времени, когда премьер-министр даже не подозревает, что они вторгаются на ваш торф, который не является тем. Дело не в том, что я «политический захватчик земли», но я просто склонен думать о «разделении интересов», и, я уверен, вы понимаете.
Как проектировщик/архитектор, вы должны интерпретировать требования и (принимая во внимание приоритеты бизнеса) придумать решение, обеспечивающее лучшую «платформу» в будущем.
(Относительно DI) Мой вопрос, действительно ли это стоит?
Если вы приставили пистолет к моей голове, я бы сказал, да, однако реальный мир является немного более сложным.
Если вы ответили утвердительно на любой из этих вопросов, то его, скорее всего, используя DI будет хорошей идеей:
- Система нетривиально
- Ожидаемый срок службы системы составляет более (не уверен, что здесь есть правильная фигура, вероятно, нет, поэтому я собираюсь поставить ставку в землю на 2 года.
- Система и/или ее требования являются текучими.
- Разделение работы (BL/DAL) в разные команды было бы выгодно для проекта (возможно, вы являетесь частью распределенной команды).
- Система предназначена для рынка с разнообразным техническим ландшафтом (например: не каждый захочет использовать MS SQL).
- Вы хотите выполнить тестирование качества (это упростит).
- Система большая/сложная, поэтому возможность разделения функций и помещения ее в другие системы - это возможность.
- Вы хотите предложить несколько способов хранения данных (скажем, файловый репозиторий бесплатно и репозиторий, управляемый базами данных за определенную плату).
- Драйверы/среда для бизнеса являются неустойчивыми - что, если они приходят к вам и говорят: «Это превосходно, но теперь мы хотим предложить версию на основе облаков, можете ли вы поместить ее на Azure?»
Id также хотел бы отметить, что, хотя есть определенная кривая обучения, это не так уж и огромно, и как только вы достигнете скорости, вы по-прежнему будете по крайней мере так же быстро, как и сейчас; или в худшем случае вы займетесь немного дольше, но вы получите гораздо большую ценность (с относительно меньшими усилиями).
С точки зрения того, сколько усилий участвует ...
Разовые задачи (за пределами получения команды до скорости):
- Writting провайдера Loader или собирание DI Framework. Как только вы это сделаете, он будет повторно использован во всех ваших проектах.
«Новый» Общие задачи (если вы будете следовать подход, принятый в статье):
- Определение интерфейса (на бумаге) - это то, что вы будете делать прямо сейчас в любом случае, за исключением того, что вы не понимаете этого. В основном это OO Design, но поскольку это будет формальный интерфейс между двумя или более пакетами, вам нужно подумать (и да, вы все же можете его реорганизовать), но в идеале интерфейс должен быть «стабильным» и не сильно меняться; если он изменится, лучше «добавить», чем «удалить или изменить» существующих участников).
- Код кода разговора. Это очень быстро (минуты не часов), поскольку вы не навязываете какую-либо реализацию; и когда вы идете реализовать, вы можете использовать инструменты, предоставляемые вашей IDE, для создания кодовых заглушек на основе интерфейса.
То, что вы делаете сейчас, вы могли бы сделать по-другому:
- Инстанцированием переменного (в классах BL) для удержания поставщика, вероятно, через фабрику. Написание этого не должно занять много времени (опять же, минут не часов), и это довольно простой код для копирования, вставьте & рефакторинг, если требуется.
- Написание кода DAL: должно быть таким же, как и раньше.
Вопрос для вас - что вы видите как разницу между BL и моделью? Вы говорите о них, как будто они разные, но ИМХО, они то же самое. –
IMHO, модель - это уровень доступа к данным «Разговорный DAL».Уровень, который фактически обменивается данными с базой данных. Если бизнес-уровень является тем, который заботится обо всех бизнес-логиках, вспомогательных функциях Validations и т. Д. BUsiness Layer отвечает за предоставление данных DAL, тогда как ответственность DAL заключается только в том, чтобы сообщать запросы Business Layer к БД. – user492911