Я надеялся, что кто-то может помочь прояснить мои варианты относительно методов рефакторинга из программных кодов со страниц веб-форм ASP.NET.
В качестве фона мы недавно потратили некоторое время на реализацию шаблона репозитория как в общем, так и в общем виде.не универсальный смысл, который позволил нам вывести множество методов DAL из кодовых областей, и это здорово.
То, что я изо всех сил пытаюсь завершить, - это разумный подход к удалению методов логики приложения изкод указывает, какой конкретный акцент делается на хранилище / DAL и как лучше структурировать классы BL.
Вот два варианта, которые я рассматриваю в настоящее время:
1.Создайте класс Business Logic дляИсходя из кода и из этого, предоставьте такие методы, как getProject(int id)
, которые могли бы закулисно получить доступ к экземпляру репозитория repo.GetById(int id)
Насколько я понимаю, преимущество этого будет следующим:
- отделить логику приложения от кодовых частей, позволяя им быть простыми
- , позволяястабильные методы в BLL (с некоторыми изменениями), своего рода синонимичные с классами контроллеров в MVC (хотя это все еще веб-формы)
- Не предоставляет хранилище напрямую
Недостаткибудет:
- Множество методов-обёрток в BLL, которые на самом деле ничего не делают, кроме как скрывают методы репозитория
2.Пишите методы расширения на моих типах сущностейнапример, Project.getUsers()
, который будет обращаться к методу экземпляра репозитория, позволяющему хранить BL без необходимости в конкретном классе BLL, тем самым уменьшая дублирование методов-оболочек в каждом классе BL.
Преимущество этого было бы:
- Нет необходимости иметь BL как таковой, сохраняя методы с их типом сущности
- Меньше методов-оболочек, так какНет необходимости в
ProjectBL.getUsers(projectid)
и UserBL.getUsers(projectid)
, которые оба вызывают repo.getProjectUsers(projectid)
за кулисами, просто Project.getUsers()
с обеих сторон кода
Недостаток этого, насколько я могу сказать:
- Если я буду вводить новые типы в будущем, например, 'SubProject'
getUsers()
необходимо повторно реализовать - Я не слишком увлечен методами расширения в целом и неконечно, если это правильное место, чтобы использовать их!
Я немного не уверен, что это «лучшая» практика, или если я пропустил лучший вариант все вместе.Возможно, стоит знать, что изначально хранилище создавалось в коде и осуществлялось к нему напрямую, но, как я понимаю, это не идеально, поскольку мы рискуем вернуть такие вещи, как IQueryable, из хранилища и создать методы DAL, которыми можно манипулировать в кодепривести к противоречивым результатам.