2

假设我们希望代表一个人

public interface Person {

    String getFirstName();

    String getLastName();

}

这是用 JPA 实现的(我错过了代码,因为它非常平庸)

现在,我希望有一个模型,它的接口是带有 setter 方法的人员接口的扩展

public interface PersonModel extends Person {

    void setFirstName(String firstName);

    void setLastName(String lastName);

}

并且我实现了 Model 接口的具体实现(我将跳过它,因为它再次非常平庸)

在这样做时,我意识到从 Person 扩展的 PersonModel 并没有那么大的意义,因为“PersonModel 不是一个人”

将 PersonModel 转换为 Person 也是不“正确的”。

实现这一点的正确方法是什么 - PersonModel 不能从 Person 继承并重新定义方法,但这意味着额外的维护。

我可以将方法提取到另一个基本接口 -> PersonBase(?) 并从中扩展 Person (未定义其他方法)和 PersonModel 。

如果我沿着上述路径前进,命名基本接口的最佳方法是什么?

我使用接口的主要原因之一(除了它帮助我思考一切如何工作/组合在一起的事实)是这样可以很容易地有不同的实现层(JPA2/NoSQL 驱动程序等)

这不是真正使用的代码,所以请原谅任何语法错误/拼写错误 - 我只是为了这个问题而写的。

想法/指导/建议表示赞赏。

4

1 回答 1

0

向上转换似乎工作正常:

package person;

public class PersonApp {
    public static void main(String [] args)
    {
        ConcretePerson p = new ConcretePerson("Superman");
        System.out.println(p.getName());
        PersonModel pm= p;
        System.out.println(pm.getName());
        Person pn=p;
        System.out.println(pn.getName());
        Person pnm=pm;
        System.out.println(pnm.getName());
    }
}

程序输出:

Superman
Superman
Superman
Superman
于 2012-11-20T03:46:26.837 回答