扩展数据库实体 类 是好习惯吗?
Is it good practice extending database entity classes?
我的 symfony 项目中有一个用户实体 class。用户 class 包含身份验证所需的基本信息 - 用户名、密码、电子邮件等。但是我打算添加其他数据。比如体重、身高、最喜欢的食物等
在用户 class 中定义所有用户简介和数据是一个好习惯吗?或者应该使用另一个实体 class 扩展用户 class,例如会员,然后会员应该实施高级会员或管理员 class?
如果是这样,实体 classes 是否也应该包含具有业务逻辑的方法?
提前致谢
您正在描述各种类型的 polymorphism。如果您计划拥有多个共享多个属性的相似实体,那么这是一个非常聪明的方法。
另外,当使用 Doctrine 时("standard" 与 Symfony 应用程序一样)你肯定不想在你的实体中包含任何业务逻辑,除非绝对没有其他解决方案存在(不太可能)。这是设计使然,使用带有 Doctrine 的 DataMapper 模式与带有 ORM 的 ActiveRecord 模式形成对比,例如 Eloquent (Laravel) 和 Ruby on Rails.
这篇文章很好地概述了 ActiveRecord 和 DataMapper 之间的区别;特别是在 Rails 上引用 Doctrine 和 Ruby 作为对比方法:https://pressupinc.com/blog/2014/11/orm-patterns-active-record-data-mapper/
我的 symfony 项目中有一个用户实体 class。用户 class 包含身份验证所需的基本信息 - 用户名、密码、电子邮件等。但是我打算添加其他数据。比如体重、身高、最喜欢的食物等
在用户 class 中定义所有用户简介和数据是一个好习惯吗?或者应该使用另一个实体 class 扩展用户 class,例如会员,然后会员应该实施高级会员或管理员 class?
如果是这样,实体 classes 是否也应该包含具有业务逻辑的方法?
提前致谢
您正在描述各种类型的 polymorphism。如果您计划拥有多个共享多个属性的相似实体,那么这是一个非常聪明的方法。
另外,当使用 Doctrine 时("standard" 与 Symfony 应用程序一样)你肯定不想在你的实体中包含任何业务逻辑,除非绝对没有其他解决方案存在(不太可能)。这是设计使然,使用带有 Doctrine 的 DataMapper 模式与带有 ORM 的 ActiveRecord 模式形成对比,例如 Eloquent (Laravel) 和 Ruby on Rails.
这篇文章很好地概述了 ActiveRecord 和 DataMapper 之间的区别;特别是在 Rails 上引用 Doctrine 和 Ruby 作为对比方法:https://pressupinc.com/blog/2014/11/orm-patterns-active-record-data-mapper/