DTO类的数据类型

时间:2018-09-24 11:58:33

标签: c# domain-driven-design dto

数据传输对象(DTO)类中的属性的数据类型应该是什么? 例如:我的域类可能是:

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

我可以这样创建和使用通用DTO:

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

以便可以将DTO发送到不同的数据层进行数据库映射(oracle sql或任何其他数据库)。

1 个答案:

答案 0 :(得分:0)

不要这样做。有什么好处?

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);