JCrazyUltimate
JCrazyUltimate
2017-06-09 09:28

为什么java实体类中一般不定义业务方法?这是否和面向对象的思想有所出入?

20
  • 面向对象
  • java
  • 代码框架
  • 关联关系
  • mvc

我们大多的编码习惯是这样的:
controller层定义业务流程;
service层定义针对实体的独立业务逻辑;
model层定义java实体;
dao层定义数据持久化操作。

一般,java实体类中会定义属性和属性对应的set、get方法。
但是却很少有把针对实体的自身的逻辑代码定义在这里。

例如:
班级和学生两个类定义如下,
Class:id、name、List
Student:id、name、ClassRef
这里班级保存了学生的对象引用集合,学生保存了班级的引用。
同时,我们一般会另外创建ClassService来定义getAllStudents(Class c); getStudentById()等方法。另外创建StudentService来定义getClassRef(Student s)

那么,如果按照面向对象的思想——对象包括属性、方法,getAllStudents()方法应该定义在Class实体类中,并且都不需要加Class c参数,getStudentById也是一样可以定义在这里。Student类中可以定义getClassRef()来立即找到学生所在的班级,同样也不需要参数了。这样就可以将Service层省略,还可以做一定的数据缓存。只有当缓存中没有数据时才通过Dao来获取数据,并且刷新缓存。

--------问题追加
完全可以做:
在实体类中定义方法,另外创建实体方法接口、类,并且由实体类保存实体方法的引用,当被调用具体的方法时,执行实体方法类中的实现。
这个实体方法接口、类并非service接口、类,因为service类一般都不会被实体类保存引用。

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

11条回答