У меня есть веб-клиент, который вызывает мой уровень бизнес-службы WCF, который, в свою очередь, вызывает внешние службы WCF для получения фактических данных. Первоначально я думал, что буду использовать DTO и иметь отдельные бизнес-объекты на разных уровнях... но я обнаружил, что тривиальные примеры, пропагандирующие DTO, ну, ну, тривиальные. Я вижу слишком много повторяющегося кода и мало пользы.
Рассмотрим мой домен:
Пример домена У меня есть один экран пользовательского интерфейса (Asp.net MVC View ), который показывает список лекарств пациента, побочные реакции (между лекарствами )и любые клинические состояния (, такие как депрессия или гипертония ). ] пациент может иметь. Моя доменная модель начинается на верхнем уровне с:
MedicationRecord
List MedicationProfiles
List Reactions
List ClinicalConditions
MedicationProfile is itself a complex object
string Name
decimal Dosage
Practitioner prescriber
Practioner is itself a complex object
string FirstName
string LastName
PractionerType PractionerType
PractionerId Id
Address Address
etc.
Кроме того, при выполнении запросов WCF у нас есть объект запроса/ответа, например.
MedicationRecordResponse
MedicationRecord MedicationRecord
List Messages
QueryStatus Status
and again, these other objects are complex objects
(and further, complicates matter is that they exist in a different, common shared namespace)
На данный момент я склоняюсь к тому, что MedicationRecordResponse является моим DTO. Но в чистых DataContracts и DTO и разделении дизайна,я должен это сделать?
MedicationRecordResponseDto
MedicationRecordDto
List
QueryStatusDto
and that would mean I then need to do
MedicationProfileDto
PractitionerDto
PractitionerTypeDto
AddressDto
etc.
Поскольку я показываю почти всю информацию на экране, я фактически создаю 1 DTO для каждого объекта домена, который у меня есть.
Мой вопрос: --что бы вы сделали? Не могли бы вы пойти дальше и создать все эти DTO? Или вы просто поделитесь своей моделью предметной области в отдельной сборке?
Вот кое-что из других вопросов, которые кажутся актуальными: