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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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
Oop 活动记录:为什么它会添加“活动记录”之类的内容;保存;?_Oop_Design Patterns_Activerecord_Datamapper_Solid Principles - Fatal编程技术网

Oop 活动记录:为什么它会添加“活动记录”之类的内容;保存;?

Oop 活动记录:为什么它会添加“活动记录”之类的内容;保存;?,oop,design-patterns,activerecord,datamapper,solid-principles,Oop,Design Patterns,Activerecord,Datamapper,Solid Principles,例如,为什么产品对象有一个名为Save的方法 在我看来,将自己保存在数据库中的产品是错误的。 一个产品不应该只知道自己的责任? 我是否不理解AR的目的,或者问题不在我的解释中 $product = new Product(); $product->name = 'sample post'; $product->price = 10; $product->save(); 活动记录的一般原则是,对象的实例是数据存储中的一行,并且该对象完全负责自身的持久性 对象只有一个职责,即管理

例如,为什么产品对象有一个名为Save的方法

在我看来,将自己保存在数据库中的产品是错误的。 一个产品不应该只知道自己的责任? 我是否不理解AR的目的,或者问题不在我的解释中

$product = new Product();
$product->name = 'sample post';
$product->price = 10;
$product->save();

活动记录的一般原则是,对象的实例是数据存储中的一行,并且该对象完全负责自身的持久性

对象只有一个职责,即管理自身的持久性

:

在数据库表或视图中封装行、封装数据库访问并在该数据上添加域逻辑的对象

对象同时携带数据和行为。这些数据大部分是持久性的,需要存储在数据库中。Active Record使用最明显的方法,将数据访问逻辑放在域对象中。这样,所有人都知道如何在数据库中读写数据


它被称为“活动记录”。
save()
不是记录的合理方法/行为吗?主动记录主要用于被动数据,其中唯一的行为是加载和保存。不管怎样,你的空想不会改变微软图书馆的设计。使用它或选择替代品。产品是记录吗?域中是一个实体。数据库中只有一条记录。我没有试图更改活动记录。我只是明白,他不应该进入应用领域(领域),在我看来,这应该在另一个上下文中使用。。。这是我的感觉,你的担心是恰当的。为了分离关注点,可以使用datamapper模式()。我可能更喜欢自己使用持久层(Hibernate,NHibernate)。但我用高级UI解析和优化的加载方案编写复杂的应用程序。。在某种程度上,域和存储之间可能存在重叠。“我只是继续做下去了。”@MayW.:这是对“一个责任”不必要的字面定义。按照这种逻辑,任何类都不应该有多个方法,因为两个方法意味着它可以做两件事,所以它有两个职责。显然,这样做是noone对优秀工程的定义。我也不明白知道需要保存什么是做得太多了。根据定义,任何最终将内容保存到数据库的代码都需要了解保存的内容。回答了我的问题:“在数据库表或视图中封装行、封装数据库访问并在该数据上添加域逻辑的对象…”以及“Active Record使用最明显的方法,将数据访问逻辑放在域对象中。通过这种方式,所有人都知道如何在数据库中读写数据。“我不喜欢知道太多的对象。我会将其全部分离:“一个对象,它在数据库表或视图中包装一行,封装数据库访问,并在该数据上添加域逻辑。“,但我会是数据映射者,对吗?@Maykonn我想你说的是POCO,它只保存关于它们自己的数据,并且可以选择链接到它们相关/连接的数据。数据映射器是从POCO映射到数据库的对象。是的!波科的理由是我似乎是对的。当然,AR更为明显。当您的框架提供时,它为您节省了时间。那么活动记录不应该有域逻辑吗?但是,如果我们遵循SRP,我们将需要两个对象,例如ProductAR和ProductBusiness?在活动记录中,您有一个对象负责一件事——它本身,而这只是对象的责任。它包含域逻辑并可以在数据库上启动操作,这并不意味着它违反了SRP——它的唯一责任是自己。