代码之家  ›  专栏  ›  技术社区  ›  Bill K

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

  •  2
  • Bill K  · 技术社区  · 17 年前

    我正试图按照代码在项目上进行交互。我应该先创建一个接口,然后为实体类实现该接口吗?我在想,这可能是采取接口优先的方法太远了,实体应该被忽略。这就是我的意思…

    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 回复  |  直到 17 年前
        1
  •  4
  •   user7094    17 年前

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

    创建接口(或者至少是其中一个目的)的目的是为了更容易地将一个具体实现换成另一个具体实现。这对于DAO、业务逻辑等显然是一件好事。

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

        2
  •  3
  •   Rob Prouse    17 年前

    在您的示例中,您可能做得太过火了,但是一旦您添加方法、编写测试用例并可能使用依赖注入,它将更有意义。

    对于像这样的简单项目来说,这是一种过度杀伤力,但是一旦你进入一个“真正的”应用程序,那么这通常是一个好主意。只是要小心不要做得太多,每件事都不需要实现一个接口,只是在它有意义的地方。

        3
  •  3
  •   Steven A. Lowe    17 年前

    实体的接口应该是所有实体通用的行为和属性!

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

    抱歉,C示例,但语言无关紧要。接口用于“插件兼容性”。

        4
  •  1
  •   Zachary Yates    17 年前

    我想当你谈论实体的时候,可能是杀伤力太大了。

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

    interface IFlaggable {
      bool IsFlagged ...
      string Reason ...
    }
    
    class ForumPost implements IFlaggable { }
    
    class PrivateMessage implements IFlaggable { }
    

    希望有帮助!

        5
  •  0
  •   Esko    17 年前

    我通常不为保存bean的数据创建接口,也就是说,我不为具有基元类型值的类和它们的getter/setter创建接口。我从来没有真正遇到过这样的情况:我需要界面来处理我通常使用它们来做的任何事情(多形性和模拟,大多数情况下),所以我没费心去做。

    我想我应该指出的是,大多数时候,当我使用DataBeans时,我也会使用自定义类来反映来自相同对象的值,这些自定义类的工作方式如下:

    Reflector r = new Reflector(new DataBean( [ values given through constructor ] ));
    long someNumber = r.get("method", Long.class);