模型对象应该有接口吗?

2022-09-03 06:18:35

我正在我的系统中创建域模型。在设计模型对象时,是否应为每个实体对象创建接口?人们告诉我,我们的Web层不应该关心实体的实现,我们应该能够交换实现,但我不确定这是否会发生。

例如,如果我们有一个维护学生列表的教师班级,则 getStudents 方法可以是:

public List<Student> getStudents() {
      return this.students;
}

或者这个:

public List<Student> getStudents() { 
     return someExternalService.retrieveStudents();
}

我理解这种好处,但一般的做法是什么?


答案 1

除非你有充分的理由认为你需要更换模型,否则我不会担心它。基于YAGNI原则(你不会需要它))


答案 2

我见过或参与过的所有项目都没有域实体的接口。

但是在我的一个项目中,我有界面:NamedEntity

public interface NamedEntity {
   int getId ();
   String getName ();
}

所有域实体都实现了此接口。它使我有可能不为不同的实体创建不同的jsf转换器,而是创建一个使用此接口而不是具体领域类的转换器。