空接口 - 对象关系的建模

时间:2014-06-11 10:19:00

标签: java oop interface

使用空接口进行对象建模是否可以?

E.g。以下接口扩展了其他空接口,以便对象'Ferry'进行表征:

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

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

2 个答案:

答案 0 :(得分:2)

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

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

在代码中添加接口是一种分类或代表,只要有接收者,它就是必需的。否则它就是普通的死代码。

我最糟糕的遭遇有时仍然困扰着我的噩梦是对业务服务的抽象,它基本上用一个方法取代它,将一个映射作为参数并返回一个包含结果或错误状态的对象。有效地建模方法调用,但这次没有类型。在所有商业方法上强制执行此操作只是后来解决的噩梦。

答案 1 :(得分:0)

这样做是没有错的,除非您很快发现改变结构或添加新表格会变得令人不快。

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

enum CraftAttributes {

    Watercraft,
    StationBased,
    Scheduled,
    Oneway,
    Motorized;
}

class Ferry {

    Set<CraftAttributes> attributes = EnumSet.of(
            CraftAttributes.Watercraft
    //...

    );

}

你可以用Set的联盟和交叉点来做很多甜蜜的事情,这些事情可以创造出强大但清晰的代码。

相关问题