JCrazyUltimate 2017-06-09 09:28 采纳率: 0%
浏览 3555
已结题

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

我们大多的编码习惯是这样的:
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条回答 默认 最新

  • rbacPermission 2017-06-09 09:34
    关注

    对于低耦合,粗浅的理解是:一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。

    评论

报告相同问题?