到目前为止,我一直在我的所有c#数据库驱动的应用程序中使用活动记录。但是现在我的应用程序需要将持久化代码从业务对象中分离出来。我读了很多关于Martin Fowler的数据映射模式的文章,但我对这个模式的了解仍然非常有限。
让我们使用以下示例:
如果我有两个表- Customer和CustomerParameters。CustomerParameters表包含用于创建新客户的默认客户值。
然后,我必须创建一个CustomersMapper类来处理所有的客户持久性。然后,我的Customer和CustomersList类将与这个映射器类协作,以便持久化客户数据。
我有以下问题:
O/R映射器工具实际上并不在这里。我使用的数据库是事务性的,需要我编写自己的Mapper模式。
任何想法和意见都将非常感谢。
发布于 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。
发布于 2008-10-16 08:26:19
我建议您在尝试自己实现Data Mapper模式之前,先看看O/R-mapper工具。这会为你节省很多时间。O/R映射器的一个流行选择是NHibernate。
发布于 2009-03-09 20:25:57
您可以将iBATIS.NET作为NHibernate的替代方案。它也是一个O/R工具,但我发现它比NHibernate更容易使用。
https://stackoverflow.com/questions/207758
复制相似问题