从单一来源生成“并行”数据对象代码的方法?

Posted

技术标签:

【中文标题】从单一来源生成“并行”数据对象代码的方法?【英文标题】:Ways to generate "parallel" data objects code from single source? 【发布时间】:2014-05-14 23:28:47 【问题描述】:

我有一堆实体反映了我的应用程序中的数据流。同样的数据是这样的: 1.流畅的nHibernate映射 2.数据库访问对象 3.实体(类似于“服务器端的干净数据”) 4. DTO对象,即Entity加上一些额外的字段,用于客户端-服务器交互。

这些都必须支持相同的字段集,并且我还必须在 DAO 和实体以及 DTO 和实体之间设置 Automapper 映射。如您所见,这是很多手动复制粘贴。是否有任何软件可以帮助从字段列表中自动生成许多相似的对象?

我使用 C#。

【问题讨论】:

【参考方案1】:

如果每个层之间确实有一堆共同的属性,您可以将它们放在一个共同的分母基础类型上,该基础类型将被流程中的每个对象扩展。

另一方面,如果每一层略有不同,但可以预见,请考虑编写一个 LinqPad 脚本,根据其中一层为其他三层生成所需的代码。 LinqPad 是此类工作的不错选择,因为您不必处理解析;在生成其他层时,您可以简单地使用反射来检查包含其中一个层的已编译程序集。

不过,我最终还是建议您尝试减少要处理的层数。例如,对于第 (4) 层,您可以简单地使用包含而不是复制粘贴来“添加”附加属性吗?例如:

public class CustomerDto  
    public CustomeEntity Entity  get; set;  
    public int SomeProp  get; set; 

我对 NHibernate 不太熟悉,但您真的需要 (1) 和 (2) 的不同类型吗?

另一种处理方式是关注各个功能需要处理的数据,而不是为数据库中的每个“表”创建一大堆类。这样,您可以编写一个 LINQ 查询,将数据直接转换为您实际使用的类型。

向应用程序添加层在理论上通常看起来不错,但在实践中我发现它通常无法提供太多抽象,同时会增加大量编码开销。

【讨论】:

以上是关于从单一来源生成“并行”数据对象代码的方法?的主要内容,如果未能解决你的问题,请参考以下文章

OOP

从对象定义生成数据库表

Java8实战使用并行流

面向对象设计原则

核心数据单一托管对象上下文和两个线程

如何从 GraphQL 生成 Dart - graphql 到 dart 生成器