1

我正在寻找使用一组约定(例如所有公共属性)从业务对象(类型定义,而不是映射数据)生成数据传输对象的最佳方法,并且可能可配置以确定要走多远。

我意识到,对于 dto 与业务对象不相似的许多情况(例如将多个业务对象扁平化为单个数据传输对象时),这可能是不可能的,甚至是不可取的。

但是,就我而言,我的数据传输对象中有很大一部分与它们的业务对象非常相似(尤其是用于更新数据的 DTO)。

我想知道是否有任何现有的代码生成工具(我正在寻找具有现有模板的特定解决方案,而不仅仅是像 CodeSmith 这样的通用代码生成工具),或动态程序集创建工具(例如在幕后使用反射发射)?或者,如果这是您在我有兴趣了解您使用什么技术帮助我在各种选项之间做出决定之前所做的事情。

4

3 回答 3

4

您可能会发现 AutoMapper 非常有用: http: //www.codeplex.com/AutoMapper

编辑,以回应OP评论:

T4 模板包含在 Visual Studio 中用于代码生成。这是一篇关于使用 T4 生成实体到 DTO 代码的帖子:

http://weblogs.asp.net/cibrax/archive/2009/03/11/code-generation-with-t4-an-entities-to-dto-example.aspx

于 2010-03-10T03:29:19.953 回答
0

我也会推荐 T4 模板。您可以使用反射来输入元数据,实际模板看起来类似于 asp 标记。这是内置在 VS 中的。

于 2011-03-18T13:26:57.217 回答
0

嗯,在某种程度上,.NET 框架本身可以用匿名类做到这一点。

例如,使用 Linq to Objects(例如您的业务对象),您可以将结果集“投影”到匿名类(列表)中。

这样做的主要缺点是现在它们不是很便携,但是使用 .NET 4.0 和动态类,我敢说您不需要使用 3rd 方解决方案,我认为您将拥有框架本身的工具。

于 2010-03-10T03:39:28.467 回答