Отзыв об архитектуре приложения

Я искал отзывы о текущем дизайне.

Вот как это сейчас выглядит

  1. Ссылки на веб-приложение (пользовательский интерфейс) Уровень BLL и уровень BusinessEntities
  2. Уровень BusinessEntites - содержит интерфейсы и классы (с внутренней проверкой свойств)
  3. BLL (ссылается на уровень BusinessEntities и DAL) - имеет в основном менеджеров для каждого из бизнес-объектов с такими методами, как Create () Save () Delete ().
  4. DAL (ссылается на уровни BusinessEntities) - содержит команды БД, которые создают / добавляют / обновляют объекты Business Entities.

Я не совсем уверен в соглашениях об именах, которые я использовал для слоев, поэтому, если у кого-то есть лучшие предложения, я с радостью их приму.

Также мне не нравится идея, что DAL ссылается на уровень BusinessEntities, но как еще я собираюсь возвращать объекты вместо наборов данных / таблиц данных?

Спасибо за любой отзыв.


person AlteredConcept    schedule 08.04.2009    source источник


Ответы (1)


Что касается вашей необходимости ссылаться на бизнес-уровень из DAL, я согласен, что это, вероятно, не оптимально - нижние уровни не должны знать о тех, что над ними, это снижает возможность повторного использования и добавляет дополнительные / потенциально циклические зависимости.

Рассматривали ли вы, чтобы ваши бизнес-объекты «наполнялись» и выполняли свои собственные операции сохранения с использованием классов DAL, вместо того, чтобы DAL действовал для них как фабрика (как в вашем текущем проекте)? Таким образом, ваш DAL будет более прямым представлением базы данных, а бизнес-объекты будут содержать (бизнес-логику), необходимую для надлежащего заполнения и сохранения.

Кроме того, указанный вами слой «BLL» на самом деле не кажется мне содержащим бизнес-логику; мне кажется, что это больше уровень сервисов сохранения для сущностей.

Итак, вариация того, что вы предлагаете, может быть:

  1. Интернет / пользовательский интерфейс, ссылка на бизнес-объекты
  2. BusinessEntities, содержит интерфейсы и классы с бизнес-логикой. Слой ссылок DataServices
  3. DataServices, содержит классы, которые загружают, находят и сохраняют данные. Может обслуживать «общие» структуры, содержащие данные (объекты передачи данных), которые могут быть созданы, потреблены и обработаны бизнес-объектами. Ссылки DAL.
  4. DAL, который просто предоставляет классы, которые сопоставляются с таблицами.

В зависимости от ваших требований, я бы рассмотрел возможность объединения ваших BusinessEntities и DataServices (BLL в вашем первоначальном дизайне) в один уровень; единственная причина, по которой я могу придумать, чтобы разделить их, - это если вы делаете что-то вроде Silverlight, где вам нужны асинхронные операции с данными на клиентских бизнес-объектах.

Конечно, все это происходит при неполном знании ваших конкретных системных требований - вам нужно будет разработать то, что лучше всего подходит для вашего конкретного приложения. Удачи!

person Guy Starbuck    schedule 08.04.2009
comment
Спасибо, парень. Мне все еще трудно понять, как DAL будет передавать класс на уровень DataServices, ничего не зная об этом. Я, очевидно, очень новичок в этом, поэтому, возможно, мне поможет пример. Если есть время, конечно, но если нет, ничего страшного. - person AlteredConcept; 08.04.2009
comment
Я вижу, вы задали дополнительный вопрос, но, чтобы кратко ответить, я бы определил DTO в DAL, и если бы мне понадобился уровень службы доступа к данным, я бы предоставил его интерфейсы BusinessEntities в виде контрактов сообщений, независимо от DTO. DTO просто позволяют избежать передачи объектов ADO.NET. - person Guy Starbuck; 09.04.2009
comment
Итак, это будет выглядеть следующим образом: DAL имеет IAddressDTO, AddressDTO и общедоступный IAddressDTO GetAddress (int id) {}. Уровень DataService тогда будет иметь метод public Address GetAddress (int id) {DAL.IAddressDTO iadd = new DAL.AddressDAL.GetAddress (int id); // Создание адресного объекта с помощью DTO} - person AlteredConcept; 09.04.2009
comment
Конечно. Вы также можете определить свои DTO в общей сборке, на которую можно ссылаться на всех уровнях, чтобы они были доступны для каждого уровня и могли передаваться между ними. - person Guy Starbuck; 09.04.2009