业务行为的分析和设计

Author:Anders小明
       同步自:http://www.blogjava.net/AndersLin/archive/2006/12/23/89648.html

复杂业务行为通常看作是复杂规则与流程的集合。解决的基本方法依赖基本的思考方式:分解结构。
      分解的第一要素是:面向对象——内聚。通常面向对象理论会告诉我们设计的设计原则是:这个对象是什么。这样的做法对于Domain Model或者比较适合,但对应于Service或者Application层的对象并不合适。这一类对象在需求的上的描述最典型是过程式!过程式描述的最大特点是告诉我们怎么做,当我们应用面向对象设计时,相对于怎么做,我们要关心的是需求做什么。
      1.1 分解行为的是所有工作的第一步:
      分解的过程(手段),可以简单说有两个层次:
      第一层:把逻辑分解到不同继承体系的对象上;
      第二层:把逻辑分解到同一继承体系的对象的不同抽象层次上。
      两个层次(手段)的内在的理论是:做什么其实是一种行为抽象,而正如我们所知的,抽象是有层次和排列的。第一层分解在于解决顶层抽象,而第二层就解决其下层的抽象,如此反复,就可以完成整个逻辑抽象的排列。
      不过,有时我宁愿用另外一种更实战的说法来解释这样的做法:利用面向对象方法,关注于做什么来确定抽象模型,而把怎么做分解为抽象模型的派生类型。
      无论是做什么,还是怎么做,需要注意的一点是:在知识级上隐式概念的印射,在操作级上有其投影。
接下来我们面临其它一些技术问题。
      1.2 确定逻辑的组合操作关系
      在分解行为的过程中,我们先分解出了不同的对象体系,在知识级别(分析层次)上看,工作已经完成,不过在操作级别(设计层次)上看,我们还需要解决一个问题。
      不同的对象体系在系统中,根据场景,表现为两种角色:调用者和被调用者。由于被调用者的派生体系(不同的怎么做),调用者面临着一个选择,选择一个或者一组合适的被调用对象。
      如何选择有两种方式:设计时(部署时)和运行时确定。
      设计时(部署时)很简单,在程序中写上特定派生类型,基本算是hardcode。通常发生在调用方其对象体系的叶子节点直接调用被调用方的叶子节点。此时,调用者是被动选择,交给所有的被调用者(通常是叶子节点),每个被调用者采取合适逻辑操作组合。
      另一种是运行时,是调用者主动选择(通过一个工厂),根据一定规则,判断选取合适的一个或者一组action执行。通常利用外部如数据库,或者工厂+反射,利用对应被调用者的Specification来确定。
      主动选择可以是简单的if…else…来完成,当选择的影响因素多后可以采用的方式是决策表。
      两者比较如下:

 

矩阵/决策表

面向对象方式

优点:

直接了当,信息获取明确;

随相关因素的增长,维护的复杂度曲线平缓升高,低于矩阵,决策表;在与,或,非计算上相对明确;层次化结构有助于学习;

缺点:

随相关因素的增长,维护的复杂度曲线快速升高;但在与,或,非计算上不明确;

相关信息获取不十分明确;

本质:

排列组合的平面化结构。这是其优缺点的根源;

排列组合的层次化结构;

开发:

运行时确定,变更相关因素对于开发有重大影响;

转化为部署时确定,运行时结构明确

在维护成本考虑,应该考虑多态,系统设计上不一定用面向对象编程实现,但在流程和计算设计上至少要模拟面向对象的方式;
      1.3 行为下的规则
      分解后的行为,除了处理怎么做的流程,还有各种各样的规则:包括了Selection的Specification外,还包括Validation的Specification,Build的Specification以及Calculation的Specification。
      除了后两种是行为外(不包括它们参数的来源),其它两种业务规则本身来说,其有三种实现方式:
      a) 多态(面向对象方式)。
      b) 简单决策表(映射表),用显示的行表(and关系)保存路由选择(运行时确定)。
      c) 树形决策表(映射表),用显示的树表(and/or关系)保存路由选择(运行时确定)。
      1.4. 行为的异步分解
      大部分行为的分解,都是同步的!然而在复杂系统中还是存在行为的异步分解,这样设计看起来更像是Data Flow Pattern,存在的理由不一,有的是出于性能原因,有的出于业务原因(在金融系统中可以看到这样的例子,例如:为了保证关键业务数据的存在,通常是一些价格或者利率,白天提请的交易行为,分为两步,第一步即使完成,而第二步动作必须在晚上进行)。

转载于:https://www.cnblogs.com/yimlin/archive/2006/12/23/601323.html

