一、对象的遐思

在五个月前完成专业这块的学习规划后,没几天我就抛到了脑后,现在终于可以把精力投放过来了。按照规划,我们先从Java基础这一块开始。

二、面向对象

当我看《Java编程思想》中的面向对象这个词时,我的脑海里浮现的画面是,成天new对象的你,然而并没有对象。。。
那我们如何定义她呢。
直白点来说,对象=属性+行为,她长什么样子,这是属性,在做什么,这是行为,用Java中的术语,我们称为数据+方法(或称函数)。
而把对象抽象成类则可以表示成类=字段+方法。
我们再引入一个概念,业务逻辑(需求),所谓面向对象编程,就是将业务逻辑转化为对象之间的的相互调用过程和结果。
同样的函数式编程,模块化编程也是如此,就是将业务逻辑转化为函数(模块)之间的的相互调用过程和结果。

二、对象、分类与架构的相互独立

既然如此,那么在这一个过程中,非常关键的一步是如何合理的封装字段和方法,这个字段,这个方法应该归属那一个类,谁来调用谁,是需要经过思考的,我们可以通俗的称这一过程为分类,换用编程术语,那就是类的定义。

在做数据统计中,第一步往往是对数据分类;在重构的工作中,对字段、方法、类的再封装,是非常重要的手法;从Java的包、程序模块化到微服务的业务组件等等的划分过程中,通过合理的范畴界定完成建模也是架构师们关注的问题。

那么,如何更好的完成这一步呢,思考的方向有很多,我这里引入一个麦肯锡的分类思考框架MECE里面一个原则-相互独立。

MECE分析法,全称 Mutually Exclusive Collectively Exhaustive,中文意思是“相互独立,完全穷尽”。 也就是对于一个重大的议题,能够做到不重叠、不遗漏的分类,而且能够借此有效把握问题的核心,并成为有效解决问题的方法。

将相互独立这个原则引入到编程里,我认为可以从上一段中抽取两个基本点思考,不重叠和相互独立。

第一,不重叠,在我们这边其实有一个更广为人知的DRY原则(Don’t Repeat Yourself),即在多个对象,多个类,多个模块之间,尽可能的不重复内容。

第二,相互独立,那么,如何做到相互独立呢,在这里我想引入一个概念,对象关系映射(ORM),这本身是数据库与对象之间的关系映射。但放在这里做一个迁移思考,这就是对象与业务实体的关系映射。
我们会自然的把用户映射到用户的对象上,把商品映射到商品的对象上,他们的定义对应着各自的类,有了这一对应关系,自然就不会把用户的属性,放到商品类里面了。

除了这一类独立逻辑,往上推到系统层次,还会有公司的组织架构和程序系统之间的独立映射。比如在小的电商系统中,往往只有一个开发团队,那么商品、订单等会放到一个系统里。公司大了,组织拆分了,商品和订单划为两个团队维护,自然就需要拆为两个系统。或许我们可以用一个术语来形容-组织决定架构,也就是将组织之间的范畴界定逻辑转化为系统之的范畴界定逻辑,当然,如果再引入业务,我们还可以引出业务决定组织这一条件,即业务->组织->架构。

总而言之,不管是对象也好,系统也好,他们的相互独立的方式,原则上可以由业务的关系映射而来。

三、总结

本文一开始,是看《Java编程思想》第一章-对象导论时,展开了一些思考,但没想到,后面让我把MECE、DRY、ORM等不同领域的概念关联了进来,形成了一篇整合思考的文章,或许是思考的本身是相通的。

参考资料

对象部分:《Java编程思想》
MECE部分:《金字塔原理》
业务组织架构部分:《聊聊架构》

Comments
Write a Comment