Posted on 2007-01-21 18:11
canonical 阅读(2514)
评论(5) 编辑 收藏 所属分类:
设计理论
代码生成现在已经逐渐成为软件开发中的一种标准技术,在众多的软件领域都大大减轻了我们重复劳动的工作量。程序中总是存在着这样那样的隐蔽的关联,它们无法在通用的程序语言框架下得到明确的表达,代码生成是我们突破既定的语言和框架限制的一种重要手段。但是代码生成也存在着严重的弊病,一方面一般的程序语言在设计时没有考虑到和代码生成工具的相互配合,因此生成代码是一次性的,代码生成工具无法以增量的方式修正已经生成的代码。另一方面,程序的结构是复杂的,代码生成工具一般基于某种简化的通用的程序模型(例如CRUD)来产生代码,它无法承载完整的程序结构,因此代码生成后手工调整量仍然很大,有的时候甚至为了微小的界面调整,将生成的代码修改的面目全非,无法发挥代码生成的优势。
在witrix平台中主要使用meta generation而不是code generation. meta实际上是对一种定制模型(model)的描述,它在某种意义上可以看作是完整程序的简化版本,但它本身并不意味着最终的程序结构。在witrix平台各处meta的使用都是可选的, 特别是在多变的前台页面,我们可以选择根据meta描述自动生成界面,也可以选择通过<df:Field name="字段名"/>来引用单个字段的meta数据. 在witrix平台中, meta可以看作是系统运行的内核, 它通过syncWithModel等属性与设计工具发生耦合. 当设计模型修改之后, 这种修改能够以增量的形式通过可控制(修改)的信道传播到系统各处.
Feedback
# re: Meta Generation 回复 更多评论
2007-01-21 21:27 by
有witrix平台的DEMO可以看吗?非常感兴趣
# re: Meta Generation 回复 更多评论
2007-01-22 10:52 by
呵呵,公司里也做这样的实践!果然都是地球人,大家思路最后都差不多!
# re: Meta Generation 回复 更多评论
2007-01-22 23:01 by
呵呵,和我们CowNew的CowNewPIS平台中的元数据引擎思想非常类似。
http://www.cownew.com/CowNewPIS/
# re: Meta Generation 回复 更多评论
2007-01-23 22:00 by
witrix中meta的思想与一般人的第一感觉还是有着本质区别的。在witrix中,典型的开发过程是通过powerdesigner设计数据模型,然后自动生成meta数据,此时对于数据库的增删改查就可以进行了,包括对于one-to-one,one-to-many,many-to-many等关系的维护,高级查询条件的拼装,导入导出功能等。这些设计因为基于ORM模型,因此并不是仅仅针对单表的,而是可以很方便的处理关联表的情况。
如果界面没有特殊要求,一般最多调整一下meta中字段的属性。如果完全要求定制布局,则在前台通过<df:Field name="fieldName"/>等标签引入字段元数据,增删改界面可以共用一个定制页面。而后台依据meta对前台提交数据进行初步处理。在witrix的开发过程中,几乎不需要调用get/set方法,也不需要调用session.save, session.update等方法,前台也几乎不编制完整的界面。
to mixlee: 我们目前无意成为平台软件供应商,因此不对外提供witrix的资料。
# re: Meta Generation 回复 更多评论
2007-01-28 13:43 by
Template其实也可以看做是MetaData,只不过Template通常是基于某一个特定场景,描述的元信息的确是不够丰富的,如果要足够丰富,Template必定会加杂很多逻辑。
而真正的元数据驱动的应用,在软件业也随处可见。工作流程描述语言,页面流程描述语言,HBM映射文档都是元数据驱动,归纳起来,都是在运行时通过引擎渲染元数据摸板。严格分离Design time MetaData和Run time engine。这所带来的益处也不是代码生成能达到的。以下省略文字3000...
还有一点我觉的非常重要,就是你的工具/平台面向的群体。这会直接影响设计和实现的方式。以及是否考虑到了升级。希望有机会可以交流。