软件设计---高层设计(一):共性可变性分析和分析矩阵

Table of Contents

  • 共性可变性分析
  • 需求矩阵

软件开发中最大的问题之一为:处理问题域中的变化。初次拿到软件需求,看似有一定规律,但也存在各种特殊情况。怎样发现共性,及其变化,Alan在他的书中(design patterns explained)中给出了两种方法:共性可变性分析,和需求知矩阵。

共性可变性分析

先找出概念,及它们的各种变化。 然后分析概念之间的关系,通过从大到小的顺序。背景法。如果概念1使用了概念2,则概念1是背景,应该先分析概念1。相当于先搞出框架,然后填东西,这样会更高效一些。

将概念定义为接口,而它们的变化则定义为具体实现类。

几乎所有的问题都可以这样进行分析。

比如,对于一个发布文章到博客网站上的需求:

  • 能够发布html格式的文章
  • markdown 格式的文章
  • 能够发布到wordpress, cnblogs, blogger, chinaunix, github
  • 文章中可以有图片

其中概念为: 文章, 发布器 注: 怎样寻找概念: 1. 名词。 2. 动词再个"er",将它变为名词。 其中文章的变化为: html格式,markdown格式 发布器的变化为 wordpress发布器, cnblogs发布器, blogger发布器。

只有这两个概念。 再来看两个概念间的联系。发布器会到文章,因此我们先来分析发布器。文章可以作为发布器的一个参数。

要发布一篇文章到某个目标,先创建一个目标的发布器,再创建文章,然后将文章传给发布器。

发布器和文章还可能有一处关系: 即存在第三个概念,将二者作为参数,进行发布。这种其实跟前者只有略微差别,在实际中可不计较二者的微小差异。不要钻牛角尖。

需求矩阵

使用需求矩阵,可以更加明确地找出概念及变化,尤其是对于复杂的需求。

先在需求中找出需要处理的情况。然后对每种情况的,从需求中找出其中的概念。每拿到一个具体的条目,就找出可能表示它的通用概念,然后第一列表示概念,第二列表示第一种情况。每行表示一个概念及其变化。当处理完第一种情况后,继续处理第二种情况,同样对于每个条目,如果它的概念已经存在,则直接填在相应行,否则就扩展矩阵,添加一行用于表示这个新的概念。

最终完成后,每一行可以通过一个stratege模式处理,然后通过 abstract factory模式为每一种情况(每一列)创建处理对象。

时间: 2024-10-10 07:13:35

软件设计---高层设计(一):共性可变性分析和分析矩阵的相关文章

哪些软件技术和设计可以申请专利

 专利对于苦逼程序员来说,是一种保护措施,那么,哪些软件技术和设计可以申请专利?先给大家看张图.下面是这几家企业近五年的专利公开数量(14年数据截止9月),可以看到互联网相关专利的飞速增长,那么具体哪些互联网产品可以申请专利呢? 4 分钟前 上传 下载附件 (29.1 KB) 专利法中没有明文规定哪些互联产品可以或者不可以申请专利,原则上任何互联网产品都可以申请专利,但可能会因为不合专利授权条件而被驳回,导致企业浪费了时间.金钱.公开了产品秘密也得不到专利的保护.因此,我们从互联网产品涉及的

【华为云技术分享】如何设计高质量软件-领域驱动设计DDD(Domain-Driven Design)学习心得

DDD做为软件设计方法于2004年提出,一直不温不火,最近几年突然火起来了,为啥呢?正所谓机会给有准备的人,因为微服务的流行,大家都跃跃欲试把传统单体软件转成微服务架构,但理论很丰满,现实很骨感,光是分解微服务就让人找不到北,而DDD是歪打正着也好,富有远见也好,正好适合微服务转型设计,不火都难. 最近学习了领域驱动设计(Domain-Driven Design),感觉受益匪浅,那到底啥是DDD呢?这里分享一下学习心得.网上有很多详细的资料,感兴趣可以看看这个https://www.infoq.

Hadoop项目实战-用户行为分析之分析与设计

1.概述 本课程的视频教程地址:<用户行为分析之分析与设计> 下面开始本教程的学习,本教程以用户行为分析案例为基础,带着大家对项目的各个指标做详细的分析,对项目的整体设计做合理的规划,让大家能通过本课程掌握Hadoop项目的分析与设计.该课程主要包含以下课时: 他们分别是:项目整体分析,项目指标与数据源分析以及项目整体设计.如下图所示: 首先我们来学习第一课时:<项目整体分析>. 2.内容 2.1 项目整体分析 本课时简述分析一个项目产生的背景,以及该项目能给企业带来那些良好的结果

软件顾问可视设计的得力助手——PowerMockup

你可能是一位从事信息化的软件顾问,你也可能是一位软件设计师,你需要通过图形直观的向客户表达你的设计意图. 你可能已经积累了很多的Powerpoint图形元素,但每次都要从以往的文件中到处寻找,浪费您宝贵的时间. 现在,我要向您推荐这一款软件顾问可视设计的得力助手--PowerMockup,他是一款Powerpoint插件,具备以下特性: 1.支持采用Powerpoint快速设计软件界面草图,让用户快速认可你的设计方案.PowerMockup内置有 78种完全可编辑的用户界面元素和84种线框图图标

软件编写和设计中的18大原则

软件编写和设计中的18大原则写在这里,自己经常看一看.作者Diggins是加拿大一位有25年编程经验的资深技术人员,曾效力于Microsoft和Autodesk,并创办过两家赢利的互联网公司. 下面的13和14合起来也被称作Shy原则. 1.避免重复原则(DRY - Don’t repeat yourself) 编程的最基本原则是避免重复.在程序代码中总会有很多结构体,如循环.函数.类等等.一旦你重复某个语句或概念,就会很容易形成一个抽象体. 2.抽象原则(Abstraction Princip

谈谈编程器软件开发与设计

*************************************************************************************************************************** 作者:EasyWave                                                   时间:2014.05.24 类别:协议标准-编程器简介                                  声明:

TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各种渠道的SDK.而且这些渠道接口的具体接入字段和接入逻辑,每个月以至每周,都可能发生或大或小的变动.在这样一个复杂的应用场景下,我们应该如何设计一个足够强大而又足够灵活的SDK服务端呢? 首先我们需要厘清,在整个应用场景中,TYPESDK所处的位置,以及它所需要实现的核心功能. 图1 如图1所示,T

面向对象设计的设计原则

只有深刻理解审计原则,自然而然就能写出设计模式. 通过refactor(重构)得到设计模式.--现在还是不是很理解 1.针对接口编程,而不是针对实现编程 2.优先使用对象组合,而不是类继承 3.封装变化点 1.针对接口编程,而不是针对实现编程 客户(程序)无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口. 2.优先使用对象组合,而不是类继承 类继承通常为"白箱复用",对象组合通常为"黑箱复用".继承在某种程度上破坏了封装性,子类父类耦合度高:而对象组

数字化设计界面设计趋势

数字化设计,尤其是界面设计,新趋势之一就是简单.其实微软早在2007年可能已经开始进行对简单界面的追求了,当时他们推出的Zune播放器拥有优美的排版界面.尽管该产品的有些失败,但其UI进行了改进并且应用到Windows Phone和Windows 8界面设计里.另一方面iOS上在大量逼真的纹理和深度的基础上,加上渐变.光泽的风格效果和阴影效果,但是我们开始看到越来越多适用于所有平台的北京UI设计应用程序采用了更简约的方式. 在这篇文章中,我们配合一些漂亮的设计说明这一趋势.这些照片来自Dribb