数据传输对象(DTO)类中的属性的数据类型应该是什么? 例如:我的域类可能是:
class Product {
string name;
decimal price;
double quantity;
}
我可以这样创建和使用通用DTO:
class ProductDTO {
object name;
object price;
object quantity;
}
以便可以将DTO发送到不同的数据层进行数据库映射(oracle sql或任何其他数据库)。
答案 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);