Я понимаю, что уже было несколько постов по n-уровневому дизайну, и это, возможно, я из-за того, что думаю о вещах и хожу по кругу, но сейчас я все запутался и хотел бы получить некоторую ясность от сообщества пожалуйста.
Я пытаюсь разделить проект, который я создал (и не очень хорошо спроектировал с точки зрения архитектуры), на разные слои (каждый в своем собственном проекте):
- UI
- Бизнес-объекты
- Логика / Бизнес
- DAL
UI должен вызывать только слой логики, чтобы получить его вещи
Business Objects не должен вызывать или иметь ссылки на что-либо еще, просто должен быть способ хранения данных
Слой Logic / BUSINESS должен содержать все методы для получения, создания, обновления, удаления (CRUD) объектов в системе и иметь ссылки как на BO, так и на BO. DAL. Он будет применять бизнес-логику к операциям, а затем делегировать фактический CRUD DAL.
DAL просто будет выполнять операции CRUD на БД. Он будет иметь ссылку на BO, поскольку он вернет их для Gets и т. Д.
Мой вопрос заключается в том, должны ли классы логики вызывать только свой эквивалентный класс DAL и вместо этого просто вызывать логические классы? Другими словами, класс CompanyLogic
должен вызывать только класс CompanyDAL
. Поэтому, если бы он хотел получить объект Client по идентификатору, он вызвал бы ClientLogic.GetClientByID(int)
, а не ClientDAL.GetClientByID(int)
.
Причина, по которой я подумал, что, возможно, должен остаться на собственном слое, заключалась в том, что:
Казалось бы, ослабить связь между проектами
Как насчет логики, если получение клиентского объекта имело некоторую логическую валидацию (возможно, не лучший пример, но надеюсь, что оно уловит смысл).
EDIT:
Я не уверен, что это плохой дизайн для меня, но на данный момент уровень BUSINESS имеет несколько классов, включая ClientBULL и CompnayBULL, оба класса имеют вызовы друг к другу. Я использую интерфейс для каждого класса и имею фабрику для создания объектов, чтобы попытаться уменьшить любые связи, но теперь они не могут существовать друг без друга из-за вызова методов в обоих классах. Это плохая идея?