Design patterns 数据访问层或具有CRUD方法的对象?
我曾经有一个数据访问层,它通过参数获取对象,并抽象处理所需的持久性类型。在我的新工作中,架构师正在考虑在所有模型对象中实现CRUD操作(load..save..delete..update)。这些方法将有一个objectby参数来处理对象的保存。例如:加载(IPersistence持久化)。我对可扩展性有一些怀疑,每个模型对象都必须实现所有的load、save、delete和update方法Design patterns 数据访问层或具有CRUD方法的对象?,design-patterns,persistence,data-access-layer,Design Patterns,Persistence,Data Access Layer,我曾经有一个数据访问层,它通过参数获取对象,并抽象处理所需的持久性类型。在我的新工作中,架构师正在考虑在所有模型对象中实现CRUD操作(load..save..delete..update)。这些方法将有一个objectby参数来处理对象的保存。例如:加载(IPersistence持久化)。我对可扩展性有一些怀疑,每个模型对象都必须实现所有的load、save、delete和update方法 什么是最好的方法?我想这是一个永恒的问题,两种方法都有各自的优点和缺点,很多追随者都对它们发誓 处理CR
什么是最好的方法?我想这是一个永恒的问题,两种方法都有各自的优点和缺点,很多追随者都对它们发誓 处理CRUD操作的
repository
方法(拥有一个存储库/网关,不管你怎么称呼它)使您的实际业务类更小、更精简,因为它们可能只包含数据和可能的验证/业务规则
在本例中,您将实现CRUD操作一次,但最有可能的是针对您正在处理的每种类型的对象实现一次
另一方面,智能业务对象
方法可能认为给定实体上的CRUD操作无论如何都是特定于该实体的,因此选择、更新、删除此类实体的代码总是特定的,因此它也可能驻留在该对象本身内
在本例中,您将为每个对象类实现一次CRUD操作——在本例中,我看不出与存储库方法相比有什么大的缺点
今天,我个人倾向于使用存储库方法,但我也看到了“智能业务对象”方法的好处——这两种方法都是有效的,我想您只需要说服新的架构师了解您的立场,或者使用不同的方法
Marc我认为,在这两种情况下,实现不应该重复,而应该只实现一次,并根据需要继承(例如)。
子类及其方法仅适用于非标准作业(如带有自定义参数的自定义查询)
现在这个问题相当于波乔的哲学辩论。让我试着用我自己的话来表达它;-):
没有模型的技术超类的另一个巨大优势是,模型可以作为自己的“数据传输对象”在系统之间传输信息:
我好不容易才发现这一点。:) 我要补充的是,CRUD的基本情况可以在一个通用存储库中实现一次(取决于语言),因此您只需要为以后的每个实体实现专门的方法。(这可能也适用于智能业务对象)。