数据映射器模式

直到现在,我一直在我所有的c#数据库驱动的应用程序中使用Active记录。 但是现在我的应用程序需要我的持久性代码与业务对象分离。 我已经阅读了很多关于Martin Fowler的数据映射模式的文章,但是我对这种模式的了解仍然非常有限。

我们来使用下面的例子:

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

然后,我将不得不创建一个CustomersMapper类来处理所有的客户持久性。 然后,我的客户和CustomersList类将与此映射器类进行协作,以便保留客户数据。

我有以下问题:

  • 如何在不破坏特定业务规则的情况下将原始数据传输到映射器并从我的客户类传送到映射器? DTO的?

  • 在Mapper类中使用SaveAll和LoadAll方法来更新和加载多个客户的数据是否可以接受? 如果是这样,在SaveAll的情况下,映射器将如何知道何时更新或插入数据?

  • 客户映射程序类是否也负责从CustomerParameters表中检索默认值,或者创建CustomerParameters映射程序会更好吗?

  • AO / R映射工具并不是真的在这里。 我使用的数据库是Transactional,并要求我编写自己的映射器模式。

    任何想法和意见将不胜感激。


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

    广告1)Mapper负责创建Customer对象。 您的Mapper对象将具有类似RetrieveById方法(例如)。 它会接受一个I​​D并以某种方式(不是他对Mapper对象的责任)构造有效的Customer对象。 其他方式也是如此。 当您使用有效的Customer对象调用Mapper.Update方法时,Mapper对象负责确保所有相关数据都被保存(在适当的地方 - 数据库,内存,文件等)

    广告2)正如我上面提到的检索/ persist是Mapper对象上的方法。 提供这样的功能是它的责任。 因此,LoadAll,SaveAll(可能传递一个值对象数组)是有效的Mapper方法。

    广告3)我会说是的。 但是您可以将Mapper对象的各个方面分为不同的类(如果您想/需要):默认值,规则验证等。

    我希望它有帮助。 我真的建议/推荐您阅读Martin Fowler的“企业应用程序架构模式”一书。


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


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

    http://ibatis.apache.org/

    链接地址: http://www.djcxy.com/p/56279.html

    上一篇: Data Mapper Pattern

    下一篇: PHP test for fatal error