接口方面,继承和Genrics在UML类图(Interfaces, inheritance and

2019-10-21 23:26发布

我模拟基于DAO模式的持久层,我有相关的使用Genrics和接口继承的一些疑问。

我开始说,基本的CRUD操作是所有的持久化实体一样的,所以我决定要提供使用泛型一个基本的DAO接口。 然后会有继承的基本合同其他接口以及与将通过具体实施管理的实体其他一些具体方法。

这可能听起来复杂,但实际上很简单。 在Java中它会是这样的:

public interface BasicDao<T> {

    public T insert(T dataObject);

    public T update(T dataObject);

    public Boolean delete(T dataObject);

    public T getUnique(BigInteger dataObjectId);

    public List<T> getAll();
}

public interface IModulesDao extends IBasicDao<IModule> {

    public IModule getModuleByCode(String code);
}

正如你所看到IModulesDao将单个方法的基本合同,但具体的实现还是要满足整个合同,这是做这一切的想法。

现在,我读过UML类图和泛型如何在泛型UML模型也是这个例子 。 据称,使用buond元素不大于子类型相同,我们不允许任何补充合同。 所以,据我了解,我必须创建中间类型,终于让我IModulesDao接口。

这听起来概念上的权利,但我不知道如果因为我的情况下,配合IModulesDao只是一个扩展或子接口IBasicDao和没有意义的有一个中间亚型要继承。 恕我直言,它只是噪音添加到图表的任何好处。

这就是我现在所拥有的,但不认为是完全正确的:

能否请你引导我如何这种情况下,模型的正确方向?

Answer 1:

你可以使用IModulesDao无需添加新的功能,所以只是结合全国通用的。 因此,它应该被命名为类似于您List<T>作为IBasicDao<T> 然后使用这个边界类,你可以创建一个专业化,实际上增加了新的方法,你可以调用专业类IModulesDao

但说实话没有人需要比教皇更基督徒。 UML可以让你相当长的一段自由,如果它的理解读者那么它的罚款。 说了这么多,你也可以与你所采取的方式很好地生活。



文章来源: Interfaces, inheritance and Genrics in UML Class Diagram