论坛首页 综合技术论坛

从编写代码到制造代码

浏览 7254 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2009-03-09  
还是很欣赏canonical看待问题的视角。
我的简单理解来就是代码复用是没有问题的,路远点就远点了,得看复用到什么程度。
现在流行的框架以及你的Witrix平台不也是复用的一种体现吗。
想到个通俗的比喻:框架像是地基,他不需要我们重复劳动了,领域模型是柱子,他决定了房屋的形状。剩下的就是搬砖了。当然,搬砖砌砖也是个技术活,如果搬砖工人会点诀窍,比如AOP之类的,那会搬的更轻松。
另外,我并不看好什么CodeGenerator。那生成出来的代码与复用,是两码事。也许有CodeGenerator适合的场景,比如一些很简单通用的增删改查。但是,既然提到了简单通用,那我干吗还去用CodeGenerator,啥工具语言的上来不都是三下五除二搞定?
0 请登录后投票
   发表时间:2009-03-09  
nighthawk 写道
还是很欣赏canonical看待问题的视角。
我的简单理解来就是代码复用是没有问题的,路远点就远点了,得看复用到什么程度。
现在流行的框架以及你的Witrix平台不也是复用的一种体现吗。
想到个通俗的比喻:框架像是地基,他不需要我们重复劳动了,领域模型是柱子,他决定了房屋的形状。剩下的就是搬砖了。当然,搬砖砌砖也是个技术活,如果搬砖工人会点诀窍,比如AOP之类的,那会搬的更轻松。
另外,我并不看好什么CodeGenerator。那生成出来的代码与复用,是两码事。也许有CodeGenerator适合的场景,比如一些很简单通用的增删改查。但是,既然提到了简单通用,那我干吗还去用CodeGenerator,啥工具语言的上来不都是三下五除二搞定?


现有的AOP框架基本都是通过CodeGenerator实现的。
工具的本质也是代码检查器和生成器。譬如可视化编辑器定义了一个鼠标DSL,于是可以通过这个DSL产生程序代码。可是现在的工具包装得太好了,以至于人们很容易忘记它本来是什么东西……


前面我也说过,复用的第一原则是充分利用本语言的能力,其次才是CodeGenerator。
但是静态语言的缺点就是:某时候很难复用一个结构(可以是可以的,但是做出来别人看不懂),于是便衍生出各种各样的复用的通用语言——设计模式和框架。
可是回头想一想:为什么事情变得这么复杂? 走这么远是否忘记了本来的意思? 有时一个static if胜过千言万语。
而且,语言和框架只有语法检查的能力,逻辑检查还得靠自己,完成自己的CodeGenerator就更有意义了。


nighthawk你对代码生成的理解有误。CodeGenerator还有一个名字,叫做编译器。
http://en.wikipedia.org/wiki/Code_generation_(compiler)
0 请登录后投票
   发表时间:2009-04-30  
night_stalker 写道

nighthawk 写道还是很欣赏canonical看待问题的视角。
我的简单理解来就是代码复用是没有问题的,路远点就远点了,得看复用到什么程度。
现在流行的框架以及你的Witrix平台不也是复用的一种体现吗。
想到个通俗的比喻:框架像是地基,他不需要我们重复劳动了,领域模型是柱子,他决定了房屋的形状。剩下的就是搬砖了。当然,搬砖砌砖也是个技术活,如果搬砖工人会点诀窍,比如AOP之类的,那会搬的更轻松。
另外,我并不看好什么CodeGenerator。那生成出来的代码与复用,是两码事。也许有CodeGenerator适合的场景,比如一些很简单通用的增删改查。但是,既然提到了简单通用,那我干吗还去用CodeGenerator,啥工具语言的上来不都是三下五除二搞定?


现有的AOP框架基本都是通过CodeGenerator实现的。
工具的本质也是代码检查器和生成器。譬如可视化编辑器定义了一个鼠标DSL,于是可以通过这个DSL产生程序代码。可是现在的工具包装得太好了,以至于人们很容易忘记它本来是什么东西……


前面我也说过,复用的第一原则是充分利用本语言的能力,其次才是CodeGenerator。
但是静态语言的缺点就是:某时候很难复用一个结构(可以是可以的,但是做出来别人看不懂),于是便衍生出各种各样的复用的通用语言——设计模式和框架。
可是回头想一想:为什么事情变得这么复杂? 走这么远是否忘记了本来的意思? 有时一个static if胜过千言万语。
而且,语言和框架只有语法检查的能力,逻辑检查还得靠自己,完成自己的CodeGenerator就更有意义了。


nighthawk你对代码生成的理解有误。CodeGenerator还有一个名字,叫做编译器。
http://en.wikipedia.org/wiki/Code_generation_(compiler)



在我看来,如果一个代码生成器,生成完代码就不管了,只着眼于“生成”,那绝对不能够令人满意。真正有用的代码生成器,要对所生成代码实现有效的管理,这种可管理性要体现在:
1 程序员无需接触到所生成的代码,各种修改都在代码生成器所提供的DSL语言中进行。
2 调试的时候,跟踪,断点等设置也主要在高级的DSL语言中进行,而不是一定要深入到所生成的代码内部。


在现代的各种程序语言中,有一个少有人注意的问题,那就是把声明式和命令式混淆在了一起,它们之间的关系也没有得到很好的清理。声明式是关于概念世界的,回答“是什么”的问题,而命令式是关于现实世界的,回答“如何做”的问题。

类是属于概念世界,具体的对象实例属于现实世界(内存)。类之间的关系,类与对象的关系,用声明式语言才适合,而对象具体的行动,却需要用命令式的语言表达。

只有在程序设计语言中融合声明式和命令式到一个整体框架中,才能够更符合程序员的需要。




0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics