数据映射器:每个型号一个还是一个尺寸适合所有型号?

Data Mapper: One For Each Model or One Size Fits All?

我注意到很多人建议为每个模型创建一个数据映射器,但这可能很耗时。为什么创建一个检测对象(模型)属性(变量)并将它们与数据库字段匹配的通用数据映射器没有好处?

"Why wouldn't it beneficial to create a generic data mapper"

绝对有好处(例如,减少重复代码),但如果您要直接使用它,则有一些潜在的缺点。几个潜在的陷阱(超出我的想象)...

给出这个例子:IUser user = DataMapper.Map(HashTable userRecord);

  • 如果 userRecord 包含无效数据会怎样? Map 方法是否应在尝试填充 User 对象之前验证 HashTable 是否包含所有相关信息?该验证过程会因对象类型而异吗?
  • 如果对象被修改为带有构造函数参数怎么办?

我自己也曾走这条路,最终发现很多对象是使用通用映射器构建的,而其他对象是使用非通用映射器构建的,这最终让开发人员感到非常困惑(这我应该为这个对象使用映射器吗?),以及映射方法中的一些可怕的东西"cleverness"。

您绝对可以使用通用数据映射器,但您可能需要考虑将其用作抽象基础 class 并在其之上编写专门的映射器以避免 "special" 对象的挑战,并在对象需要以映射器不支持的某种方式进行更改时避免大量深度的、具有潜在危险的重构。

[请注意,我不认为自己(甚至远不是)data/object 映射方面的专家,所以请对我的任何建议持保留态度]