gpt4 book ai didi

java - UML 类图中的接口(interface)、继承和泛型

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:00 27 4
gpt4 key购买 nike

我正在基于 DAO 模式对持久层进行建模,并且我对 Genrics 和接口(interface)继承的使用有一些疑问。

我首先要说的是,所有可持久实体的基本 CRUD 操作都是相同的,因此我决定使用泛型提供基本的 DAO 接口(interface)。然后还会有其他继承基本契约的接口(interface)以及一些与实体相关的其他特定方法,这些方法将由具体实现管理。

听起来可能很复杂,但实际上非常简单。在 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 Class Diagram and Generics关于如何在 UML 中对泛型建模以及 this example 。据说使用 buond 元素与子类型不同,我们不允许在合约中添加任何内容。据我了解,我必须创建中间类型才能最终获得我的 IModulesDao 接口(interface)。

这在概念上听起来是正确的,但我不确定是否适合我的情况,因为 IModulesDao 只是 IBasicDao 的扩展或子接口(interface),并且继承中间子类型是没有意义的。恕我直言,它只会给图表添加噪音,而没有任何好处。

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

Class diagram

您能否引导我了解如何建模此案例的正确方向?

最佳答案

您可以使用IModulesDao不添加新功能,因此只需绑定(bind)泛型即可。所以它的命名应该类似于你的 List<T>IBasicDao<T> 。然后使用这个绑定(bind)类,您可以创建一个实际添加新方法的特化,并且您可以调用该特化类 IModulesDao .

但老实说,没有人需要比教皇更加基督教化。 UML 为您提供了相当大的自由度,如果读者能够理解它那就没问题了。话虽如此,您也可以按照自己的方式生活得很好。

关于java - UML 类图中的接口(interface)、继承和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28587305/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com