Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 将数据访问类拆分为读写器还是合并?_Architecture_Oop_Data Access - Fatal编程技术网

Architecture 将数据访问类拆分为读写器还是合并?

Architecture 将数据访问类拆分为读写器还是合并?,architecture,oop,data-access,Architecture,Oop,Data Access,这可能是在“讨论”方面,但我真的很想听听你对此的看法 以前,我经常编写处理读写的数据访问类,这通常会导致糟糕的命名,如FoooHandler等。难以命名的类可能设计糟糕的经验法则表明,这不是一个好的解决方案 因此,我最近开始将数据访问分为FooWriter和FooReader,这会产生更好的名称并提供一些额外的灵活性,但与此同时,如果类不太大,我有点喜欢将它们放在一起 读者/作者分离是更好的设计,还是我应该将它们结合起来?如果我把它们结合起来,我该怎么命名这个类呢 谢谢/ErikORM可能是您最

这可能是在“讨论”方面,但我真的很想听听你对此的看法

以前,我经常编写处理读写的数据访问类,这通常会导致糟糕的命名,如FoooHandler等。难以命名的类可能设计糟糕的经验法则表明,这不是一个好的解决方案

因此,我最近开始将数据访问分为FooWriter和FooReader,这会产生更好的名称并提供一些额外的灵活性,但与此同时,如果类不太大,我有点喜欢将它们放在一起

读者/作者分离是更好的设计,还是我应该将它们结合起来?如果我把它们结合起来,我该怎么命名这个类呢


谢谢/Erik

ORM可能是您最好的解决方案。
或者使用存储库类型模式,使用负责状态持久性的“thingContext”对象


就我个人而言,我使用activeRecord模式,其中保存逻辑被烘焙到基类中,但我将其留给nHibernate风格的存储库模式。在框架类型的情况下,在没有db的情况下允许DDD和测试是非常好的,在这种情况下,我的业务逻辑正在为新的UI赢得吸引力。

我现在使用Linq to Sql。这完全解决了问题

但是,如果您没有这个选项(或类似的ORM工具),我看不出有任何理由分开读/写方法。它只是添加了更多的类,并使数据访问变得复杂。我一直按照以下方式设计:

  • 组件/业务对象:Car
  • 数据访问,包含静态读写方法:CarDB
  • 用法示例:

    Car car = new Car();
    car.Manufacturer = "Toyota"
    car.Model = "Camry"
    car.Year = 2006;
    car.CarID = CarDB.InsertCar(car)
    car.OwnerID = 2;
    CarDB.UpdateCar(car);
    

    对于需要在同一事务中执行读写操作的数据访问来说,这也是有意义的。如果你把这些类分开,那会去哪里?

    忽略ORM(不是因为我支持或反对它),我会把它们放在同一个类中。它们都是单一责任的两个方面,将它们分开只会让你看到两个地方,我真的想不出一个好的理由让你这么做

    如果有选择的话,我通常会对读者进行子类化,以创建作者

    对后端存储进行读写的东西可以称为数据访问器、读写器、IO或存储

    那么,以下其中一项如何:

    • FooDataAccessor
    • 食物存取器
    • 食品阅读器
    • FooRW
    • 富奥
    • 食品店
    • 食品储藏

    感谢您提供一些有用的其他名称。“数据访问类”不是“数据库”的同义词:)