`
canonical
  • 浏览: 360315 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

面向集合的框架设计

阅读更多
    判断和循环是程序中最基本的语句结构。而在vonNeumann体系架构下,循环是对集合进行操作所需的基本步骤。一个有趣的事实是,函数式语言所宣称的 生产力的来源很大程度上在于集合操作的便捷性。在数学中我们通过张量分析,泛函分析等可以清楚地意识到集合之间的相互作用是可抽象的,是可以独立理解的, 即我们可以在不涉及具体基元结构的层面上独立的定义并执行集合运算。如何将这种概念独立性在框架层面展开是一个非常深刻的命题。
    在基元结构上应用基础操作p(d)这一微观场景一般情况下是容易理解并实现的, 但通常程序中所定义的大量边界是基于集合变量的, 因此很多代码都是封包和解包操作, 在层层嵌套的循环结构深处我们才能发现真正具有业务价值的基元结构. 将集合操作提升到系统层,减少或简化在应用层需要显式编制的循环结构是框架设计层面需要考虑的问题.
    一个最基本的方法是尽量定义通用的同构操作, 避免构造中间集合. 例如前后台之间通过json等通用协议交换复杂结构的对象, 避免定义特殊的中间处理过程. 一个与之相配合的重要技术手段是通过类查询语句(描述方式)直接构造特定的集合. 例如prototype.js中提供的$$('div div.myclass').each(op)这样的处理方式显然要比在循环过程中基于特定条件过滤要方便的多. 而在AOP操作中切点的集合定义方式也是其提供的核心价值之一. 与集合操作相适应的一种代码风格是流式设计(stream), 这正是jQuery试图鼓吹的主要价值(虽然我个人认为它有些走极端). 流式设计的核心结构实际上是 x += dx, 它不需要集合是一次性构造的, 便于支持一种逐步部分修正的概念模型.
    为了支持集合的隐式构造, 我们需要以通用的方式定义元素到集合的组装规则. 在Witrix平台的前台js框架中我们定义了由独立的html组件到复合查询条件的拼接规则, 定义了由每个html组件的数据校验函数到整个form的数据校验函数之间的组装规则, 定义了由单个html组件提交参数到整个form提交参数之间的组装规则. 在Witrix平台的标准界面上, 框架本身的编制基于js.query.buildCondition(frmQuery), js.validate.validateForm(frmUpdate), ajax.addForm(frmUpdate)等少量集合操作进行, 在不同的应用场景下, 我们只需要关心每一个字段如何显示, 提交哪些属性, 而由系统负责将它们自动组装并在后台进行分派. 面向不同的应用, 框架代码不需要做出任何修改, 确保了系统结构的可重用性.
   Witrix平台的后台处理模型中定义了实体化过程, DaoWebAction基于CRUD等原子操作定义了批量提交, 数据导入导出等复合的甚至是嵌套的集合操作. 在不同的应用中, 我们通过修改bizflow文件中<action id="ViewDetail-default">, <action id="Update-default">等针对单实体的业务规则即可适应不同的业务场景, 而不需要为特定的应用重复编制集合处理过程.
    面向集合+通用组装规则是Witrix平台设计中采用的基本设计手法之一, 它使得我们在一般应用中只需要考虑单实体,单字段等基元结构上发生的特定业务, 大大简化了系统构造过程. 但是也需要认识到从个体到集合的扩张(p(d) -> P(D) )是非平凡的, 集合比个体的简单加和要更多, 为此架构中需要保留对集合边界的识别能力, 例如需要允许在数据导入完成之后执行特定的业务规则而不是仅仅针对每一数据行执行业务规则.
分享到:
评论
49 楼 Julien 2008-11-25  
现实世界领域的问题不是不需要工具,而是需要选对工具用好工具。
随意地使用一些轻佻的臆想去描述我们所未知的东西固然很轻浮,随意地使用一些轻佻的臆想去描述我们已经在面对的现实也未必就是怎样高明的姿态了。
似乎变成口水了,我逃……
48 楼 hurricane1026 2008-11-25  
Julien 写道
Trustno1 写道

一个有趣的事实是,古代中国的大多数数学家的任务只是为了解决现实世界中的测算问题,而从毕格达拉斯以降到牛顿解决数学问题的主要目的就是为了展示神迹或者荣耀上帝.然而他们之间的成就高低却不能以道里记.

嘿,我虽然对科学史没有什么研究,也不会你这么说了我就这么相信哩。
帕斯卡能打,一辈子离开神学的日子没有几年,光那几年的成果就打绝人寰。
好歹人家还是要离开神学才能从事研究不是?
一根筋对于研究学问很重要,这点我承认,但这是研究领域,只对一个理论体系内部负责,而不是对现实世界负责
但到了应用领域,面对一堆只对其内部负责的理论体系,和一个现实世界领域的复杂问题的时候,就没有神了


建议读pascal同学著的思想录
47 楼 Trustno1 2008-11-25  
引用
嘿,我虽然对科学史没有什么研究,也不会你这么说了我就这么相信哩。
帕斯卡能打,一辈子离开神学的日子没有几年,光那几年的成果就打绝人寰。

不专门研究神学就等于不相信上帝么?

引用
一根筋对于研究学问很重要,这点我承认,但这是研究领域,只对一个理论体系内部负责,而不是对现实世界负责
但到了应用领域,面对一堆只对其内部负责的理论体系,和一个现实世界领域的复杂问题的时候,就没有神了

赫赫,在第二次数学危机之前,即便是微积分的开山鼻祖牛顿也不知道怎么用他手上那个粗糙的流数法去求他书中的那些行星的椭圆轨道.高斯着重考虑无穷级数收敛性的时候,Jacobi居然嘲笑他说"向高斯那么严密我们没有那么多时间"。但是这种轻率迟早要付出代价.拉普拉斯听完柯西发表的关于无穷级数收敛性的论文后,回家的第一件事情就是检查自己的5大卷<天体力学>,经过几天艰苦的努力最终还是庆幸自己所用的无穷级数都是收敛的.
我们现代人或许已经无法去体验拉普拉斯当时的那种诚惶诚恐的心情.因为现代的数学知识绝大部分只是和扳手起子差不多的工具而已.我们之所以不需要去研究那些严密的理论体系而只关心数学工具的实际应用,只是因为这些数学知识的基础已经被无数的天才们严格的探讨过,而不是因为现实世界的领域本身无需严密的理论体系,也不意味着我们可以随意地使用一些轻佻的臆想去描述我们所未知的东西.站在巨人肩膀上的人,可能只是一个侏儒.
46 楼 Julien 2008-11-24  
Trustno1 写道

一个有趣的事实是,古代中国的大多数数学家的任务只是为了解决现实世界中的测算问题,而从毕格达拉斯以降到牛顿解决数学问题的主要目的就是为了展示神迹或者荣耀上帝.然而他们之间的成就高低却不能以道里记.

嘿,我虽然对科学史没有什么研究,也不会你这么说了我就这么相信哩。
帕斯卡能打,一辈子离开神学的日子没有几年,光那几年的成果就打绝人寰。
好歹人家还是要离开神学才能从事研究不是?
一根筋对于研究学问很重要,这点我承认,但这是研究领域,只对一个理论体系内部负责,而不是对现实世界负责
但到了应用领域,面对一堆只对其内部负责的理论体系,和一个现实世界领域的复杂问题的时候,就没有神了
45 楼 Trustno1 2008-11-24  
Julien 写道
我看过拿哲学来解说现实世界的心理学问题的书,结果是不管怎样的大师和神仙,不管怎样的精确严密自我圆满的逻辑体系,只要拿到现实问题上,就只有在极端限定后的场景里才能生效,对于大部分现象和问题是无法解释,南辕北辙的,这个时候墨守一个空中楼阁的理论工具来强行分析和制定对策出来的效果,绝对不可能比一个街道大妈靠生活经验作出来的分析和对策要好。
当然心理学的场景比抽象结构要复杂艰深的多,但是就一般而言,任何理论框架都只是工具而不是最高纲领,根据实际需要选择各种工具组合解决问题,而不是支持一个最高真理经受试炼展示想神迹,这才是一般解决某个实际问题的正确思路。任何抽象过后构建而成的理论体系【一定】都已经失真了(对于这个世界失真,当然对于这个理论自身而言还可以是继续完美无缺的),都用不着当作神来膜拜,混沌无规则的现实世界才是高于一切的。

一个有趣的事实是,古代中国的大多数数学家的任务只是为了解决现实世界中的测算问题,而从毕格达拉斯以降到牛顿解决数学问题的主要目的就是为了展示神迹或者荣耀上帝.然而他们之间的成就高低却不能以道里记.
44 楼 Julien 2008-11-24  
我看过拿哲学来解说现实世界的心理学问题的书,结果是不管怎样的大师和神仙,不管怎样的精确严密自我圆满的逻辑体系,只要拿到现实问题上,就只有在极端限定后的场景里才能生效,对于大部分现象和问题是无法解释,南辕北辙的,这个时候墨守一个空中楼阁的理论工具来强行分析和制定对策出来的效果,绝对不可能比一个街道大妈靠生活经验作出来的分析和对策要好。
当然心理学的场景比抽象结构要复杂艰深的多,但是就一般而言,任何理论框架都只是工具而不是最高纲领,根据实际需要选择各种工具组合解决问题,而不是支持一个最高真理经受试炼展示想神迹,这才是一般解决某个实际问题的正确思路。任何抽象过后构建而成的理论体系【一定】都已经失真了(对于这个世界失真,当然对于这个理论自身而言还可以是继续完美无缺的),都用不着当作神来膜拜,混沌无规则的现实世界才是高于一切的。
43 楼 canonical 2008-11-23  
chyy001 写道

数学分为抽象数学与具体数学,计算机技术涉及的是具体数学,数学是理论的,只是提供理论的指导,告诉你怎么做,无法具体到实现,数学是更高层次的抽象,用数学可以很好的推导

这个区分只怕很少有人会认同。
42 楼 chyy001 2008-11-20  
数学分为抽象数学与具体数学,计算机技术涉及的是具体数学,数学是理论的,只是提供理论的指导,告诉你怎么做,无法具体到实现,数学是更高层次的抽象,用数学可以很好的推导
41 楼 hotman_x 2008-03-06  
嘿嘿,说句不合时宜的话,一个事物“完美”是因为它已经没有价值,没有改进的必要。费力看到0点以后,发现是一帮观点差不太多的家伙在喷口水。
站在没有观点的立场(或者不表明观点的立场)总是最安全的,永远立于不败之地。
这里有人说“XX语言绝对能有效解决所有其它语言能解决的问题”吗?没有。因为连汇编(如果不考虑微指令的话)也不能这么说。
40 楼 element8325 2008-02-09  
留个名先,过几年再看!
39 楼 bei-jin-520 2008-01-17  
没意思。整个一哲学家在讨论。
38 楼 rubynroll 2007-12-30  
耳目一新啊,这样的讨论有时候看起来很爽!口水部分可以掠过,仔细品位实际上每个人想表达的思想都很有深度,只是有时候太挖细节了,导致最重要的信息表达不够那么有效。

Lich_Ray的关于“要先在理论上得到证明...”的说法很有意思,我记得电子科大有个“道系统”嵌入式实时操作系统,可以用数学推演证明(实时性?完备性?),印象深刻。回头看Lich_Ray同学说的话,真希望此系统能够辉煌。不过,我也并不认为没有完备理论证明的系统就没有必要搞,毕竟大部分我们做的东西是没有机会先得到数学证明的,完美的东西固然好,不完美的东西也很有价值。

37 楼 crazyox 2007-12-27  
......
感觉自己来自另一个世界, 好功力呀!  先收藏了, 等以后能看懂的时候再说!
36 楼 SilenceCliff 2007-12-12  
T1的陈述更能 使我心悦诚服。或许个人阅读结构和解读视角的问题。

Anyway,本质这种东西,耳熟能详之时,扑朔迷离之始。

35 楼 hampster 2007-12-12  
有点发晕,优雅又易懂的设计不好吗?
34 楼 javavsnet 2007-12-11  
good!
33 楼 canonical 2007-12-11  
引用
good!

我的原话不是这一句。谁在后台改了这个帖子?
32 楼 jelly 2007-12-11  
确实看不懂,为什么大家都喜欢说一些别人看不懂的东西呢?
将简单的逻辑非要套上学究的术语,那不是好像孔乙己一样。
我认为将复杂的道理用通俗的语言能够表达出来才是大师的境界,才是我们追求的境界把,不然岂不是曲高和寡,身在高处不胜寒?
31 楼 canonical 2007-12-10  
   我所阐述的只是一种视角的转换,它不是说必然给你提供某种超越当下的能力,而是说以一种不同的眼光看待所有的一切。视角变换后,我们发现了一些新的命题,而在原先的视角下在我们的话语体系中原本是无法表达这些命题的。串行程序假设了只有1颗CPU, 而函数式语言假设了可以有无限多个CPU, 你不觉得1至无穷之间缺点什么吗。你感觉不到现在的软件领域有什么不平凡的例子,是吗?这说明你创造的时机来临了。你可以创造一些东西把1至无穷之间的空白补齐,概念空间是连续的。
  整个Witrix就是针对视角转换之后一次不平凡的技术尝试,当然限于商业机密,我不可能阐述很多。我所能够表达的都已经写在了我以前的blog中,有兴趣自己去看吧。
30 楼 javavsnet 2007-12-10  
我想我刚刚明白了canonical同学/前辈的意思。canonical同学是说某种通用语言,对于某个领域问题的描述能力是不够的。在有了两个“某”以后,这句话是无懈可击的真理。但是这句话对于我来说太泛泛了,基本上是没有用的。canonical同学的10个线程的例子忒通俗易懂了,也忒不够深入了,没有讨论的余地。我很想看到更复杂更深入的例子,说明通用语言的结构在描述某些问题的时候是不够了,例如T1说的轻量级线程通讯的例子(也许我没有集中起足够的注意力,没有精确的描述出来),这里T1说的问题只是一个例子,我指的不是这个例子,是类似这个例子的,复杂的,需要深入思考才能得出结论的例子。这个要求可能有点过分,我的本意就是想通过讨论长学问。

canonical同学的另一个观点,结构是独立于语言的,可以抽象出通用的结构来描述领域问题,这个观点实在一些,不过我还是很贪婪的希望能看到更多的例子说明。用你们的增强了的extends算子在描述领域问题的时候究竟有什么直观的好处,这样俺更容易理解。

相关推荐

Global site tag (gtag.js) - Google Analytics