Meta
VILIC13:37 - 02.20 2012
浅谈Web程序设计中的面向数据的编程(DOP)( 16 responses )

所以说, 趋势就是趋势, 并不在于谁提出来, 该有的东西自然便会有. 我不知道我们这一代人是否算是见证了DOP的诞生, 但至少在这些年, DOP被用得越来越多了.

说到这个, 首先想提两点. 一个是之前众所周知的变成模式, 面向对象编程(OOP). 对与我来说, 面向对象在我的代码中扮演了相当重要的角色. 它让程序内部的交流变得更加清晰, 提升了程序的可读性, 降低了出现bug的概率. 在有些应用上, 到目前还是不能替代的. 另一个是今后Web编程的发展, 我目测会有几个大方向: 1. 基于Canvas或CSS3的Web游戏. 2. 功能复杂的Web应用程序(如在线办公). 3. 以内容呈现与交互为主的Web页面(如SNS). 只所以想要提这两点, 是为之后将要说到的OOP的局限性, 和DOP的应用范畴做铺垫.

那首先说说, 什么是DOP. 老实说, 我并非是从这个名字开始接触这个概念的, 而是从很多Web页面的改变上开始思考这个问题. 不过很自然地, 使用了同一个词语来描述这样同一个概念. 其实其中有一点YY的成分, 但我想也应该八九不离十.

如果说OOP让人们只用关心如何去调用一个功能, 而不用关心功能的实现的话, 那么DOP则只用人们去关心一个模块/对象所管理的数据, 而不用关心这些数据的改变会对其他模块/对象造成什么影响. 当然, 对自己的影响还是要关心的. 其实细想, 在一些高级编程语言中, 对象的属性就是一种简单地DOP模型. 但显然, 它是局限在某一个对象上的. 然而很多时候, 同一个数据在多个对象上是公用的, 这或许就是DOP和传统OOP一个很大的区别, 也是传统OOP的局限.

但说到这里, 大家可能也会有种想法, 认为DOP也是OOP. 我认为这种想法是正确的, DOP的最佳实践应该对象化/模块化, 只是与直接调用其他对象的方法不同, 通过数据来间接达到目的. 这一点来讲, 倒和面向事件的编程(EOP)有些相似, 但事件是瞬时的, 而数据则是可持续的. 或许DOP约等于OOP+EOP+Data?

近年来, 在很多网站中出现了Hash, 很多MVC框架也支持相应的技术, 极大地方便了复杂的无刷新页面的实现, 这应该算是典型的DOP. 不过如果仅仅是这样, 还只能说是Hash上的数据在和整个页面一个对象交互, 这就有点伤感了. 还好看到一些框架, 并非这样的如果, 比如淘宝的MagixJS似乎就不错. 不过很显然, DOP也有其局限性, 毕竟中间穿插了一个环节, 在效率上或许比不过传统的变成手段. 所以像Web游戏的有些部分则是不便于使用的, 但我想做做UI还是完全能够胜任.

按我的理解, 相对于OOP, DOP能进一步减小复杂程序的思维难度, 提高开发效率, 以及降低bug的概率, 应该是未来Web编程某些方面的趋势, 于是我也有自己的DOP框架计划, 只是准备在DOP的基础上, 增加强大的模板功能, 也许未来, 很多AJAX操作, 都只需要一个简单的模板了.

Original link of this archive: http://www.vilic.info/blog/archives/791
本文的原始链接: http://www.vilic.info/blog/archives/791

