2016-02-24 4 views
0

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

Мой Пользовательский интерфейс может иметь следующие значения на экране:

Имя продукта: Продукт ABC

Код продукта: 1234

Описание: a)

Когда пользователь нажимает кнопку отправки, чтобы добавить эту запись в базу данных, я создаю DTO следующим образом:

public class NewProductDto 
{ 
public string ProductName {get;set;} 
public string ProductCode {get;set;} 
public string Description {get;set;} 
} 

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

Если я не должен этого делать, то как значения из пользовательского интерфейса должны быть упакованы для уровня приложения для приема и отправки на уровень домена для выполнения валидации и создания новых объектов?

Возможно, простая структура данных?

struct NewProduct 
{ 
public string ProductName; 
public string ProductCode; 
public string Description; 
} 

struct NewProduct aNewProductStructure; 

(т.е. CreateNewProduct (aNewProductStructure) вместо CreateNewProduct (aNewProductDto)

Заранее спасибо

---------- Обновление 2/24/2016 9?.: 58 утра

ОК, основанный на недавней информации Я упускал из виду, что, как представляется, уровень приложения должен получать DTO от пользовательского интерфейса, а затем преобразует его в куски, чтобы перейти в домен. Поэтому в моем примере выше уровень приложения должен проходить новый продукт, который будет создан как foll ows к доменному слою:

CreateNewProduct (ProductName, ProductCode, Description);

Определение для CreateNewProduct:

public int CreateNewProduct(string ProductName, string ProductCode, string Description) 
{ 
.... 
} 

В принципе, я должен пройти в отдельных значений к домену.

ответ

1

Использование DTO для передачи данных по границе процесса - это хорошая вещь.

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

Это означает, что компонент приложения должен принимать DTO и создавать из него типы значений, которые будут распознаны доменом. Вся проверка данных (проверка диапазона типов значений, декодирование строк, нулевые проверки и т. Д.) Происходит на прикладном уровне.

Так это близко:

public int CreateNewProduct(string ProductName, string ProductCode, string Description) 
{ 
    .... 
} 

Но еще лучше было бы

public int CreateNewProduct(ProductName productName, ProductCode productCode, Description description) 
{ 
    .... 
} 

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

В модели домена описываются любые изменения в приложении с использованием типов, которые он понимает, и тогда приложение отвечает за нормализацию результата (т. Е. Создание DTO для отправки обратно клиенту, передача изменений компоненту persistence, и т.д).

 Смежные вопросы

  • Нет связанных вопросов^_^