#3-tier
#3-уровневый
Вопрос:
Я работаю над устаревшим веб-проектом, поэтому здесь нет ORM (EF, Nhibernate). Проблема здесь в том, что я чувствую, что структура утомительна при реализации новой функции.
допустим, у меня есть команда biz Object. Теперь, если я хочу получить GetTeamDetailsByOrganisation, следуя текущему стилю кодирования в проекте, мне нужно:
- В DAL команды создайте метод GetTeamDetailsByOrganisation
- Создайте метод GetTeamDetailsByOrganisation в команде Biz Object и вызовите метод DAL, который я только что создал
- В BAL команды завершите метод команды Business object другим методом, возможно, с тем же именем, GetTeamDetailsByOrganisation
- Класс контроллера страницы вызывает метод BAL.
Это просто кажется неправильным. Любая хорошая практика или шаблон могут решить мою проблему здесь.
Ответ №1:
Я знаю скуку, о которой вы говорите, по аналогичным (возможно, хуже) структурированным проектам. Очевидно, что существует множество разумных ответов на эту проблему, но все зависит от ваших ограничений и целей.
Если проект в основном находится в режиме обслуживания без добавления каких-либо новых функций, я мог бы согласиться с тем, что так оно и есть. Хотя звучит так, как будто вы добавляете по крайней мере некоторые новые функции.
Возможно ли использовать генератор кода? В проекте, над которым я работал, было много подобной скуки, которая, по-видимому, была вызвана тем, что они изначально использовали генератор кода для кодовой базы, которая была потеряна в песках времени. В итоге я воссоздал шаблон, что сэкономило мне много времени, здравомыслия и дефектов.
Если проект все еще находится в активной разработке, возможно, имеет смысл выполнить какое-то крупное архитектурное изменение. Мой текущий проект в настоящее время относится к этой категории. По ходу работы мы разделяем код и добавляем репозитории. Это медленный процесс, требующий усердия и дисциплины от всей команды разработчиков. Каждый раз, когда команда берется за историю, они облагают эту историю переписыванием части устаревшего кода в этой области. Чтобы облегчить это, мы провели презентацию для остальной части команды, чтобы заручиться поддержкой и пониманием. Мы также создали некоторую документацию для нашей команды разработчиков, в которой перечислены шаги, которые необходимо предпринять, и на что следует обратить внимание. За последние 6 месяцев мы добились огромного прогресса. У нас нет дублирования, о котором вы говорите, но у нас есть проблемы с жесткой связью, которые делают модульное тестирование невозможным без этого рефакторинга.
Это с меньшей вероятностью соответствует вашему сценарию, но это также может быть возможностью взять определенное подмножество функций и разделить их на отдельные сервисы, которые можно переписать с использованием лучшей платформы и шаблонов. При необходимости старая кодовая база может взаимодействовать на уровне сервиса. Вероятно, вы вносите изменения в определенные области чаще, чем в другие, поэтому области, требующие значительных изменений, могут быть первоочередными для перехода на выделенный сервис. Преимущество этого заключается в том, что это позволяет создавать современную кодовую базу без необходимости переписывать все приложение с нуля сразу. Эта стратегия — то, что Netflix сделал, чтобы переписать свою платформу по ходу работы и перенести ее в облако.
Комментарии:
1. Спасибо @Sneal, проект, над которым я работаю, является техническим, поэтому добавлю некоторые функции, но не так много. Поэтому рефакторинг, возможно, не самый лучший выбор для меня. Что я действительно хочу знать, так это как создать архитектуру такого рода senerio well. Ваш опыт, такой как разделение бизнеса на выделенный уровень обслуживания, полезен, но все еще кажется немного абстрактным. Вы упомянули, что сделали какую-то презентацию, возможно ли передать их (ppt) в Интернет? тогда я, возможно, получу более четкое представление о том, как в будущем все делать разумно.