Java 空接口-对象关系的建模

Java 空接口-对象关系的建模,java,oop,interface,Java,Oop,Interface,使用空接口进行对象建模可以吗 例如,以下接口扩展了其他空接口,以便描述对象“Ferry”: public interface Ferry extends Watercraft, StationBased, Scheduled, Oneway, Motorized {} 船艇,基于站点的,等等,也都是空接口,所以它们有点像一个标记。但是,JVM或编译器不使用它们。这些类仅用于建模目的。 这是好的做法吗?一个接口是否应该通常不提供某种公共功能,而不仅仅是标记一个类?是的,您可以使用空接口进行对象建

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

例如,以下接口扩展了其他空接口,以便描述对象“Ferry”:

public interface Ferry extends Watercraft, StationBased, Scheduled, Oneway, Motorized {}
船艇,基于站点的,等等,也都是空接口,所以它们有点像一个标记。但是,JVM或编译器不使用它们。这些类仅用于建模目的。
这是好的做法吗?一个接口是否应该通常不提供某种公共功能,而不仅仅是标记一个类?

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

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

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


在我的噩梦中,我最糟糕的遭遇有时仍然萦绕在我心头,那就是对业务服务的抽象,它基本上用一个方法取代了它,该方法将一个映射作为参数,并返回一个包含结果或错误状态的对象。有效地建模方法调用,但这次没有类型。在所有的业务方法上强制这样做只不过是一场噩梦,以后要解开。

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

我可能会考虑更灵活的<代码> EnUM<代码>选项。

enum CraftAttributes {

    Watercraft,
    StationBased,
    Scheduled,
    Oneway,
    Motorized;
}

class Ferry {

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

    );

}
enum属性{
船艇,
基于站点,
预定的,
单向的,
机动化;
}
班轮{
Set attributes=EnumSet.of(
船艇
//...
);
}
你可以用
Set
s的并集和交集做很多美妙的事情,它们可以生成强大但清晰的代码