你是否正在被不断变化的需求折磨得焦头烂额?!

  你是否在为繁冗复杂项目抓耳挠腮?!

  相信这是很多人现在正面临的问题。我们在学习软件架构时经常能看到拥抱变化的字眼,我们也知道什么是拥抱变化,也知道拥抱变化是解决上述问题的最优途径。然而,如何拥抱变化才是解决问题的关键所在。每每此时,各种书本都会把路标指向设计模式,各种架构模式等,大家每个人看了以后大都恍然大悟,而付诸于实践时则仍旧一脸茫然。那么如何做到拥抱变化呢?

  首先,要从软件架构的根本说起。我们为什么要进行软件架构设计?!答案很简单,因为有变化,并且是很多的不断的往往难以容忍的变化。如果没有变化,世界上就不会没有软件架构,今天很多做软件的人肯定在做从事职业。相信这么说没几个人会持反对意见。

  其次,任何软件项目都要解决实际的业务,不解决业务的软件根本不存在,而变化则来自于要解决的业务问题。也会你认为这是废话,但明白这点很重要。大家都知道,解决问题并不难,发现问题才是最难得。业务是解决现实世界中的某一类问题,因此它有特定的规律,源子于业务的变化则同样拥有这些规律。明白这点,我们就向成功迈出了关键的一步。

  第三,既然变化有规律,那么就可以分析总结。因为变化来自业务,所以要从业务入手,通常业务可以划分为业务流程和业务单元,如图1:

图1

  图1是一个抽象的业务1,从A到E是一个完整的业务流程,其中A,B,C,D,E是业务中的业务单元。那么我们可以总结出业务的变化规律,如图2:

图2

  显然,业务变化仅有4种情况。抛除流程和单元均不变得情况(灰色),实际上只有三种,其中最容易遇到的就是一个变化一个不变(绿色)。二者均变化的情况很少,当出现变化时,要么是项目定位出错,注定失败;要么业务划分粒度不够或不合理。因此,通常我们重点把握的变化只有两种,分别是:第1,业务流程不变,业务单元发生变化;第2,业务流程变化,业务单元不变。下面我们就对如何把握这两种情况做一一说明。

  业务流程不变,业务单元发生变化

  这种变化最容易理解,举个最简单的例子。当我们去商店/超市购物时,通常的流程都是首先选购商品,然后付账,最后交易完成。像这样的业务流程应该说自商店/超市出现起到现在都没有发生变化过,但是支付方式却发生了很多变化,从最早的金属货币,到后来的纸币,再到信用卡,甚至今天的手机支付等等。如此相信不难理解下图: 

图3

那么此类变化该如何解决呢?通常我们可以为此类业务构建一个比较稳定的框架(Framework),在可能变化的地方(如图3中的支付)抽象出接口,使用依赖倒置等方法实现可能变化,然后根据条件,调用实际的实现(如选择纸币支付方式);

  业务流程变化,业务单元不变

  以订票为例说明此类变化,如下图:

图4

由图4可以看出,对用户来说同样都是订票业务,事实上有不同的实现方式(业务流程),但是其中的某些业务单元,如订票,支付,配送完全一样。由此可以总结出此类变化的特点,就是在不同的情况下,同样的业务可能要通过不同的组合(业务单元)实现。相信这点不难理解。那么此类变化该如何解决呢?现在很流行的SOA为我们提供了很好的解决方法。我们可以将每个业务单元以服务的形式发布,从而解决了业务单元直接的耦合,在需要的时候装载不同的单元服务,从而实现不同的业务流程,甚至灵活构建新的业务而不必担心对现有业务造成任何影响。

  最后,通过以上对业务变化的分析,相信大家对软件架构设计中如何拥抱变化有了一些新的认识。事实上,今天很多的软件架构方法都是解决业务变化中的某一类型的变化,如SOA,AOP等等,只是它们的关注点不同。只要把握了它们的关注点,相信拥抱变化不是难事!

