编码设计有很多思路,都是在简化映射实际问题时遇到的问题。
之前和别人交流,得到一句“把它放在同一个地方好维护”,相同的功能只出现在一个地方。就会出现代码的聚合设计,也就是一种通用的功能索引,或者说面向对象的思想。
首先程序可以被观察成,计算、存储、缓存、链接,这是代码打交道的四个方面。由它组成了一个球连接球的程序,每一个球是一个缓存中的程序体。也就是代码编写时考虑运转时候占用的计算量,考虑分配的堆栈缓存和加载方式,考虑数据在球体之间的传递方式以及数据的存储。计算量的预估需要知道代码实现的底层逻辑,被解释成的机器语言后会形成的工作效率,每种语言解释的同一个逻辑的过程不一样,生成的处理方式不一样。堆栈的使用方式每种语言也有不同的处理和整理方式。等。
球链接球的立体空间中,每个球代可以代表一块大大小小的业务功能。他们就像实际业务中的部门和部门之间的协作,也可以是直接人和人之间的协作。每份业务被抽象成交给一个球和球连接的集体实现。每个细分的可聚合的功能做成一个球。球占用的堆和栈的空间,代码占用、静态变量占用、栈里线程方法栈的占用以及堆里对象数据的占用,是球体的抽象大小。它会随着访问量的增大而延伸扩大,在抽象空间中,在一定扩大范围内并不会影响球体之间链路的通信。如果被访问量撑得容纳不下,现存的虚拟程序内存通用大小不能承受,就考虑分割球体内的业务。在虚拟内存范围内,可以优化功能的分配,统筹视角下管理各个编码功能的责任归属。让合适功能的代码实现,分配到合适的球体上。
这种球体的内存拓印,建立在合理设计编码的基础上。每一个功能除了可以实现本身,还会考虑可拓展和稳定性。比如重要订单信息即使创建量大访问快,也需要抵达底层数据库的存储。有些数据不是那么重要,更多是一种临时显示,直接放在缓存中就可以,丢了也没有很大影响。在立体的业务设计中,球体才能得到完善的表达。在业务角度它是连接业务各个小模块的球,通过处理方式连接,就像做一份业务要跑好几个场所,跑完一圈算是完成。在计算机硬件空间里它也是一个球,能找到和业务视角一一对应的编码、业务占用的场地大小和同时可容纳的访问数量。
球体考虑是清晰的、容易实现和编排的。球体在内存中的拓印就像把整个空间压扁,然后把错落的扁圆推挤到一个规则的长条里。球体内的业务,和球体内的代码实现在硬件中布排,是直接映射。