Тип данных класса DTO - PullRequest
       18

Тип данных класса DTO

0 голосов
/ 24 сентября 2018

Каким должен быть тип данных свойств в классах объекта передачи данных (DTO)?Пример: Класс моего домена может быть:

class Product { 
    string name; 
    decimal price;
    double quantity;
}

Могу ли я создать и использовать универсальный DTO, например:

class ProductDTO {
    object name;
    object price;
    object quantity;
}

, чтобы DTO можно было отправлять разным Datalayers для отображения базы данных(оракул sql или любой другой БД).

1 Ответ

0 голосов
/ 25 сентября 2018

Не делай этого.В чем преимущество?

Пользователь вашего класса DTO не имеет представления о типах полей / свойств.Вероятно, он может догадаться, что поле Имя должно быть строкой, но как насчет цены и количества?Они двойники?Десятичные?Целые числа?

Очевидно, что он может поместить туда что угодно, и оно скомпилируется и запустится, но тогда вам придется проверять типы в вашем уровне данных и генерировать исключения, когда типы не совпадают (и если нет,ваша база данных, вероятно, будет).

Возможно, вы могли бы использовать дженерики вместо этого, что-то вроде

class ProductDTO<Nt, Pt, Qt>
{
    Nt name;
    Pt price;
    Qt quantity;
    public ProductDTO(Nt name, Pt price, Qt quantity)
    {
         this.name = name;
         this.price = price;
         this.quantity = quantity;
    }
}

А потом:

var dto1 = new ProductDTO<string, decimal, double>("product1", 12.3m, 33.0); // name is string, price is decimal, quantity is double
var dto2 = new ProductDTO<string, double, int>("product2", 122.4, 15);  // string, double, int

Вы также можете создать статический метод икласс и пусть вывод типа делает работу:

static class ProductDTO
{
    public static ProductDTO<N, P, Q> Create<N, P, Q>(N name, P price, Q quantity)
    {
        return new ProductDTO<N, P, Q>(name, price, quantity);
    }
}

А затем

var dto3 = ProductDTO.Create("product3", 123.4, 56.7);
...