Правильно ли это «наслоение» моего веб-сервиса? Можно ли это улучшить? - PullRequest
3 голосов
/ 14 июля 2010

Я пишу веб-сервис для получения информации о счете-фактуре из таблицы базы данных.Особенности следующие:
Я намереваюсь дать InvoiceAgentId в качестве ввода и извлечь PayerId, PayerName, EffDate и InvoiceAgentId.
Теперь,
1. В InvoiceInfoSearch.asmx.cs файл У меня есть WebMethod ... GetInvoiceInfo
2. У меня есть объекты DTO InvoiceInfoRequest и InvoiceInfoResponse
3. У меня есть класс менеджера BusinessLayer InvoiceSearchmanager
4.У меня есть DAL InvoiceInfoDAL

Веб-метод в пункте # 1 создает экземпляр класса InvoiceSearchManager и вызывает метод GetInvoiceInfo в менеджере, передавая InvoiceInfoRequest.Затем метод менеджера создает экземпляр InvoiceInfoDAL и вызывает метод GetInvoiceInfo в DAL, передавая InvoiceInfoRequest.В методе DAL создается экземпляр InvoiceInfoResponse, который заполняется полученным набором записей, а затем распространяется обратно в веб-метод. InvoiceInfoRequest и InvoiceInfoResponse Классы DTO имеют одинаковых членов?В моем случае PayerId, PayerName, EffDate и InvoiceAgentId.
2. Правильно ли это наслоение?Можно ли улучшить?

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

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

Если это так, как вы собираетесь провести модульное тестирование бизнес-уровня изолированно?

Я бы предложил вам ввести уровень абстракции для DAL и бизнес-уровней (предоставив им реализацию интерфейсов).Тогда реализация бизнес-уровня может принять интерфейс DAL в качестве аргумента конструктора (внедрение конструктора) вместо того, чтобы создавать его экземпляр DAL.

Этот уровень абстракции позволит вам заменить реальный DAL в модульном тесте на фиктивный объект и протестировать бизнес-уровень изолированно.веб-уровень.

0 голосов
/ 14 июля 2010

Это все дело вкуса, однако мой подход был бы проще:

Controller (eg your *.asmx.cs) -> 
  Business Services ->
    DAL

На ваше усмотрение.Тем не менее, моя архитектура основана на том, что работает (например, не трутся о зерно) с весной и спящим в мире Java.Я предполагаю, что C # следует за подобными архитектурами.

...