UML之包图(Package Diagram)

软件的架构设计,思路遵循由大及小。相较于Class Diagram,Package Diagram从更宏观的角度来展示软件的架构设计,主要体现在代码组织方面。Package Diagram对一些大型的项目特别有用。顺便说一句,良好的代码组织,对软件的可维护性至关重要,请认真的规划你的包结构。下文将简单介绍Package Diagram,主要分两块,什么是Package,以及Package之间的关系。

什么是Package

用最简单的方式来说,Package可以理解为文件夹(folder)。代码的组织从大到小,分为三个层次:文件夹层,文件层,以及文件内部的块(Block)层(函数块之类的)。Package体现的就是文件夹层。Java里面可能是一串文件夹,比如java.lang、java.util等,也叫Package;C++里面,Package对应的是namespace,虽然不能完全等同于文件夹,不过也可以往这边靠;其它的如Node.js,Python等大都体现在文件夹层。

Package在UML里面用一个Tab框表示,Tab里面写上Package的名字,框里面可选地填充一些其它子元素,如类,子Package等。Package的名字可以写全称,也可以简写,风格可可参考项目所用语言的惯例。下面是一个简单的Package示例:


上图为某java项目的一个工具Package,里面有四个工具类。类比较多的时候,为简单明晰起见,也可以不填写子元素。

Package之间的关系

如果只有一个Package,那也就失去了Package的作用,没有画Package Diagram的意义。Package之间的关系非常的简单,两个字,依赖,UML中依赖用带箭头的虚线表示。我个人还是非常不建议依赖关系出现Cycle的。依赖关系最常见的一个例子就是分层架构,把代码分布到多个层次中,某层可以依赖于下层以及同层,但是不能依赖于上层。其它的组织方式还包括按照模块划分,按照功能划分等。下图是一个Java项目的简单三层架构Package Diagram:


示例中三个主要的Package:data用于访问数据库,也叫dao,Mybatis项目里面分为entity和mapper两个子Package,service是业务逻辑的组件,web用于接受http请求。util为通用组件。

小结

Package Diagram从宏观角度展示了项目的组织架构,在大型项目中,是重要的一种UML图。可以先Package Diagram,再Class Diagram的方式来展示项目的架构。

  • 21
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
作为一名AI语言模型,我无法提供完整的代码,但我可以提供一些关于使用GoJSUML包图的指导。 首先,你需要了解GoJS的基本概念和使用方法。GoJS是一款用于创建交互式图表和数据可视化的JavaScript库,它提供了强大的绘图能力和丰富的模板库。 在开始UML包图之前,你需要定义你的数据模型。UML包图通常由一组包和它们之间的关系组成,因此你需要定义包的属性和关系。你可以使用GoJS的Model类来定义你的数据模型,并将其与布绑定。 以下是一个简单的数据模型示例: ```javascript var model = new go.GraphLinksModel( [ { key: "Package1", label: "Package 1" }, { key: "Package2", label: "Package 2" }, { key: "Package3", label: "Package 3" }, { key: "Package4", label: "Package 4" }, ], [ { from: "Package1", to: "Package2", label: "contains" }, { from: "Package2", to: "Package3", label: "depends on" }, { from: "Package3", to: "Package4", label: "uses" }, ] ); ``` 在这个数据模型中,我们定义了四个包(Package1, Package2, Package3, Package4)和三个关系(contains, depends on, uses)。 接下来,你需要创建一个布并将其绑定到数据模型。你可以使用GoJS的Diagram类来创建一个布,并设置一些基本的属性。 以下是一个简单的布示例: ```javascript var myDiagram = new go.Diagram("myDiagramDiv"); myDiagram.nodeTemplate = $( go.Node, "Auto", $(go.Shape, "Rectangle", { fill: "white", stroke: "black" }), $(go.TextBlock, { margin: 5 }, new go.Binding("text", "label")) ); myDiagram.linkTemplate = $( go.Link, $(go.Shape), $(go.TextBlock, { segmentIndex: -1, segmentFraction: 0.5 }, new go.Binding("text", "label")) ); myDiagram.model = model; ``` 在这个布中,我们使用了两个模板来定义节点和链接的样式,然后将其绑定到我们的数据模型。 最后,你需要将布渲染到HTML页面中。你可以在页面中创建一个div元素,并将其id设置为myDiagramDiv,然后在JavaScript中调用myDiagram.render()方法来渲染布。 ```html <div id="myDiagramDiv" style="width: 100%; height: 500px;"></div> <script> myDiagram.render(); </script> ``` 这是一个简单的GoJSUML包图的示例。你可以根据你的需求和数据模型来进一步定制和优化它。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值