我基于DAO模式对持久层进行建模,我对使用Genrics和接口继承有一些疑问。
我开始说所有可持久实体的基本CRUD操作都是相同的,所以我决定使用Generics提供基本的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 Class Diagram and Generics关于如何在UML中对Generics进行建模以及this example的内容。据说使用buond元素与子类型不同,我们不允许在合同中添加任何内容。所以据我所知,我必须创建中间类型才能最终得到我的IModulesDao
接口。
这听起来在概念上是正确的,但我不确定是否符合我的情况,因为IModulesDao
只是IBasicDao
的扩展或子接口,并且没有任何意义来设置中间子类型继承自。恕我直言,它会在图表中添加噪音,但没有任何好处。
这就是我现在所拥有的,但不要认为完全正确:
请您指导我如何为此案例建模?
答案 0 :(得分:1)
您可以在不添加新功能的情况下使用IModulesDao
,因此只需绑定通用。因此,它的名称应与List<T>
IBasicDao<T>
类似。然后使用这个绑定类,你可以创建一个实际添加新方法的专门化,你可以调用那个专门的类IModulesDao
。
但老实说,没有人比教皇更需要基督徒了。 UML让你有一些自由,如果它对读者可以理解那么它很好。说过你也可以按照自己的方式生活得很好。