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

为什么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条回答 默认 最新

  • 一点寒芒先至 2017-06-09 09:34
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入