我对Doctrine很新。使用Symfony2框架我创建了各种具有基本getter和setter方法的实体。到目前为止,如果我想要一些额外的功能,我会在实体中创建一个新方法来做到这一点。 (例如,如果我想存储用户的密码,我会创建一个方法来获取用户的密码并直接存储密码的哈希值。)
我现在听说有“存储库”这样的东西应该包含“更复杂”的方法而不是将它们存储在实体本身中。如果您可以简单地将所有代码保存在实际实体中的一个位置,那么这也是真/假,拥有存储库的实际好处是什么?
答案 0 :(得分:8)
实体是一个表示(通常)数据库中一行的对象,你应该放置那些只与实体的内部状态一起运行的方法(无论它们有多复杂) - 它们要么根据其属性返回一些数据,要么修改它属性,或两者兼而有之。
Repository是一个对象,用于从存储中获取和保存实体 - 它表示db表。您应该放置必须与存储交互的方法,例如save($entity)
,findActiveUsersOrderedByRegistrationDate()
等。