渔鱼之辩 —— 兼谈质、门、道以及模式

简介:

记得在以前的博文中说过VS的智能提示就是AOP,被人耻笑过。今天就详细写写,名称就叫“渔鱼之辩”。

 

         依现有的AOP的狭义定义,VS的智能提示不算AOP。正如,按新华字典上的解释,“操”不能算骂人的词。

 

         为了探析VS的智能提示到底算不算AOP,先看看AOP的内涵:

 

·我们对系统有某一方面的关注

·这些关注分散在系统的多个地方

·通过某些技术或方法将这些关注点“织出”、“织入”以集中控制

 

看一个例子:

 

例子1:程序中的魔数

 

程序中魔数分散在系统的各数,将它们提出为 const 变量  static 变量以集中控制。

 

         这算不算AOP呢?有点太轻量级了。正如蚯蚓的神经结不能称为大脑一样。

 

         例子2IDE的智能提示算不算AOP

 

         IDE的智能提示做了什么呢:

         ·我们关注类型的行为和它的字段

         ·类型有哪些行为或字段?这些知识分散在技术文档之中或者代码中或者我们的大脑中。

         ·IDE通过反射或Tag技术或其它技术将这些关注点集中起来,当我们打某个字符或快捷键时展现给我们(织出),然后,当我们选择了一个方法或字段时,自动输出一些代码输出到源码文件中(织入)。

 

         这算不算AOP呢?这个例子比例子2重一点。

 

例子3C#的扩展方法 + IDE 的智能提示

 

·我们对某一或某些类型的行为进行扩展,或者是调用,或者是工具类或工具方法。通过这些扩展,我们可以节省代码量,可以共用以前的代码

·在没有扩展方法之前,上述调用分散在系统的各处。你想知道这些关注点,必须去查找系统中引用的各个类。假定有6个类ClassUtil1, BBBB, HSBDKC, CA, JDF, CSLD 都针对类型T提供了工具方法,想调用这些工具方法,必须采用某种途径得到这6个类的类名,才能去调用这些方法,而这些类的类名分散在系统的各处,想得出,需要花费不菲的代价。

·通过扩展方法和IDE的智能提示,当我们打了这个类型实例的名称之后,打一个“.”,那么那些分散在系统各处的扩展方法就被IDE“织出”了放在我们的面前任我们选用,我们应用了扩展方法之后,编译器在编译时将自动将那些工具方法“织入”进程序。

 

这个例子的重量级又较例子2更胜一筹。这到底算不算AOP呢?

 

来一段维特根斯坦式的话:一棵树称得上树林吗?十棵树在一起,称得上树林吗?一百颗树在一起,称得上树林吗?一千棵树。。。一万棵树在一起呢?

 

《建筑的永恒之道》书中提出质、门、道三个概念:无形之质、有形之门、永恒之道。我对这三个概念以及概念之间的关系进行了篡改(亚历山大原书中是道通过门实现质,而我总觉得道比质更具备目的性,就把道和质换了下位置,并且发现,这样说的更通顺一些。亚历山大的粉丝别扁我!):

 

无形之质通过有形之门来实现永恒之道。

(按亚历山大的表述应该是:永恒之道通过有形之门实现无形之质)

 

看如上三个例子。

 

AOP的三点内涵这是无形之质,而具体对这个无形之质的实现算有形之门,如:例子1中的conststatic;例子2中的IDE的智能感知;例子3中的扩展方法+智能感知;以及AOP的经典实现ASPECTJ。这些实现属于有形之门。通过它们我们可以达到永恒之道:解决问题。

 

如果将AOP仅仅局限于已有的有形之门,那么我们进了这个门,就可能错过其它的门。

 

=========================      小插曲       ===================

看三个例子,轻松一下。

 

例子4

 

雨伞——用时打开,不用时关上,省地方。

 

例子5

 

书本——读时打开,不读时关上。

 

例子6

 

VS中的Region

 

例子4-6应用的是“折叠”模式。

 

=========================      插曲结束       ===================

 

例子7:搜索引擎

·我们对想要在网上查找信息

·这些信息分散在网上的各个地方

