Трехуровневая архитектура с поддержкой веб-сервисов - PullRequest
1 голос
/ 02 декабря 2009

Прочитав в сети тонны статей о наилучшем дизайне приложений и шаблонах, я все еще не могу объединить всю информацию и отобразить в приложении реального слова ...

Я бы хотел иметь трехуровневое приложение:

  • UI-Layer:
    Silverlight-приложение, размещенное на ASP.net - Webapp

  • BusinessLogicLayer:
    WCF-Services / .NET RIA-Services, работающие на другом Сервере

  • DataAccessLayer: Использование ORM, например, nHibernate или Linq2Entities


Проблема в том, что я не знаю, где разместить свои бизнес-объекты и где их заполнить данными.

Должен ли быть другой слой, содержащий все мои бизнес-объекты, чтобы их можно было использовать во всех остальных 3 слоях?
Или я должен поместить их в мой BLL и вызвать nHibernate-Methods в DAL - но тогда у меня будет циклическая зависимость между BLL и DAL? Разве это не «чрезмерная архитектура», если я введу «DataAccessObjects» внутри DAL и просто скопирую все свойства в BusinessObjects в BLL?

Любая помощь приветствуется!

С уважением, Даниэль Ланг

Ответы [ 4 ]

0 голосов
/ 29 декабря 2010

бизнес-объекты идут в общем слое,

Я обычно создаю проект, и он содержит бизнес-объекты, перечисления и все, что является общим для сервера и клиента.

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

0 голосов
/ 02 декабря 2009

Ну, поскольку вы используете WCF, у вас должен быть «контракт», который содержит только интерфейсы и классы данных. Эти классы должны быть доступны всем остальным. Внутри него не должно быть логики.

0 голосов
/ 02 декабря 2009

Что ж, после рассмотрения всей проблемы, я думаю, что «лучшим» решением будет использование DependencyInjection или IversionOfControl для заполнения бизнес-объектов данными в DAL.

0 голосов
/ 02 декабря 2009

Бизнес-объекты переходят в бизнес-уровень. Эти объекты используются уровнем пользовательского интерфейса и вызывают методы из уровня данных для заполнения самих себя.

Как правило, объекты в слое вызывают только методы в своем собственном слое, или тот, что чуть ниже.

Одним из мотивов является возможность заменить один из слоев без изменения других. Например, может быть другой способ представления пользовательского интерфейса, который может использовать те же методы из бизнес-уровня. Или, возможно, базу данных можно изменить, если новый слой данных содержит те же методы, что и старый.

...