.NET: DDD и ASMX, избегайте использования нескольких пространств имен в прокси-классах - PullRequest
2 голосов
/ 29 сентября 2011

Я новичок в DDD и сейчас пытаюсь реорганизовать проект в сторону доменной архитектуры. У проекта есть клиентская и серверная части (веб-сервис ASMX). Теперь я создал библиотеку классов под названием «Домен», на которую ссылается как клиентское приложение, так и сервер.

Теперь я хочу, чтобы мое SOAP-соединение основывалось на моей доменной модели. Но, как вы знаете, веб-служба ASMX создает некую библиотеку прокси-классов внутри клиента, как только веб-ссылка установлена.
Это приводит к тому, что имеет каждый объект домена и значение объекта дважды в разных пространствах имен .

  1. Можно ли напрямую использовать модель предметной области для связи и избежать генерации прокси-классов ASMX ?

  2. Как DTO используются в DDD? Как вы знаете, некоторые части домена могут быть не сериализуемыми (например, использование NHibernate / IList), поэтому в прошлом я часто создавал более простые DTO-версии своих классов сущностей. Является ли общепринятой практикой определение сущностей DTO в домене ?

Ответы [ 2 ]

1 голос
/ 29 сентября 2011

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

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

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

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

0 голосов
/ 29 сентября 2011

Невозможно использовать исходную модель домена (полученную по ссылке, а не по WEB-ссылке на модель домена) для связи с ASMX: вы должны использовать модель, представленную asmx, то естьпохожи, но не одинаковы (т.е. список преобразуется в массив).

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

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\wsdl.exe" /sharetypes /o:C:\code\MyProxy.cs /namespace:MyProxies http://website/FirstService.asmx http://website/SecondService.asmx  
Pause 

Где
- "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\wsdl.exe" - это wsdl.exe с относительным путем (он должен быть на вашем ПК)
- /sharetypes означает, чтовы хотите только 1 пространство имен в выводе
- /o:C:\code\MyProxy.cs - это .cs имя файла , которое будет содержать все созданные классы
-/namespace:MyProxies - это пространство имен для всех классов создано
- http://website/FirstService.asmx <a href="http://website/SecondService.asmx" rel="nofollow">http://website/SecondService.asmx</a> - список веб-сервисов, которые вам нужно вызывать
- Pause означает, что вы хотите, чтобы полка окна оставалась открытойчтобы прочитать отзывы об операциях.


ПРИМЕЧАНИЕ
1) Все инструкции должны быть в одной строке (не нажимайте ввод);Pause во второй строке.
2) Если /o:C:\code\MyProxy.cs будет частью вашего решения (я так думаю) и вы используете контроль источника , файл должен быть извлечен будет перезаписано wsdl.exe

...