分层架构中各层之间关系如何界定,期待大家来讨论

 

 

     下午开会讨论了关于系统架构设计问题,也引申出关于架构图中包间关系的思考。

 

 

     其实,主要分歧点是在UML关系中的关联关系和依赖关系,有种观点,认为在架构图(包图关系)中,有一种包间关系叫做关联。

 

 

    我们大家都知道,在UML中存在5中关系,而从RationalRose2007中支持的UML标准来看,包与包之间,只支持依赖和泛化这两种关系,在Enterprise Architect 7.5 中对包间关系支持的要丰富一些,有Package MergePackage Import两种关系(可能还要多,希望大家指正)。并且,这两种建模工具中关于包间关系符号,都是基于虚线箭头的表示,唯一区别的就是个别的一些文字标识了。

 

 

    如下图中4个包图,在做架构的时候,我们应该如何对待这样十分具有指导意义的设计呢?

 

 

clip_image001

 

    包图间关系对于指导开发人员做好时序图、交互图,有着一定的作用。那么,如何分辨他们各种关系呢?

 

    对于架构层次的东西,接触的不多,以前一直按照自己的想法来做,并没有太认真的对待他们,今天乍一认真看待,发现这其中关系有点认识不足。

 

 

    先温故一下概念。

 

依赖

        可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;

 

clip_image002

关联

        他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;

 

clip_image003

 

(关联、依赖解释,摘自:http://www.iteye.com/topic/632059 )

 

 

 

    为了更好的区分这两个关系,我们一切从代码实现说起,这样更容易理解一些。

 

 

    我理解,依赖和关联最大的实现区别就是,一个作用域的问题,也就是上面说到得,类B在类A中的某个方法中使用;类B以类属性(成员变量)的形式关联在类A中。前者的作用于小于后者,于是,我便以此作为分析的基础。(本人拙见,希望指正。)

 

 

    在ROSE中,包间关系只有依赖和泛化,是正确的。UIBLL之间存在依赖关系,从根本上可以说,UI中每个界面类的实例对象中都会在每个事件方法中引入相应的BLL类,实例成对象进而完成相应的功能。若,考虑到系统优化、节省资源等,或许我们可以把这其中的UI界面类和BLL中相应类的关系描述为关联,这样岂不是UIBLL之间会是关联关系?

 

 

 

    不是这样的,我的理解,UIBLL的包中各类之间的关系可能有依赖、有泛化,但是基于包层关系,还是要从基本的规范、出发点开始,也就是对于BLL中相应类,都单独引入到UI类实体对象的方法中去,这样就是依赖关系,而非关联。

 

 

 

    在EA中,包间关系,有Package Import,也就是包与包之间(层与层之间的引用,更偏向于实现一些就是引入命名空间,进而能够实例该层类、调用类方法)的引用。

 

 

    从包的层次角度来看待之间的关系,我更倾向于EA中这种对包间关系的表述。

 

    并且,ROSE下,设计架构图,包间关系没有关联这种关系,而是应该为依赖或泛化(继承)

 

 

    如下,我比较认可EA中的这种关系表述:

clip_image004

 

 

   

    思维受限,各位多多指教。

 

 

 

 

  • 0
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一道光_

1分也是爱,鼓励鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值