首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数据映射器模式

数据映射器模式
EN

Stack Overflow用户
提问于 2008-10-16 08:16:28
回答 3查看 16.4K关注 0票数 19

到目前为止,我一直在我的所有c#数据库驱动的应用程序中使用活动记录。但是现在我的应用程序需要将持久化代码从业务对象中分离出来。我读了很多关于Martin Fowler的数据映射模式的文章,但我对这个模式的了解仍然非常有限。

让我们使用以下示例:

如果我有两个表- Customer和CustomerParameters。CustomerParameters表包含用于创建新客户的默认客户值。

然后,我必须创建一个CustomersMapper类来处理所有的客户持久性。然后,我的Customer和CustomersList类将与这个映射器类协作,以便持久化客户数据。

我有以下问题:

  1. 如何在不违反某些业务规则的情况下将原始数据传输到客户类或从客户类传输到映射器?在我的
  2. 类中使用SaveAll和LoadAll方法来更新和加载多个客户的数据是可以接受的吗?如果是这样,在SaveAll的情况下,映射器如何知道何时更新或插入数据?
  3. 客户映射器类是也负责从CustomerParameters表中检索默认值,还是创建一个CustomerParameters映射器更好?

O/R映射器工具实际上并不在这里。我使用的数据库是事务性的,需要我编写自己的Mapper模式。

任何想法和意见都将非常感谢。

EN

回答 3

Stack Overflow用户

发布于 2009-03-09 18:44:54

肖恩,我会这样回答你的问题:

ad 1) Mapper负责创建Customer对象。您的映射器对象将具有类似于RetrieveById方法的内容(例如)。它将接受一个ID并以某种方式(这不是Mapper对象的职责)构造有效的Customer对象。在另一种情况下也是如此。当您使用有效的Customer对象调用Mapper.Update方法时,映射器对象负责确保所有相关数据都被持久化(在适当的地方-数据库、内存、文件等)。

AD2)如上所述,retrieve/persist是Mapper对象上的方法。提供这样的功能是它的责任。因此,LoadAll、SaveAll (可能传递一个值对象数组)是有效的映射器方法。

广告3)我会说是的。但是您可以将Mapper对象的各个方面分离到单独的类中(如果您愿意/需要):默认值、规则验证等。

我希望它能帮上忙。我真心推荐你读一读Martin Fowler的书Patterns of Enterprise Application Architecture

票数 12
EN

Stack Overflow用户

发布于 2008-10-16 08:26:19

我建议您在尝试自己实现Data Mapper模式之前,先看看O/R-mapper工具。这会为你节省很多时间。O/R映射器的一个流行选择是NHibernate

票数 0
EN

Stack Overflow用户

发布于 2009-03-09 20:25:57

您可以将iBATIS.NET作为NHibernate的替代方案。它也是一个O/R工具,但我发现它比NHibernate更容易使用。

http://ibatis.apache.org/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/207758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档