Общий вопрос архитектуры N-уровня - PullRequest
3 голосов
/ 19 марта 2010

В приложении N-уровня предполагается наличие уровня бизнес-логики и уровня доступа к данным. Разве плохо иметь две сборки: BusinessLogicLayer.dll и DataAccessLayer.dll для обработки всей этой логики? Как вы на самом деле представляете эти слои. На мой взгляд, глупо иметь библиотеку классов BusinessLogic, содержащую такие классы, как: CustomerBusinessLogic.cs, OrderBusinessLogic.cs и т. Д., Каждый из которых вызывает своего кузена с соответствующим именем в библиотеке классов DataAccessLayer, т.е. CustomerDataAccess.cs, OrderDataAccess. .cs.

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

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

Я думал о чем-то вроде следующего для моей архитектуры:

Я бы использовал LINQ-To-SQL для связи с базой данных. Службы WCF для определения интерфейсов контрактов данных для уровня бизнес-логики. Затем используйте MVP с ASP.NET Forms для пользовательского интерфейса / BLL.

Теперь, это не начало этого проекта, большинство вещей LINQ уже сделано, поэтому оно застряло. Служба WCF заменит существующую сборку DataAccessLayer, а пользовательский интерфейс / BLL заменит сборку BusinessLogicLayer и т. Д.

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

Спасибо!

Ответы [ 2 ]

3 голосов
/ 19 марта 2010

так, как я это видел, чтобы иметь Библиотека классов BusinessLogic, содержащая классы как: CustomerBusinessLogic.cs, OrderBusinessLogic.cs и т. Д.

Уч. Получить и прочитать Скотт Амблер "Создание приложений объектов, которые работают". Ваш подход не является и не требует обслуживания - нет объектов.

Я бы использовал LINQ-To-SQL, чтобы поговорить с база данных. Сервисы WCF для определения данных контрактные интерфейсы для бизнеса логический слой. Затем используйте MVP с ASP.NET Формы для пользовательского интерфейса / BLL.

Да. Отличный способ сделать приложение искусственно более сложным и медленным, чем должно быть. Выкинь полный сервис WCF - для чего они? WCF предназначен для SOA, а SOA живет в пользовательском интерфейсе (т. Е. Это доверительная граница и пользовательский интерфейс для использования другим приложением). Если у вас нет этого требования ... глупо вводить дополнительные медленные технологии, которые просто накладывают расходы.

Служба WCF заменит существующая сборка DataAccessLayer

Daily WTF - какого черта у вас есть сборка DAL, когда вы используете LINQ to SQL? LINQ to SQL (среда выполнения) - это ваш DAL.

Любой, кто путешествовал по этому пути есть какие-либо указания? Хорошие ссылки?

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

Прочитайте книгу, которую я упомянул.

0 голосов
/ 21 марта 2010

В XXXBusinessLogic они очень быстро становятся Объектами Бога . Подумайте об объектах, которые имеют смысл в вашем домене, которые представляют поведение, а не об объектах BusinessLogic. Такого рода «объекты» прекратят выполнять ВСЕ работы для XXX, и да, они - кошмар обслуживания.

...