业务行为的分析和设计

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. metasploit 快速入门(三) 服务端漏洞利用
  2. 卡尔曼滤波器_使用卡尔曼滤波器和路标实现机器人定位
  3. linux 一块网卡两个ip,Linux 一块网卡配置多个IP的方法
  4. boost::hana::value_of用法的测试程序
  5. gensim在“中文查找(关键词)“与“txt文本“之间做相似度计算(返回最相似的文本)
  6. 菜鸟小编对云计算的一点猜想
  7. Deepin 下 使用 Rider 开发 .NET Core
  8. 七. jenkins部署springboot项目(4)-linux环境--远程调试
  9. Redis的实现原理
  10. 前台ajax请求php后台返回成功却进error方法解决
  11. hdu1019--Least Common Multiple
  12. 宇电智能调节仪AIBUS 及MODBUS 通讯协议说明V8.0
  13. 计算机修理工具包价格,电脑修复工具包#200多个联想工程师专用电脑修复小工具打包...
  14. 不等缓和曲线计算公式及坐标?
  15. python可以制作大型游戏_python能做游戏吗-python能开发游戏吗
  16. 时钟系统:时钟系统倍频分频配置--时钟系统分析案例
  17. 资产监测设备研发中,遇到的VCC、VDD、VEE、VSS都是什么意思?
  18. 终于要露脸了!神十六至少一名第三批航天员,景海鹏是指令长?
  19. 基于SSM实现停车位租赁系统
  20. 大数据面试之Hadoop

热门文章

  1. java hashmap object_Java中的大量Object(使用HashMap)
  2. matplotlib如何绘制两点间连线_如何用 Python 快速揭示数据之间的各种关系
  3. 网站服务器被攻击的形式,服务器被攻击的不同表现类型以及应对策略
  4. 【知识星球】分组卷积最新进展,全自动学习的分组有哪些经典模型?
  5. 【技术综述】基于弱监督深度学习的图像分割方法综述​
  6. TikTok信息流广告怎么做才有效果?我从100个营销短视频中总结了这些方法
  7. 辽宁省风力发电行业“十四五”前景规划及竞争策略分析报告2022-2028年版
  8. python获取系统硬件信息
  9. 科技谋定功能性农业-农业大健康:中科微研携手从玉农业
  10. MongoDB入门及 c# .netcore客户端MongoDB.Driver2.9.1使用