软件架构设计---基于鲁棒图进行设计

如何借助鲁棒图进行初步设计呢?

ADMEMS方法归纳了鲁棒图建模的10条经验要点,分别覆盖语法,思维,技巧,注意事项等4个方面。

鲁棒图建模的10条经验。

1.遵守建模规则。

通过以下4条语句,可以理解该图的本质:

1.1 参与者只能与边界对象交谈。

1.2 边界对象只能与控制对象和参与者交谈。

1.3 实体对象也只能与控制对象交谈。

1.4 控制对象既能与边界对象交谈,也能与控制对象交谈,但不能与参与者交谈。

2.简化建模语法

2.1 ADMEMS方法推荐鲁棒图建模的语法。在实践中,简化的鲁棒图语法将有利于集中精力进行初步设计,而不是关注细节。

3.遵循3种元素的发现思路

用例=N个场景。每个场景的实现都是一连串的职责进行协作的结果。所以,初步设计可以通过”研究用例执行的不同场景,发现场景背后应该有哪些不同的职责“

4.增量建模

举例说明:类似WinZip,WinRar这样的压缩工具大家都用过。为其中的”压缩“功能进行基于鲁棒图的初步设计。

首先,识别最明显的职责。对,就是你自己认为最明显的那几个职责--不要认为设计和建模有严格的标准答案。如果 ,你认为压缩就是把原文件变成压缩包的处理过程,于是识别出了3个职责:

接下来,开始考虑职责间的关系,并发现新职责。压缩器读取原文件,最终生成压缩包---这里可以将打包器独立出来,它是受了压缩器的委托而工作的。

继续同样的思维方式。下图的鲁棒图中间成果,又引入了压缩配置,它影响着压缩器的工作方式,例如加密压缩,分卷压缩或者其他。

最终的鲁棒图如8-13所示。压缩功能还要支持显示压缩进度,以及随时取消进行了一半的压缩工作。所以你又识别出了压缩行进界面和监听器等职责。

5.只对关键功能(用例)画鲁棒图

基于”关键需求决定架构“的理念,功能需求作为需求的一种类型,在设计架构时不必针对每个功能都画出鲁棒图。

6.每个鲁棒图有2-5个控制对象

既然是 初步设计,鲁棒图建模时,针对关键功能的每个鲁棒图中得控制对象不必太多太细,5个是常见的上限值。相反,若实现某功能的鲁棒图中只含一个控制对象,则是明显地”设计不足“--这个控制对象的名字必然和功能的名字相同,这意味着没有对职责进行真正的切分。例如,WInZip的压缩功能设计成8-14所示的鲁棒图,几乎没有任何意义。

7.勿关注细节:

初步设计不应该关注细节。例如,

1.对每个对象只标识对象名,都未识别其属性和方法。

2.”活期账户销户界面“,具体可能是对话框,WEB界面,字符终端界面,但鲁棒图中没有关心这些细节问题。

3.”客户资料“ 等实体对象须要持久化吗?不关心,更不关心用Table还是用File或其他方式持久化。

4.没有标识控制流的严格顺序。

8.勿过分关注UI,除非辅助或验证UI设计。

过分关心UI,会陷入诸如有几个窗口,是不是有一个专门的结果显示页面等诸多细节之中,初步设计就没法做了。

别忘记了,初步设计的目标是发现职责。初步设计无须展开架构设计细节,否则就背上了”包袱“,这是复杂系统架构设计起步时的大忌。

时间: 2024-10-08 03:28:57

软件架构设计---基于鲁棒图进行设计的相关文章

鲁棒图(Robustness Diagram)

鲁棒图与系统需求分析 鲁棒图(Robustness Diagram)是由Ivar Jacobson于1991年发明的,用以回答“每个用例需要哪些对象”的问题.后来的UML并没有将鲁棒图列入UML标准,而是作为UML版型(Stereotype)进行支持.对于RUP.ICONIX等过程,鲁棒图都是重要的支撑技术.当然,这些过程反过来也促进了鲁棒图技术的传播. 而“鲁棒图(Robustness Diagram)”的作用,除了初步设计之外,就是检查用例规约是否正确和完善了.“鲁棒图”正是因为后者检查的作

