gpt4 book ai didi

datamapper - 数据映射器模式

转载 作者:行者123 更新时间:2023-12-03 12:58:19 25 4
gpt4 key购买 nike

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

让我们使用以下示例:

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

然后,我将必须创建一个CustomerMapper类来处理所有Customer持久性。然后,“我的客户”和“客户列表”类将与此映射器类进行协作,以保留客户数据。

我有以下问题:


我如何在不违反某些业务规则的情况下将原始数据与客户类之间的来回传递? DTO的?
在我的Mapper类中具有SaveAll和LoadAll方法以更新和加载多个客户的数据是否可以接受?如果是这样,那么对于SaveAll,映射器将如何知道何时更新或插入数据?
Customer映射器类也将负责从CustomerParameters表中检索默认值,还是创建一个CustomerParameters映射器会更好?


一个O / R映射器工具并不是真的。我正在使用的数据库是事务型数据库,并且需要编写自己的Mapper模式。

任何想法和评论将不胜感激。

最佳答案

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

广告1)映射器负责创建客户对象。您的Mapper对象将具有类似RetrieveById方法的内容(例如)。它将接受一个I​​D,并以某种方式(不是Mapper对象的职责)构造有效的Customer对象。反之亦然。当您使用有效的Customer对象调用Mapper.Update方法时,Mapper对象负责确保所有相关数据均得以保留(在适当的情况下-db,内存,文件等)。

广告2)如上所述,检索/持久化是Mapper对象上的方法。提供此类功能是其责任。因此,LoadAll,SaveAll(可能传递值对象数组)是有效的Mapper方法。

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

希望对您有所帮助。我真的建议/建议您阅读马丁·福勒(Martin Fowler)的书Patterns of Enterprise Application Architecture

关于datamapper - 数据映射器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/207758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com