Skip to content

0630对数据流向控制、数据传递、数据获取、数据加工、以及高耦合低内聚折叠的探究,重点思考折叠的原因

ziyouzy edited this page Jun 30, 2020 · 2 revisions

高耦低内是重要的面向对象编程思想,这篇文章会探究这一思想的应用:

在某一个中或高复杂程度的功能性函数(如main函数,或类似processkeeper这样的函数)内部,这类函数往往会去做很多事(如初始化数据库、开启监听、开启进程守护函数携程)或者说,任何项目中,都有这类函数,他所起的作用都是将多种功能串联在一起,不,不能这么说

应该这么理解,任何函数,函数体内部往往都包含两种诉求:

一种是将多种功能串联在一起(向串珠子一样)

一种是制作某个珠子(做好后再将它和整体穿在一起)

这两种诉求可以在一个函数中同时存在,也可能只存在某一种。

这里引出一个重要的思想:如果只存在某一种,则属于简单函数,如果同时存在,属于复杂函数。

简单函数往往不需要去考虑去做高耦低内折叠,复杂函数则需要。

简单函数的存在往往都是复杂函数需要进行高耦低内折叠后的产物,如initredis()。

深化探讨复杂函数:

也可以说复杂函数其实是简单函数的调度函数,简单函数在复杂函数内部排队执行。

本质上,是一个复杂的面向过程风格函数,通过高耦低内折叠,变成了一个主函数,一个复杂函数和若干个简单函数

但是同时也可能折叠出新的复杂函数,如processkeeper()折叠出的assertionAndProcessMes。这是因为折叠的原因不同:

!!!折叠的原因有如下几种!!!

第一种是调用独立的功能模块处理事物并获得结果实体,如initredis(),监听TCPsocket,等

第二种是有需要开启携程的需求

第三种是有需要进行数据流向、传递控制的需求,如Processor.processkeeper()内部的assertionAndProcessMes()

第一种可以归类为数据获取、数据加工,往往可以折叠出简单函数

第二种可以归类为数据传递;第三种可以归类为数据流向控制,往往会折叠出复杂函数

总之写到这里是为了让自己深化理解什么情况之下需要进行高耦低内折叠,尽量实现在以后的项目中,面对各式的需求见怪不怪。

======

高耦低内折叠只是一种书写技能,真正高阶的能力是拥有出色数据流向控制意识,前者是后者的基础。

这里有个先后顺序:

1.函数体过于复杂(功能多,代码段的面向过程属性太强)

2.需要面向对象(价值观)的高耦和低内聚(方法论)来解决这一问题

3.解决问题的过程中,对不同的代码段匹配不同的折叠方式

4.折叠方式包含但不限于如下几种:

a1.数据获取

a2.数据解析

a3.数据加工

b.数据传递

c.数据流向控制

以及其他

最终实现函数体从面向过程到面向对象的转化。

a虽然会折叠出简单函数,但是往往会去实例花其他包的实体

b会涉及到开启携程

!!!而c最考验一个程序员的数据流控思想,折叠本身就是一种思维、意识、逻辑上的能力,数据流控同样如此,两者会同时考验一个程序员的逻辑思维!!!

!!!是锻炼、考验一个程序员自身编程意识、逻辑、能力的重中之重!!!

Clone this wiki locally