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