<返回更多

写了十年代码,面向对象还是一知半解,这也不能全怪你

2022-01-12    腾飞说架构
加入收藏
写了十年代码,面向对象还是一知半解,这也不能全怪你

 

一、先说几个现象:

 

1.1

我曾经的团队中的几位优秀的架构师,写框架代码写的很不错的那种。他们为什么能写出好代码?为什么能做出复杂系统的设计? 他们自己好像也不能说出个所以然来。 我把这称之为意识流。(也就是大概是凭经验,靠感觉)并且,这种凭经验的说法也被不少DDD的专家大佬用来回答如何掌握领域建模能力上。

 

1.2

或者你也有一种感觉,你知道一些好的设计原则和模式,但是你不会用。 另外一种感觉就是UML的图你都会画,但是如果让你从0开始设计一套系统,你还是不知道如何开始。

 

1.3

只能凭经验这种说法,对于我一个管理者来说。它意味着不可快速培养,无法规模化;只能任由其自由生长,通过一个又一个项目来加强和验证一个人是否拥有良好的设计能力,是否有架构师的潜质 。 我始终无法接受这个结果。 虽然之前我也是一个经验和感觉型选手。

 

二、转机

 

2.1

转机的上半部分来自于我看了一书关于架构的神书《系统加构——复杂系统的产品设计与开发》 豆瓣评分达 9分。通常在8分以上就是值得一读的书了,9分的书读懂一本对某件事情的看法可能就会发生一些根本性的改观。这本书确实很难懂,至少我强行安利给了我身边的很多人,并且还组织过一段时间的读书分享小组。 这本书的作者对于架构的本质 ,以及如何来做架构是非常深的。虽然这本书的难懂确实让很多人放弃了,但我始终认为坚持看完3遍以上你对架构这件事情会产生很大的改观。

 

2.2

上面那本书虽然把架构的本质讲清楚了,但是并没有降低多少做架构的复杂度。直到我通过这种书里面用的概念建模语言OPM 找到了另一本书《基于模型的系统工程——综合运用OPM与SysML》 ,怎么说呢,我当时也是震惊的。因为这里面是这么说的:

 

功能是整个模型由此逐渐演变的种子。这条原理可能违反直觉。因为许多工程师倾向于从结构——对象、系统包括的实体,而不是功能开始建模。

 

也就是说它是从找到关键过程开始的,这有一种好像回到面向过程的方法里面去了。要知道在《面向对象分析与设计》里面,格雷迪大佬明确地表示这种结构化的设计过程是不可取的。

 

2.3

以公交车载客为例,如果是用面向对象的方式描述,就会把整个系统分为公交车,司机,乘客,车站等,然后分析它们在整个系统运作中的互动关系,关注的焦点是对象;而如果是面向过程,则会把整个从过程拆解为“开始跑路线-载客-启动-到站”,关注的焦点是过程。

 

面向对象的建模(当然,这是静态结构的建模,如果要对动态行为进行建模,我们还需要一个时序图来表示)

写了十年代码,面向对象还是一知半解,这也不能全怪你

 

我们可以用乘客和司机为主体找到这样几个关键过程。(有人可能会发现这跟UML里面的用例图是很像的)

写了十年代码,面向对象还是一知半解,这也不能全怪你

 

是的在OPM 里面会把角色也当成一个对象,它的类型是主体对象。主体对象作为一个人类对象操纵一个过程;但是如果接下来的操作可能会让你出乎意料了。

写了十年代码,面向对象还是一知半解,这也不能全怪你

 

当然我们通过一个“过程”,它可以作为一个抓手或者推导,帮我们很自然地找到相关的对象。比如:

以乘客的上车和下车过程作为推导,你会找到什么?

 

三、OO VS OP

 

OO我们说的是面向过程,但是这里的OP 不是面向过程。而是对象过程 。OPM它的全称叫做Object Process Methodology 对象过程方法。是由以色列理工学院的Dov Dori教授研发出来的,它的目的是将面向对象的图表和面向过程的图表综合到一套方法中,更方便对系统架构进行描述。所以你看到上面将对象与过程放到了一张图里面。

 

它没有改变OO里面关于抽象、封装、模块化与层次的本质 。而区别于OO里面仅通过在总是域中找名称的形式来进行类的抽象,坦白讲这有点像老师跟你说你自己想一下。虽然这个道理很深奥,但是可能很难参透。

 

而OPM给我们带来的是找到关键过程,然后通过关键过程的链接(主体对象、工具对象、输入对象、受影响的对象)等,为我们搭建了一个桥梁,能够帮助我们降低抽象的门槛。并同时能够让我们利用OO的思想中的那些本质元素:抽象、封装、模块化与层次。 (OPM对于层次的建模不需要像UML那样分为多张图)

 

四、这是广告

 

我在我们一期功能架构训练营中将架构过程与OPM相结合,打造了一套科技学落地架构设计过程与方法。同学学完之后是这么说的:

学习这个打开了我的新世界 ,原来这个还有方法论。我也有下载你说的那个系统架构:复杂系统的产品设计与开发,用琐碎的时间看了前面2张,后面就扔掉了。从投资与回报来说,你的课程确实性价比特别高。

在前几天我还没有意识到虽然这个过程是已经存在的,但是它之前是被应用在更广泛的系统设计上(比如硬件或者其它系统),但是在软件设计领域,可能还没有。(如果有的话麻烦告诉我- -、) 想想这个过程可能拯救国内600万被OO搞的头大的程序员于水火之中,这件事情就值得我好好地去推广。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>