演练:有效减法设计,才能开放加法
前言:幅员愈大的国度、大数据应用愈发达的国度,加法(设计)的幅度就愈大。加法设计幅度愈大,系统的复杂性和差异化就愈显着,此时标准化和统一化的呼声就愈高。无论是标准化或统一化,都意味着加法设计的大量推进,导致系统复杂而难以驾驭;因而要求架构师提出有效的减法设计方案,从复杂中设计出简单,让人们能从简单中来掌控复杂。就架构师而言,基于有效减法的架构设计,才能开放人人去做加法设计。
ee ee
欢迎访问 ==>高老师的博客网页
高焕堂:MISOO(大数据.大思考)联盟.台北中心和东京(日本)分社.总教练
EE EE
本文:
幅员愈大的国度、大数据应用愈发达的国度,加法(设计)的幅度就愈大。加法设计幅度愈大,系统的复杂性和差异化就愈显着,此时标准化和统一化的呼声就愈高。无论是标准化或统一化,都意味着加法设计的大量推进,导致系统复杂而难以驾驭;因而要求架构师提出有效的减法设计方案,从复杂中设计出简单,让人们能从简单中来掌控复杂。就架构师而言,基于有效减法的架构设计,才能开放人人去做加法设计。兹说明如下:
1)秦朝时代唯有书同文、车同轨的有效减法设计,才能开放加法,整并六国成唯一个大国。
2)唐朝的诗叫做七言绝句,如“姑苏城外寒山寺,夜半钟声到客船”,一首诗四个句子,每一个句子七个字,它的韵律有两个“平平仄仄平平仄,仄仄平平仄仄平”,这是唐诗的主要造形(Form)。
3)秦朝的<书同文、车同轨>,加上唐朝的<诗同形>,有效的减法设计,创造了大一统(加法)的辉煌国度。
4)君不见,在前面各步骤里,诸如:从复杂中设计出简单、以需求检验设计等都是基于有效的减法设计,一方面给设备供货商一个开放的加法设计空间;另一方面则让用户享受从简单(来自减法设计)中叫出复杂的满足感。
5)此外,在前面各步骤里,诸如:EIT造形、通用性接口和软件框架(框住某些东西)等,则是减法设计的实践技术;基于这些有效的减法设计途径,才能大幅开放加法设计;因而落实了:从简单中掌握复杂。
演练:
前言:
于此,将联合运用前面所学到的思考技术,以框架及其所含的EIT造形来实践有效的减法设计。以EIT造形明确表述Socket软件界面,藉由两个<E&I>包容包容TCP/IP通信协议和硬件机制,实践开放的加法设计;让通信协议和硬件机制都可以弹性抽换,架构设计具有未来性。
由于EIT造形的主角就是接口<I>,架构师就拿<I>来做为起点(Simple Design),设计出通用性<E&I>;其一方面容纳客户未来抉择的改变,也就是包容未来<T>的多变化;另一方面,则包容未来TCP/IP通信协议的快速演变,或者换掉TCP/IP而改用其它通信协议。于是,架构师的目前决策(决定如何定义接口)具有高度未来性了。接着,规划测试机制,架构师继续两个Mock<T>,做为赝品(Mock)来配合<E&I>来对通信协议进行测试。
最后,迅速将接口(含<E&I>和<T>)落实为代码(请看下述高老师写的范例代码),就能进行实机测试(通信协议)了。(请看下述高老师写的范例代码)
在这些步骤里,诸如:EIT造形、通用性接口和软件框架(框住某些东西)等,则是减法设计的实践技术。基于这些有效的减法设计途径,才能大幅开放加法设计;一方面容纳客户未来抉择的改变,也就是包容未来<T>的多变化;另一方面,则包容未来TCP/IP通信协议的快速演变。因而落实了:从简单中掌握复杂。
Step-1. 基于第二步骤的第2种比喻:
“架构像一棵树的树干。由于树根必须不断成长,拥有随环境而变动的自由度和活力;才能有效吸收更多水分和养分。这项比喻让架构师关心底层模块(Module)的变动自由度。具有活力的树根和树干,才能有效之撑上层业务应用的蓬勃发展。”如下图:
Step-2.基于第一步骤的第2种抽象视角:
“第二种抽象视角:架构师基于<形与内涵分离>的视角,由于不同内涵之间的<变与不变分离>已经由第一种视角所抽象了。这个视角可从内涵中抽像出共同之形,也可以(无中生有地)创造一种造形(Form)来容纳内涵(包括变与不变部分)。由于我们常常拿船运业的集装箱(Container)来比喻<造形>;而拿形形色色的货品来比喻其(集装箱)内涵(Content)。所以上述的第二种视角,又称为<集装箱式>抽象视角。”
从小的造形(如函数、类别、EIT等),到较大的造形(如模式、框架等),都是都是软件人员常用的<集装箱>,集装箱的简单造形是有效的减法设计,其能容纳天下万物,实践了开放的加法设计。例如,由软件框架(Framework)来提供上层接口(API)和下层接口(PI)来实践有效的减法设计;其包容上层多样化的应用软件,也包容底层硬件和通信机制的善变,则支持开放的加法设计。如今,无论是Android、iOS或云平台,几乎都采取这种架构。如下图:
例如,下图里的”通信协议”就属于树根的部分,应该开放加法;亦即我们必须包容它的不断变化、更新与成长。
此时,就能使用框架(有效减法)来包容通信协议的弹性变化(开放加法)。
Step-3.依循第七步骤:清晰而明确表述接口。其有效的做法是:擅用框架里的EIT造形(Form)。架构师认知到两个接口的存在,如下图:
藉由EIT造形<I>来明确地<定义>上图里的接口,并藉由<E>和<T>来辅助其清晰表达接口的<涵意>。因此,使用两个EIT造形分别来表述一个接口。
藉由这两个EIT造形将三项善变的内涵分离开来,如下图:
其中,利用两个<E>的联合来包容树根(通信协议内涵)部分的加法设计,如下图:
然后,利用两个<T>分别包容树梢(智慧家庭和交通车联网内涵)部分的加法设计,如下图:
Step-4.依循第八步骤:尽快对接口进行检验和测试。上图只是架构师脑海里的设计而已,那么又如何确保它是可落地的呢?因此,需要尽快落实为代码,并立即进行检验和测试。此时针对实际的<通信协议>来测试,例如上图里采纳软件的Socket接口和 TCP/IP实体通信协议。如下图:
Step-6. 最后,请看高焕堂老师所撰写的”Socket+EIT造形”范例代码,如下:
演练:有效减法设计,才能开放加法相关推荐
- 软件设计原则 — 开放封闭原则
一.开闭原则的定义 Software entities like classes,modules and functions should be open for extension but clos ...
- 依赖治理、灰度发布、故障演练,阿里电商故障演练系统的设计与实战经验
2019独角兽企业重金招聘Python工程师标准>>> 2016 年,阿里巴巴研发了故障演练系统,把故障以场景化的方式沉淀到系统中,在线上主动回放故障,验证监控报警.限流降级.故障迁 ...
- ICANN:新类别顶级域名2013年才能开放申请
12月24日全球互联网名称与数字地址分配机构(ICANN)网站发表了总裁和首席执行官Rod Beckstrom先生题为"2009年-域名界历史性的一年(2009 – A Historic Y ...
- python怎么在运行中查看执行状态,Python程序运行时查看对象状态怎样设计才能实现...
不知大家有没有用过Rthymbox的python console. Rthymbox可以在运行的时候,让它的 交互式命令行 对程序进行控制. 比如说可以调用player的play函数,让它播放, 还可 ...
- HTML5期末大作业:学校网站设计——安徽开放大学(16页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 web前端期末大作业
HTML5期末大作业:学校网站设计--安徽开放大学(16页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作业题 ...
- stm32 整数加法循环时间_【教学设计】小数加法教学设计
小数加法教学设计 刘秀锦 舞钢市特殊教育学校 教材分析 本节课是第四单元"小数加减法"的第一课时,小数加减法是以整数加减法为基础进行教学的,本节课走踏实了,后边的知识才能顺利的进行 ...
- JUC(3)List、Set、Map集合线程安全Callable创建线程三大工具类:CountDownLatch减法计数器、CyclicBarrier加法计数器、Semaphore计数信号量
1. List集合线程安全 CopyOnWriteArrayList是线程安全的集合: ArrayList是线程不安全的集合: Vector是线程安全的集合(不推荐使用) 1.1 解决ArrarLis ...
- 怎么用计算机计算减法,计算机只会加法,那么它如何用加法来计算减法呢?
计算机中的加减乘除都是经过加法实现的,那么你确定很好奇,加法和减法是彻底不一样的操做啊,如何用加法来进行减法运算呢?下面我就经过几个例子,来解释一下具体的操做过程.web 二进制加法 开始以前,咱们先 ...
- c语言加法减法乘法,一元多项式的加法减法乘法c语言描述线性表应用
一元多项式的加法减法乘法 --(c语言描述)线性表应用 来源:永远的北邮人 vc6.0下调试通过 #include #include #include #include #include #inclu ...
最新文章
- android首页图片轮播效果,Android_Android自动播放Banner图片轮播效果,先看一下效果图支持本地图 - phpStudy...
- linux shell curl 超时与重试
- [Java基础]内部类基础
- 在Sqoop中管理密码的关键提示
- 如何安装Vscode软件及设置成中文界面?
- 无法安装冰点还原_系统还原软件介绍与功能
- 这些年,阿里巴巴技术大牛们曾经写过哪些书籍!
- http://fonts.googleapis.com/css?打开很慢解决方案
- 电脑卡住了怎么办,鼠标无法操作,那就试试快捷键吧
- 计算机开机壁纸能不能更换,如何修改电脑开机的背景图片
- cannot dynamically load executable的尴尬经历
- bootstrap的tooltip
- 用Vue3写个气泡对话框组件
- 编程之美 一摞烙饼的排序问题
- squid代理服务器(正向代理与反向代理)
- BASE理论是什么?
- 好offer是怎么来的
- ADI推出高速模数转换器简化FPGA应用设计
- Z-Wave Battery Support Basics ZWAVE如何实时控制电池供电设备
- [深度学习][数据集][目标检测]工程车辆数据集16881张15种类别车辆介绍
热门文章
- C++基础-string截取、替换、查找子串函数
- 在Pycharm编辑器中调用getpass模块
- JMF介绍之媒体框架二
- 数据显示Windows Phone市场份额依旧十分稳定
- 恩布开源安卓手机IM,EntboostIM发布1.5.2版本
- iOS VideoToolbox硬编H.265(HEVC)H.264(AVC):1 概述
- C#+WebSocket+WebRTC多人语音视频系统
- Android中文API(115)——AudioFormat
- 计算机组成原理A原是什么,计算机组成原理A
- tensorflow常见问题