检查同学们的制作的UML图时,同学们提出了很多的疑问, 其中问题最多的是时序图部分。
开始大家都是采用工厂创建接口,业务逻辑层调用接口层,接口再调用实现类的顺序来画图。
后来想了想,接口层与接口的实现层没有调用关系。在时序图中不应该体现接口对实现的调用。既然没有调用关系,那么画图时,业务逻辑层是调用到接口呢,还是去调用接口的实现呢。
这个问题我也不清楚,于是开始参考VS2010生成的时序图,但是每个人生成的图也不相同。有的图是调用接口,接口以后的时序图是没有的。有的图则是调用的接口的实现。
自己写了一个小Demo,模拟各层之间的调用,发现生成图不同的原因,在于上一层对下一层的引用位置。
举个例子来说,我们现在有如下几个类,Form1 窗体类,Bll类,IDal(接口)类,Dal(接口实现)类,SqlHelper类
这些类分别模拟了各层之间的调用关系,调用关系为Form1—>Bll.Add()—>Idal<—Dal—>SqlHelper
Bll类中有一个Add()方法,为方便描述,其余几个类分别有一个Add()方法。
如果Bll类这样调用IDal接口
| public class Bll //引用在类体中 |
生成的图如下:

这时候Bll类与IDal(接口)类是关联关系,生成的时序图到IDal类就结束了。
如果Bll类这样调用IDal接口
| public class Bll //引用在方法中 |
生成的图如下:

这时候Bll类与IDal(接口)类是依赖关系,Bll 类会调到接口的实现类Dal 上
总结:不同的设计带来不同的系统实现。在画图时,如果有接口和接口的实现,推荐在时序图中用接口的实现来描述方法的调用。这样实现类后面一系列方法的调用,均可以通过时序图反应出来。
个人见解,欢迎留言斧正。
本文详细探讨了在UML时序图中如何正确地体现接口及其实现,通过对比不同设计带来的系统实现差异,指导开发者在画图时选择合适的表达方式,以清晰展示接口与其实现层之间的关系。
280

被折叠的 条评论
为什么被折叠?



