【发布时间】:2016-08-06 18:17:40
【问题描述】:
之前问过以下问题后:rest api and polymorphism
我想知道我的整个数据库架构和类结构可能是错误的。 目前的结构是:
- PERSON BASE ABSTRACT CLASS 包含姓名和年龄
- CHILD EXTENDS PERSON 包含最喜欢的电视节目
- PARENT EXTENDS PERSON 包含孩子列表
- GRANDPARENT EXTENDS PERSON 包含父母列表
在 db 中,每个子类型的表组织在表中
我想也许重构类,因为子类型没有添加任何有价值的字段,除了子/父母的列表,只有一个类包含所有 字段:
@Entity
class Person{
@ManyToOne
private Person parent; //parent==null is a grandparent
@OneToMany
private List<Person> children;
}
但是,这样做的问题是,在我的业务逻辑中,父子和祖父确实有不同的行为,这样很难区分 此外,孩子的父母不能是祖父母。
另一个问题是,假设我保留当前的类结构
分离类并没有真正帮助我,因为我使用的是服务层
而且我无法确定我需要哪个服务类,例如:
class PeopleController extends Controller {
public Result savePerson() {
Person p = objectMapper.readValue.. // deseralizes to correct subtype
// saving logic is different for each subtype, hence I need to
// find correct repository for this subtype but I don't want to use
// instance of or switch case, but to use polymorphism, but can't think
一种不实现我不想要的活动记录的方式 } }
【问题讨论】:
-
祖父母不是……只是父母的父母吗?那么,为什么你认为你需要特别对待他们呢?以及如何对待祖父母的父母?含义:对你的抽象非常精确;不要依赖从不同角度容易看到的属性。而且,你确定一个人只有一个父母吗?有趣的想法,当您考虑时。也许,在我们这个时代,假设有父亲-父母-人和母亲-父母-人已经不合适了。但最有可能的是:大多数人的生活中恰好有两个父母。
-
换句话说,来自“领域驱动设计”方面:你真的应该花更多的时间思考你的领域;以及您想要使用的模型。
-
@GhostCat ,在我的项目域中,他们应该有一个父母,这很好.. “祖父母不......只是父母的父母吗?那么,你为什么认为你需要特别对待他们?” - 因为在我的业务逻辑中,他们在很多方法上都有不同的行为,而且孩子的父母不能是祖父母。
标签: java database hibernate oop polymorphism