array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 更佳的封装之路--面向对象的封装思想 - 爱码网

因为最近用面向对象做迷宫,思考了许多问题。然后今天又看了系统分析的一些书,有了若干领悟,在此拿出来与诸位博友分享。

 

关于封装的领悟:

key 1。封装的目标:封装易变动的部分。(前人的经验总结)

key 2。尽可能精确地定位变动。(威老的升华)

 

封装的好处就是可以减少变动对整个系统带来的影响,并且可以有效地控制系统的复杂程度。

PC机的封装就是一个很经典的例子,我们只需要知道电脑由CPU、内存、主板、硬盘……组成,而不是去探究PC是由什么或非门、全加器、乘法器……之类的东西组成。

当我们的内存需要加大时,不需要拔掉原有的内存,只需要加上另一条内存即可,扩展的同时又不影响原有的内存。内存坏了,只需要拔掉它,换上另一个好的即可。如果没有封装,我们就把内存从1Gb升级到2Gb就必须把整个PC机拿去工厂里焊上1Gb的内存颗粒。若不封装,也就没有所谓的CPU、内存之类的概念,PC坏了,就得一个一个电路地排查过去,数亿个晶体管以及数不清的线路要查到哪一年去?

威老的迷宫第二季里,我提取并封装了RouteChecker,因为这是一个很有可能发生变动的地方(可能会增加其他方向的Check,NortheastChecker、SoutheastChecker等等),在我封装了之后,这个地方的变动对Explorer类的影响就大大减小了。但是,在文章的最后我又发现了2个很严重的问题:

1。我需要对Walk进行同样的封装,工作量十分巨大。

2。就算我封装好了Walk,当我需要增加其他的方向的Check时,也会需要增加NortheastWalk、SoutheastWalk…显然这里存在着很严重的问题。重复了。

那么问题究竟出在哪里?

经过排查,我发现问题就出在RouteChecker并不是变动的具体地点,变动发生在RouteChecker的方向上,其实只有方向发生了变动!所以我们要做的是封装方向!

好比我封装时候把专管计算的CPU给忽略了,而另外给硬盘配备了一个计算模块,那么接下来,我也必须给内存、主板、光驱……这一大堆的东西也各配备一个完全一样的计算模块,这样的设计显然烂到无可救药。

Very Good 找到了问题所在,接下来要办的事情就简单了,修改模型!

很快我便到以下模型:

更佳的封装之路--面向对象的封装思想

 

系统几乎简化了一倍!复杂程度大大降低!实实在在地尝到了面向对象的甜头。

 

到这里我真是越来越佩服我自己了。。。

精确定位变动

大家想必也已经产生共鸣了吧!

作者:威老 From cnblogs

因为最近用面向对象做迷宫,思考了许多问题。然后今天又看了系统分析的一些书,有了若干领悟,在此拿出来与诸位博友分享。

 

关于封装的领悟:

key 1。封装的目标:封装易变动的部分。(前人的经验总结)

key 2。尽可能精确地定位变动。(威老的升华)

 

封装的好处就是可以减少变动对整个系统带来的影响,并且可以有效地控制系统的复杂程度。

PC机的封装就是一个很经典的例子,我们只需要知道电脑由CPU、内存、主板、硬盘……组成,而不是去探究PC是由什么或非门、全加器、乘法器……之类的东西组成。

当我们的内存需要加大时,不需要拔掉原有的内存,只需要加上另一条内存即可,扩展的同时又不影响原有的内存。内存坏了,只需要拔掉它,换上另一个好的即可。如果没有封装,我们就把内存从1Gb升级到2Gb就必须把整个PC机拿去工厂里焊上1Gb的内存颗粒。若不封装,也就没有所谓的CPU、内存之类的概念,PC坏了,就得一个一个电路地排查过去,数亿个晶体管以及数不清的线路要查到哪一年去?

威老的迷宫第二季里,我提取并封装了RouteChecker,因为这是一个很有可能发生变动的地方(可能会增加其他方向的Check,NortheastChecker、SoutheastChecker等等),在我封装了之后,这个地方的变动对Explorer类的影响就大大减小了。但是,在文章的最后我又发现了2个很严重的问题:

1。我需要对Walk进行同样的封装,工作量十分巨大。

2。就算我封装好了Walk,当我需要增加其他的方向的Check时,也会需要增加NortheastWalk、SoutheastWalk…显然这里存在着很严重的问题。重复了。

那么问题究竟出在哪里?

经过排查,我发现问题就出在RouteChecker并不是变动的具体地点,变动发生在RouteChecker的方向上,其实只有方向发生了变动!所以我们要做的是封装方向!

好比我封装时候把专管计算的CPU给忽略了,而另外给硬盘配备了一个计算模块,那么接下来,我也必须给内存、主板、光驱……这一大堆的东西也各配备一个完全一样的计算模块,这样的设计显然烂到无可救药。

Very Good 找到了问题所在,接下来要办的事情就简单了,修改模型!

很快我便到以下模型:

更佳的封装之路--面向对象的封装思想

 

系统几乎简化了一倍!复杂程度大大降低!实实在在地尝到了面向对象的甜头。

 

到这里我真是越来越佩服我自己了。。。

精确定位变动

大家想必也已经产生共鸣了吧!

作者:威老 From cnblogs

相关文章: