【问题标题】:Empty interfaces - Modeling of object relationships空接口 - 对象关系建模
【发布时间】:2014-06-11 19:07:49
【问题描述】:

对象建模可以使用空接口吗?

例如以下接口扩展了其他空接口以表征对象“Ferry”:

public interface Ferry extends Watercraft, StationBased, Scheduled, Oneway, Motorized {}

Watercraft、StationBased 等也是空接口,因此它们起到了标记的作用。但是,JVM 或编译器不使用它们。这些类仅用于建模目的。 这是好习惯吗?接口通常不应该提供某种通用功能,而不仅仅是标记一个类吗?

【问题讨论】:

    标签: java oop interface


    【解决方案1】:

    是的,您可以使用空接口进行对象建模,但是...没有任何用例的对象建模是 IMO 过度使用它。

    您编写代码以执行具体操作,您对其建模以利用领域中的一般抽象,是的,您可以过度抽象您的代码。

    在代码中添加接口是一种分类或类型化,只有在有接受者的情况下才有必要。否则就是普通的死代码。

    在我的噩梦中有时仍然困扰着我的最糟糕的遭遇是对业务服务的抽象,它本质上用一个将地图作为参数并返回包含结果或错误状态的对象的单一方法取代了它。有效地建模方法调用,但这次没有类型。在所有业务方法上强制执行此操作简直就是一场噩梦。

    【讨论】:

      【解决方案2】:

      这样做并没有错,只是您很快就会发现更改结构或添加新表单会变得不愉快。

      我可能会考虑更灵活的enum 选项。

      enum CraftAttributes {
      
          Watercraft,
          StationBased,
          Scheduled,
          Oneway,
          Motorized;
      }
      
      class Ferry {
      
          Set<CraftAttributes> attributes = EnumSet.of(
                  CraftAttributes.Watercraft
          //...
      
          );
      
      }
      

      您可以使用Sets 的联合和交集来做很多甜蜜的事情,从而生成强大但清晰的代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-25
        • 2013-08-28
        • 2016-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多