业务与数据库的继承objects
Inheritance between business and database objects
我正在重构 java 中的代码库。因为有不同的业务包 objects 和数据库 objects.But 它们中的大多数属性都是相同的,在声纳报告这一点后我注意到了这一点。所以我想做一个共同的 parent class 然后所有的 BO(business object) 和 DO(objects) 都可以扩展它吗?我的疑问是,对于 BO 和 DO object 有一个共同的 parent class 是个好主意吗?如果是,那么我可以把这个普通的 parent class 放在哪里?在 BO 包中,DO 打包还是创建一个新的 Commons 包?
当前设计示例:
Package BO:
Class B01
{
int a
int b
//getter setter for a and b;
}
Class B02:
{
int a
int b
int c
//getter setter for a,b and c;
}
Package DO:
Class D01
{
int a
int b
int e
int lastUpdated
//getter setter
}
Class D02:
{
int a
int b
int g
int h
int lastUpdated
//getter setter
}
跟进的问题是,是否有可能两者都有一个共同的 grandparent,然后在 BO 和 DO 中有一个 parent,它扩展了共同的 parent,然后这些classes 扩展各自的 parents?
像这样使用继承虽然最初很有吸引力,但并不是一个好主意,因为它会导致代码非常不灵活。虽然在开发的早期阶段它看起来不错,因为它导致更少的代码,但业务需求总是会发生变化,并且业务对象可能开始与数据库实体不同。
如果您熟悉 SOLID 设计原则,S 代表单一职责,这意味着 class 应该有一个,而且只有一个,改变的理由。按照您的建议使用继承意味着父 class 可能有多种更改原因,即当数据库结构更改时 and/or 当业务域更改时。
业务对象应该为您的数据库实体提供不同的用途。在面向对象开发中,业务 class 封装了数据和行为。数据库实体通常只包含数据。应用程序倾向于在各种不同风格的 POJO 之间建立映射 - DTO <-> 业务对象 <-> DAO。这确保您的应用程序可以应对大多数项目在某个时间点必须处理的更改。
我正在重构 java 中的代码库。因为有不同的业务包 objects 和数据库 objects.But 它们中的大多数属性都是相同的,在声纳报告这一点后我注意到了这一点。所以我想做一个共同的 parent class 然后所有的 BO(business object) 和 DO(objects) 都可以扩展它吗?我的疑问是,对于 BO 和 DO object 有一个共同的 parent class 是个好主意吗?如果是,那么我可以把这个普通的 parent class 放在哪里?在 BO 包中,DO 打包还是创建一个新的 Commons 包?
当前设计示例:
Package BO:
Class B01
{
int a
int b
//getter setter for a and b;
}
Class B02:
{
int a
int b
int c
//getter setter for a,b and c;
}
Package DO:
Class D01
{
int a
int b
int e
int lastUpdated
//getter setter
}
Class D02:
{
int a
int b
int g
int h
int lastUpdated
//getter setter
}
跟进的问题是,是否有可能两者都有一个共同的 grandparent,然后在 BO 和 DO 中有一个 parent,它扩展了共同的 parent,然后这些classes 扩展各自的 parents?
像这样使用继承虽然最初很有吸引力,但并不是一个好主意,因为它会导致代码非常不灵活。虽然在开发的早期阶段它看起来不错,因为它导致更少的代码,但业务需求总是会发生变化,并且业务对象可能开始与数据库实体不同。
如果您熟悉 SOLID 设计原则,S 代表单一职责,这意味着 class 应该有一个,而且只有一个,改变的理由。按照您的建议使用继承意味着父 class 可能有多种更改原因,即当数据库结构更改时 and/or 当业务域更改时。
业务对象应该为您的数据库实体提供不同的用途。在面向对象开发中,业务 class 封装了数据和行为。数据库实体通常只包含数据。应用程序倾向于在各种不同风格的 POJO 之间建立映射 - DTO <-> 业务对象 <-> DAO。这确保您的应用程序可以应对大多数项目在某个时间点必须处理的更改。