There're 16 Comments to "浅谈Web程序设计中的面向数据的编程(DOP)"
  • filod21:32 - 02.21 2012
    我突然想起了ASP.NET webform 里面的 ajax panel, 的确只是一个模板,而且,在多年前就出现了。

    DOP这个概念我觉得并不贴切。相反,EOP,DOP这些似乎只是OOP的子集,我倒是觉得AOP & 函数风格 才是web编程的未来。
    filod
  • VILIC02:38 - 02.24 2012
    @filod 嗯, 要是只是那样, 自然意义不大了, 但我设想的这个模板既然是面向数据的, 那当相关数据发生改变时, 便会自动重新请求. {ajax { url="test.aspx?p={config.param}" }}. 当然, 这个只是一个简单地例子. 至于AOP, 大致看了下, 貌似跟OOP的目的完全不同, 也互不冲突. 可能你现在接触到的代码规模还相对较小, 即使是函数风格也能有较清晰的逻辑思路, 但一旦程序规模增加, 函数风格编程的思维难度将变得很大, 即使实现, 也很容易出现bug. 而Web编程正是在向大型化发展.
    VILIC
  • VILIC02:39 - 02.24 2012
    @filod 对咯, 这个模板并不是死的, ajax只是其中一个模块而已, 其扩展性才是王道.
    VILIC
  • filod09:36 - 02.24 2012
    @VILIC  我是这样想的,函数编程与编程规模并无关系(参见http://www.aqee.net/web-programming-is-functional-programming/),突出的只是一个风格,风格并不会限制规模。ASP.NET的WEBFORM初衷便是为了解决规模和快速的问题而生,自然就丧失了性能和扩展性。
    不过我也是泛泛而谈 ,没有仔细钻研这些东西,还是期待你的模板哈,嘿嘿~
    filod
  • VILIC23:23 - 02.27 2012
    @filod 唔, 不能完全认同... ASP.NET只是给高低端开发都提供了相应的东西而已, 它的控件体系很容易扩展的, 当然你要是只愿意在ASP.NET拖控件, 那也没办法. 我自己只能说, ASP.NET很强大... 至于编程风格, 可能你以后会慢慢有了解吧. 现在正是Web编程的一个变革期, 很多原来的东西都不能再满足需求了. 加油之.
    VILIC
  • filod00:25 - 02.28 2012
    ASP.NET的webform思想来源于桌面编程,说白了就是基于事件,实话讲最初刚出来的确为web世界的编程思想带来了一个颠覆性的变革,但随着时间推移,高灵活高性能大数据等需求渐显,webform不再适应这些需求(控件体系当然很容易扩展,但我所指并不是指控件扩展性来满足具体需求,而是指整个web开发中的扩展性),ASP.NET相应的也推出了MVC,但是计划赶不上变化,近些年以前小众的东西现在反倒是被提起以适应新web编程的需求 ROR,tornado 等~(这些东西倒是回归web编程的本质)

    你的模板思想我初见感觉和asp.net webform里面的控件很类似,因此才提出前文一些浅见,可能有些误解,当然,你现在也只是提了一个想法,不过是骡子是马,还是得溜溜才知道嘛~ 我也不敢妄加断言~ 所以期待你的框架咯,希望能让我等之辈找到如当初拖拖控件即页面成型的畅快感觉~
    filod
  • VILIC00:03 - 02.29 2012
    @filod 嗯, 怎么说, 我们看待ASP.NET的关注点不同, 我并不在意是否有WebForm, 而是喜欢.NET这一系列的语言, 虽然我经常用ASP.NET做服务器端, 但用得更多的是过程处理, ashx, Web服务, asmx, 而WebForm, aspx则是基本不用的. 其实我的模板的灵感是来自淘宝的MagixJS, 它跟ASP.NET的控件是两码事, 不过这个我也不好解释, 可能只有做出实物之后才能展示它的强大. 希望不要半途而废吧. :)
    VILIC
  • filod00:36 - 02.29 2012
    @VILIC  不得不说,APSX是个很牛逼的东西,他实现原理的思路真得是前无古人,估计后也无来者了吧,你很难想象web可以被设计成这样,模板引擎是.cs & apsx 代码的基类,只一条配置即可以联系起来,还有viewstate的设计……哈哈~说太多了,可惜现在我已经N久没摸C#了~以后还得回头研究研究,多借鉴借鉴一些思想~

    简单瞅了一下 MagixJS ,是基于backbone的,我知道你的思路在哪里了,我可能想偏想到整体架构去了,这块儿我正在努力学习ing~ 你应该更多讨论的是针对 web app的前端架构吧,
    不错不错,这是未来趋势之一嘛,加油吧~~
    filod
  • VILIC20:05 - 02.29 2012
    @filod 嗯, 或许可以这么说吧, 一起加油咯, 要是我在你这么大的时候有那么强就好了...
    VILIC
  • filod20:46 - 02.29 2012
    @VILIC  哪有,我才羡慕你哪~  我就blabla乱说了一气~~平时就尽写些业务代码度日,框架什么的从来都没想过,哈哈, 向你学习才是~~ :D
    filod
  • VILIC21:02 - 03.01 2012
    @filod 囧...
    VILIC
  • 宇博13:11 - 04.07 2012
    楼上两位基友在做什么 :)?终于回归原位了
    宇博
  • Jone03:24 - 05.06 2012
    有思想,再加行动,再加上坚持,就可以成功了!
    Jone
  • VILIC14:06 - 05.06 2012
    @Jone 嘿, 你是每次都换个名字诶~
    VILIC
  • Jone17:36 - 05.06 2012
    @VILIC 我只是一个网络隐形人,暂时不亦出现在广大网友面前。哈哈哈哈
    Jone
  • VILIC00:24 - 05.07 2012
    @Jone 这... 隐形人你好...
    VILIC
Leave a Comment