·通过搜索引擎技术这些信息索引起来(织出),当我们输入关键词时,返回相关信息。

 

有兴趣的人也可以去琢磨单元测试,琢磨丰田生产系统中的质量控制方法,它们的内核——“无形之质”与上面的例1-3,例7是类似的。

 

好了,上面的例子全是事后诸葛,只有学习借鉴之用,并无多大的建设意义。

 

来个现实点的例子。

 

最近天涯社区涌现出一系列声讨拐卖儿童的帖子,典型如:

http://www.tianya.cn/publicforum/content/free/1/1517383.shtml

 

看到这个帖子,您想到那些建设性的方面呢?

 

我当时是想到了AOP

 

         下面就用AOP的“无形之门”分析一下:

 

·丢失孩子的家长寻找孩子的愿望——这是关注点,这是方面

·丢失的孩子分散在全国各地——这是现实

·通过某些技术或方法将这些关注点“织出”呢?

 

关键就是这个“织出”。

 

通过这些帖子可以看出,现在几乎人人都有手机,大多数手机都能拍照,而大部分人都有较强的道德意识在不付出较大代价的前提下去拯救这些孩子。用手机拍照、然后放到一个网站上集中起来是个很简单的“织出”。

 

丢失孩子的家长可以浏览这些图片来判断是否是自己丢失的孩子。

 

然而,当照片很多时,这种浏览是不具效率的,需要提供更有效的“织出”关注点的方法。这就需要用到图像搜索和人脸识别技术。

 

家长也可以上传自己孩子的照片,然后志愿者看见可疑人可以拍照下来,同家长上传的照片进行比对。

 

这样的系统如果建立且成功运转起来,就是一个有形之门。

 

通过有形之门来达到永恒之道——解决问题。

 

最好,来一首和本文无关的歌曲《忽悠一万年》

http://www.tudou.com/programs/view/sLQebm0XsAc

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2009/05/19/1459814.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)

相关文章
|
SQL 存储 监控
dts性能监控与调优
dts性能监控与调优
247 1
|
10月前
|
网络协议 算法 数据库
OSPF中的Router LSA详解
OSPF中的Router LSA详解
387 4
|
3月前
|
安全 Java 编译器
Java 校招面试题目合集及答案 120 道详解
这份资料汇总了120道Java校招面试题目及其详细答案,涵盖Java基础、JVM原理、多线程、数据类型、方法重载与覆盖等多个核心知识点。通过实例代码解析,帮助求职者深入理解Java编程精髓,为校招面试做好充分准备。无论是初学者还是进阶开发者,都能从中受益,提升技术实力和面试成功率。附带的资源链接提供了更多学习材料,助力高效备考。
110 3
|
SQL 前端开发 Java
淘东电商项目(74) -秒杀系统(库存超卖解决方案)
淘东电商项目(74) -秒杀系统(库存超卖解决方案)
245 0
|
缓存
鸿蒙实现获取应用缓存和清理缓存
鸿蒙实现获取应用缓存和清理缓存
724 0
|
SQL 安全 前端开发
如何做好研发FO角色?
如何做好研发FO角色?角色定位包含哪些能力要求和权利责任,项目过程中包含哪些核心里程碑节点以及交付物,FO对于项目过程管理需要具备哪些把控原则,针对风险和问题的治理手段和干预策略,协作过程的核心动作
1640 0
如何做好研发FO角色?
|
网络协议 前端开发 数据处理
终于有大佬把TCP/IP协议讲清楚了!面试再也不怂面试官提问了
不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。
|
网络协议 算法 网络虚拟化
【计算机网络】数据链路层(超多图详析)
之前学习了原理体系结构中的物理层,也写了非常详细文章。如果没有看可以先去学习一下,这样有助于我们对数据链路层的学习。
【计算机网络】数据链路层(超多图详析)
|
数据采集 算法 数据处理
Modelscope-FunASR平台提供了高效的处理能力
Modelscope-FunASR平台提供了高效的处理能力【1月更文挑战第11天】【1月更文挑战第51篇】
462 1
|
网络架构
计算机网络:网络层(无分类编址CIDR、计算题讲解)
计算机网络:网络层(无分类编址CIDR、计算题讲解)
640 0