У меня небольшая проблема с архитектурой. В моем проекте у меня есть уровень бизнес-логики (BLL), который содержит все мои бизнес-правила, модели и OO API для интерфейса. Каждый объект имеет статические методы, такие как getById, которые возвращают экземпляр указанного объекта. У каждого объекта также есть методы, такие как save и, delete. Это очень простой код OO.
Теперь у меня есть слой DataAccess (DAL), содержащийся в отдельном пространстве имен, для каждого объекта BLL у меня есть DataClass или «Репозиторий», который выполняет команды getById и save. Таким образом, методы BLL save и getById представляют собой тонкий слой вокруг методов DataClass.
public static NewsItem GetByID(int id)
{
return DataFactory.GetNewsItemRepository().GetNewsItemById(id);
}
Чтобы DataClasses возвращали объекты BLL, им нужно знать BLL. так что теперь у нас есть:
GUI ---> BLL <----> DAL
DataFactory возвращает только объекты, которые реализуют Интерфейс, поэтому я могу скрыть детали реализации, такие как «OracleNewsItemRepository».
Но теперь из-за того, что беспокоило меня с тех пор, как я начал объектно-ориентированное программирование. В моем текущем решении и BLL, и DAL должны знать друг друга. Это циклическая зависимость, и лучше избегать циклических зависимостей. Также я хочу показать только интерфейсы (и мою DataFactory), а не мои классы. Это можно сделать, поместив слой DAL в отдельную сборку. Что имело бы смысл. Однако Visual Studio не позволяет двум сборкам ссылаться друг на друга. Еще один вопрос по этому поводу: C # внутренние модификаторы доступа
Почему-то мне кажется, что я неправильно понял всю схему доступа к данным. Такое ощущение, что я сворачиваю шаблон ActiveRecord с другими вещами, такими как DataMappers. Я провел много времени на сайте Мартина Фаулера, но эти шаблоны описаны очень обобщенно и проиллюстрированы очень абстрактной UML-диаграммой.
Они не решают мою проблему. Может быть, я немного анальный, и не существует такой вещи, как «идеальный шаблон доступа к данным». И то, что я делаю сейчас, не кажется ужасно неправильным. Но, как я делаю вещи сейчас, кажется, не в порядке ...
Есть идеи?