软件架构师之拥抱变化相关推荐

  1. 《拥抱变化——社交网络时代的企业转型之道》一构筑社会信任

    本节书摘来异步社区<拥抱变化--社交网络时代的企业转型之道>一书中的第1章,作者: [美]Sandy Carter 译者: 侯德杰 责编: 赵轩, 更多章节内容可以访问云栖社区" ...

  2. 云栖科技评论 | 传统产业的数字化转型 破除“肌肉记忆” 拥抱变化与未知

    过去一周,分属三类不同领域的人们,受到了来自同一原因引发的职业挑战: 在德国,总理默克尔和她的政府同僚们,正在努力学习数字经济时代的知识,随着全球快速迈向数字经济时代,德国和欧洲的步伐明显落后于中美两 ...

  3. 拥抱变化——从Atlas到ASP.NET AJAX(1):下载安装总览

    序 在前面的帖子(Atlas新版本的发布对我而言无疑是一个晴天霹雳)中,我曾说到第一本书(<ASP.NET Atlas程序设计:第I卷 服务器端>初稿完成)夭折的事情.该文章发布之后,得到 ...

  4. Istio 1.5 发布——拥抱变化,爱上单体

    北京时间 2020 年 3 月 6 日凌晨,我们期待已久的 Istio 1.5 发布了,发布公告见 https://istio.io/news/releases/1.5.x/announcing-1. ...

  5. 云栖专辑 | 阿里开发者们的第11个感悟:拥抱变化,用正确的方法对待工作

    2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...

  6. 拥抱变化——从Atlas到ASP.NET AJAX(4):大大简化的了的Extender扩展器控件

    阅读本文之前,您需要安装完成Microsoft ASP.NET AJAX v1.0 Beta(详见拥抱变化--从Atlas到ASP.NET AJAX(1):下载安装总览).安装完成之后,Visual ...

  7. 如何编写出拥抱变化的代码

    摘要:编写高效优质的代码一直是程序员所追求的目标之一,那么什么样的代码才叫优质呢?其中最重要的莫过于易维护.易修改.本文作者从面向对象和SOLID两大方面,非常详细地总结了如何编写出易修改的代码,绝对 ...

  8. 《拥抱变化——社交网络时代的企业转型之道》一第1章 助力社交商务成功的AGENDA体系...

    本节书摘来异步社区<拥抱变化--社交网络时代的企业转型之道>一书中的第1章,第1.1节,作者: [美]Sandy Carter 译者: 侯德杰 责编: 赵轩, 更多章节内容可以访问云栖社区 ...

  9. 极限编程-拥抱变化阅读感想(二)

    接上文------------------------- 针对开发团队,XP同样提出了四个准则:沟通.简单.反馈.勇气     项目中出现的问题无一例外总是出自那些不愿与别人探讨重要问题的家伙身上.沟 ...

  10. 极限编程-拥抱变化阅读感想(一)

    刚结束了一段不愉快的项目经历,其中掺杂着各种抱怨和愤怒,然并卵,人微言轻,并没有阻碍项目走向灭亡. 现在静下心来,以旁观者的身份重新审视了一下这段经历,颇有心得.正巧收获了一本宝典<解析极限编程 ...

最新文章

  1. 在CentOS 6.6 64bit上安装截图软件shutter
  2. SFTP连接GCP,向服务器发送文件方法,第三方工具生成密钥对连接GCP服务器(putty生成密钥远程连接服务器)...
  3. 全球及中国胶原蛋白肠衣行业深度分析及投资战略规划报告2022-2028年版
  4. [WorldWind学习]12.WavingFlags和WavingFlagLayer
  5. __init__函数
  6. HTTP协议1之协议详解--转
  7. 使用VM Tools让VMware虚拟机里的ubuntu能够共享Windows系统的文件夹
  8. 电脑技巧:Win10系统中的这六种模式介绍
  9. python敏感字替换_python用类实现文章敏感词的过滤方法示例
  10. xampp php5.6 7.1共存,New XAMPP with PHP 7.2.8, 7.1.20, 7.0.31 5.6.37
  11. 十五、CSS 3新特性详解(三)——3D转换(位移、旋转、呈现)、透视perspective、旋转rotateX、Y、Z、呈现transform-style
  12. ajax失败的原因,使用https协议失败的ajax请求失败的可能原因但http工作
  13. pythonlist循环添加元素_list.append()在for循环中每次添加的都是最后的一个元素汗血宝马...
  14. 算法设计与分析基础 (Anany Levitin 著)
  15. servlet到底是什么?
  16. 乌班图Linux于windows系统怎么切换
  17. mina简单实用_Mina框架的简单例子
  18. 江苏高考新方案定了!总分750分,科目“3+1+2”
  19. 高盛区块链79页完整报告:从理论到实践!
  20. cdr软件百度百科_coreldraw是干嘛的?能做什么?cdr软件在哪儿下载?

热门文章

  1. 自营、自营+平台、平台
  2. 淘宝奇门对接(淘宝订单加密改造)
  3. Dave Cheney例说Go运行时内存分配 | Gopher Daily (2021.01.06) ʕ◔ϖ◔ʔ
  4. C++函数模板及隐式实例化、显式实例化、显式具体化、模板重载
  5. mybatis的xmly文件与必依赖
  6. 查询服务器时显示failbyOEM,java - 使用 Weblogic 12c,给出警告警告日志管理 BEA-170011 该服务器上的 LogBroadcaster 失败 - 堆栈内存溢出...
  7. 不支持的WTP版本:1.5。 该插件当前仅支持以下版本:1.0 R7
  8. 华东师范计算机考研科目,华东师范大学计算机技术研究生考试科目和考研参考书目...
  9. 《三体》死神永生之感
  10. python elif是什么意思_python elif是什么意思