业务行为的分析和设计相关推荐

  1. 分析方法的基础 — 3. 业务与管理的特性,分析与设计的抓手

    拆分业务与管理的理由已经知道,想必大家经常会遇到这些词:财务管理.质量管理.物流管理.xx管理等,这些词在设计工作中可以分为两个部分去理解,即:财务&管理:质量&管理:物流&管 ...

  2. 业务系统性能问题分析和诊断

    这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点. 1|系统性能问题分析流程 我们首先来分析下如果一个业务系统上线前没有性能问题,而在上线后出现了比较严重的性能问题,那么实际 ...

  3. 《面向对象分析与设计》一2.1 分析面临的主要问题

    2.1 分析面临的主要问题 自从软件工程学问世以来,先后出现过多种分析方法.各种分析方法从不同的观点提出了认识问题域并建立系统模型的理论与技术,使软件开发走上了工程化和规范化的轨道.然而,分析工作仍然 ...

  4. 面向对象分析和设计的几个关键步骤_(豁然开朗)《面向对象分析与设计》读书笔记 (4)- 分类...

    目录 分类 正确分类的重要性 分类的困难 分类的增量和迭代本质 确定类和对象 经典方法 && 现代方法 (种) 面向对象分析 (主要识别对象) 关键抽象和机制 确定关键抽象 识别机制 ...

  5. 实例讲解UML建模分析与设计

    本节和大家学习一下图书管理系统的UML建模分析与设计,包括UML简介,需求分析描述,模型建立等内容,相信通过本节的介绍你对UML建模分析与设计有深刻的认识. 图书管理系统的UML建模分析与设计 统一建 ...

  6. 例解基于UML的面向对象分析与设计

    摘要 本文以实例的方式,展示了如何使用UML进行面向对象的分析与设计.本文将假设读者对UML.面向对象等领域的基本内容已了然于胸,所以将不会过多阐述,而将重点放在应用过程上.本文的目的是通过一个完整的 ...

  7. 框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)...

    一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创 ...

  8. java bs架构书_基于BS架构的图书借阅管理模块的分析与设计(JSP+MySQL)(新品)

    基于BS架构的图书借阅管理模块的分析与设计(JSP+MySQL)(新品) 来源:2BYSJ.cn 资料编号:2SJ295500 资料等级:★★★★★ %D7%CA%C1%CF%B1%E0%BA%C5% ...

  9. 面向对象分析与设计小结

    最近接触了下面向对象分析与设计的概念,虽说书上也许是讲的比较浅显,这里暂且做做学习笔记 当面对一个项目的时候,首先依然是需求分析,得到需求分析报告,接下来在面向对象分析过程中建立用例图,这一步是项目负 ...

最新文章

  1. python库整理:networkx 包
  2. 率先通过信通院容器规模化测评 阿里云获最高认证级别
  3. HTML5中的audio在手机端和微信端的不能自动播放
  4. 使用多线程的方式调用chineseocr_API
  5. JavaScript学习笔记:对象
  6. Databricks文档03----Azure Databricks 创建
  7. stm32 python界面开发_【STM32开发】使用Qt Creator 开发STM32
  8. 7.hdfs工作流程及机制
  9. 应用算法的实际情况——简单就是美
  10. oracle删除数据用户,oracle删除用户及表空间,导入用户和数据
  11. tomcat设置JSessionID长度问题
  12. Linux block multi-queue (blk-mq) 机制
  13. unity学习笔记-换装系统
  14. 核心交换机、汇聚交换机、接入交换机功能详解
  15. 超简单安装Win10!不用U盘!保留原应用快速纯净!安装Window10系统,Windows7升级到Windows10。(亲测有效)
  16. 产品功能留存分析矩阵
  17. mac使用my-mind思维导图
  18. 【备忘】【不定时更新】那些有用有趣的网站君们~~
  19. SQL语句练习——查询
  20. 2020年Java最新面试题整理题库完整版

热门文章

  1. 送你了,思科设备基础配置命令大全(一),赶紧收藏......
  2. 超大规模商用 K8s 场景下,阿里巴巴如何动态解决容器资源的按需分配问题?
  3. 从零开始入门 K8s | Kata Containers 创始人带你入门安全容器技术
  4. 文件服务器换个用登录,文件服务器迁移 登录
  5. 新浪微博杨卫华 PHP,构建高性能的微博系统——再谈新浪微博架构_杨卫华.pdf
  6. android动画封装,Android属性动画封装,快速构建动画
  7. linux代码环境配置,linux下配置环境变量【原创】(示例代码)
  8. element 表格宽度自适应_Python如何以表格形式打印输出!
  9. python与java的比较_Python和Java两者有什么区别?
  10. android上传视频 断点续传,断点续传上传