Java 实体类的正确设计。需要建议吗

Java 实体类的正确设计。需要建议吗,java,model-view-controller,interface,abstract,Java,Model View Controller,Interface,Abstract,例如,我有实体类User: public class User { private long id; private String name; // setters and getters } 接下来,我添加新的实体类:Comment public class Comment { private long id; private String comment; // setters and getters } 接下来,我可以添加越来越多的实体类 此时此刻,我想:我可以/必须在

例如,我有实体类
User

public class User
{
  private long id;
  private String name;

  // setters and getters
}
接下来,我添加新的实体类:
Comment

public class Comment
{
private long id;
private String comment;

// setters and getters
}
接下来,我可以添加越来越多的实体类

此时此刻,我想:我可以/必须在逻辑结构中绑定/连接我的实体类,还是不

我是什么意思?我试着解释:

第1点:所有这些类:
User
Comment
和更多其他-
POJO

想法1:需要通过接口或抽象类对此类进行逻辑绑定

第2点:我明白了,所有实体类都有相同的方法:
getId
setId()

想法2:需要避免在所有类中声明此方法

我的解决方案:

添加接口
BaseEntity

public interface BaseEntity
{
public long getId();
public void setId(long id);
}
添加所有实体类必须实现此接口

结果,我们逻辑连接所有实体类。我们保证每个实体类实现
getId()
setId()
方法

但是这个解决方案并不能解决多声明
getId
setId
的问题

解决方案是创建通用BaseEntity类:

    public class BaseEntity
    {
      private long id;
      public long getId() {return this.id};
      public void setId(long id) {this.id = id;};
    }
所有实体类都必须扩展BaseEntity类

嗯,听起来不错:)

但是,通过当前的实现,用户可以创建Instance BaseEntityClass这有意义吗?我可以提供创建类BaseEntity的可能性?

或者,好的解决方案可以将这个类标记为
抽象
?
你觉得怎么样

如果您同意我之前的所有步骤:

我还有最后一个问题:

类之间的通信必须基于接口。但是我没有实体的接口。这会给我的未来带来麻烦吗


谢谢。

是的,将您的基本实体设置为抽象类,并让其他实体对其进行扩展

public abstract class BaseEntity
    {
       private long id;
       public long getId() {return this.id};
       public void setId(long id) {this.id = id;};
    }

一般来说,编程应该始终针对接口,而不是实现

可以使用抽象的BaseEntity类,用@MappedSuperclass映射。但是您仍然必须重写ID字段到每个子类中相应列的映射

仅仅因为两个类具有相同的属性并不一定意味着它们应该扩展一个公共类。您的代码可能永远不会引用任何BaseEntity类型的对象。除非您有其他常用方法,否则我建议在这种情况下不要使用超类。这只会更简单


实体是POJO。根据我的经验,为每个实体使用一个接口只会增加不必要的复杂性。

将BaseEntity抽象化非常好,我自己就是这样使用的。我不认为还有什么可以抽象的。如果有多个表都有一些公共列,例如用于审计目的,则可以进行抽象。 实体和接口?我认为那没什么用。当您必须切换不同的实现(现在在实体中)时,接口更有用,这没有多大意义