代码到接口原则是否适用于实体类?

时间:2008-12-12 16:35:35

标签: java

我正在尝试按照项目的代码到界面。我应该首先创建一个接口,然后为实体类实现该接口吗?我认为这可能是接口第一种方法太过分,实体应该被忽略。这就是我的意思......

public interface Address {
  public String getStreet();
  public void setStreet(String street);
}

@Entity
public class AddressImpl implements Address {
  private String street;

  public String getStreet(){
    return this.street;
  }
  public void setStreet(String street){
    this.street = street;
  }
}

@Entity
public class OfficeImpl /* implements Office */ {
  private Address location;

  public Address getLocation(){
    return this.location;
  }
  public void setLocation(Address location){
    this.location = location;
  }
}

public class Driver {
  public static void main(String[] args) {
    Office work = new OfficeImpl();
    Address workAddress = new AddressImpl();
    workAddress.setStreet("Main St.");
    work.setLocation(workAddress);
  }
}

5 个答案:

答案 0 :(得分:4)

我认为创建实体接口可能不是必需的。

创建接口的目的(或至少是其中一个目的)是为了更容易地换出一个有利于另一个的具体实现。对于您的DAO,业务逻辑等来说,这显然是一件好事。

但除非你有实施改变实体的计划,否则我会避免它!

答案 1 :(得分:3)

在您的示例中,您可能会把它放得太远,但是一旦添加方法,编写测试用例并可能使用依赖注入,它就会更有意义。

对于像这样的简单项目来说,它太过分了,但是一旦你进入一个“真正的”应用程序,那通常是一个好主意。注意不要过度使用它,一切都不需要实现一个接口,只是它有意义。

答案 2 :(得分:3)

实体的界面应该是所有实体共有的行为和属性!

public interface IEntity
{
    int EntityId { get; set; }
    bool FindById(int id);
    bool Create(object [] values);
    bool Delete(int id);
    //etc.
}

抱歉C#示例,但语言并不重要。接口用于“插头兼容性”。

答案 3 :(得分:1)

我认为当你谈论实体时,它可能有点过分。

当您使用具有共同用法但不一定相同的实体时,接口非常有用。想不出一个解释它的好方法,但这是一个例子:

interface IFlaggable {
  bool IsFlagged ...
  string Reason ...
}

class ForumPost implements IFlaggable { }

class PrivateMessage implements IFlaggable { }

希望有所帮助!

答案 4 :(得分:0)

我通常不为数据持有bean创建接口,也就是说我没有为具有原始类型值的类和为它们设置getter / setter的接口。真的没有碰到我需要接口来处理我通常用于它的任何东西(多态和嘲笑,大多数情况下),所以我没有费心去做。

我想我应该指出,大多数情况下,当我使用databeans时,我也会使用自定义类来反映那些相同对象的值,这些类的工作原理如下:

Reflector r = new Reflector(new DataBean( [ values given through constructor ] ));
long someNumber = r.get("method", Long.class);
豫ICP备18024241号-1