Java EE 架构设计——基于okhttp3 的网络框架设计

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/77893903 本篇文章带大家设计一套满意业务需求.代码健壮高效(高内聚低耦合)并且可拓展的网络框架.以最新的okhttp3为基础设计出高效可靠的网络缓存.多线程文件下载等架构模块.从此不局限于使用别人的框架,而步入了设计框架,让自己可以走的更远,我觉得这才是一名合格开发者所应该具备的能力.在开发中,选择一个开源框架的标准有很多,例如学习成本.文档是否齐全.github星数量.现在

目标跟踪文章翻译--基于主动特征选择的鲁棒目标跟踪

摘要:基于检测的自适应跟踪已经被广泛研究了且前景很好.这些追踪器的关键理念是如何训练一个在线有识别力的分类器,这个分类器可以把一个对象从局部背景中分离出来.利用从检测目标位置附近的当前帧中提取的正样本和负样本不断更新分类器.然而,如果检测不准确,样本可能提取的不太准确,从而导致视觉漂移.最近,基于跟踪的多实例学习(MIL)已经在某些程度上提出了一些解决这些问题的办法.它将样本放入正负包中,然后通过最大化似然函数用在线提升的办法选择一些特征.最后,被选择的特征相结合用于分类.然而,在MIL追踪里,

架构风格与基于网络应用软件的架构设计(一)

作者:Roy Thomas Fielding 译者:李锟 论文摘要 Web(万维网,英文全称World Wide Web,简称Web)的成功,很大程度上是因为其软件架构的设计满足了拥有互联网规模(Internet-scale)的分布式超媒体系统的需求.在过去10年间,通过对定义Web架构的规范所做的一系列修改,Web以迭代的方式不断地发展着.为了识别出Web需要改善的那些方面,并且避免对其进行不必要的修改,需要一种现代的Web架构模型,用来指导Web的设计.定义和部署. 软件架构方面的研究探索的

基于SEDA的异步框架设计与实现

基于SEDA的异步框架设计与实现 二.为什么使用SEDA 目前,面对并发环境,主流互联网服务器编程模型有两种:多线程模型以及事件驱动模型.但是这两个模型都不足以解决这个问题.我们来首先看一下这两种编程模型. 1.多线程并发模型 多线程并发模型是目前最普遍的服务器编程模型,该模型的架构如下图所示:        该模型针对每一个请求,会为其创建并分配一个线程.该线程负责这个请求的处理.该模型的优点:执行粒度是整个完整的处理流程.处理逻辑清晰,容易开发.但与此同时缺点也很明显:如果处理过程中某一步骤

39.JAVA编程思想之外篇——JAVA图形化设计精简大全一文覆盖

39.JAVA编程思想之外篇--JAVA图形化设计精简大全一文覆盖 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51204948 目录 Java图形化界面设计--容器(JFrame)...1 Java基本类(JFC)...1 l     AWTAbstract Window Toolkit(AWT)抽象窗口工具包... 2 l     Swing包... 2 l     AWT和Swing的区别... 6 Swing基本框

基于Spring的简易SSO设计

通常稍微规模大一些的企业,内部已经有很多的应用系统,多个系统整合首先要解决的便是“统一登录(SSO)”问题,之前写过一篇 利用Membership实现SSO(单点登录) ,java环境下已经有一些开源的成熟sso项目(比如CAS),但如果觉得CAS太麻烦,想自己再造轮子重复发明一个,可以参考下面的思路:(仍然是基于Cookie的实现,只不过安全性上略有加强,cookie端存放的token标识,不再与用户名.密码等这些敏感信息相关) 1.组件图 主要由3大部分组成, 1.1 SSO Client

基于FPGA的VGA显示设计(二)

上一篇:基于FPGA的VGA显示设计(一)     参照 CrazyBingo 的 基于FPGA的VGA可移植模块终极设计代码  的工程代码风格,模块化处理了上一篇的代码,并增加了一点其它图形. 顶层模块: 1 /**************************************************** 2 * Module Name : VGA_color_all.v 3 * Author : yllinux 博客:http://www.cnblogs.com/yllinux/

树形结构的数据库表Schema设计-基于左右值编码

树形结构的数据库表Schema设计 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需要借助于数据库完 成持久化.然而目前的各种基于关系的数据库,都是以二维表的形式记录存储数据信息,因此是不能直接将Tree存入DBMS,设计合适的Schema及其对 应的CRUD算法是实现关系型数据库中存储树形结构的关键. 理想中树形结构应该具备如下特征:数据存储冗余度小.直观性强:检索遍历过程简单高效:节点增删改查CRUD操作高效.无意