X-gen设计模式综合实战1——整体介绍

1.X-gen项目背景

项目越来越大,模块越来越多,但是大多数都是重复或者相似的做法,至少每个模块的基础部分的实现是差不多的,比如CRUD(创建Create、更新Update、读取Retrieve和删除Delete操作——增删改查)功能的实现,又比如翻页功能的实现等等。

如何能够减少这些重复劳动?

根据需要,结合公司已有的系统架构和公共功能,制作出了符合自己需要的小应用,可以实现根据配置文件或者是数据库定义来生成应用模块,并带上增删改查的功能实现。
通常这种程序,由于是公司内部专用,因此会实现得非常简单,很多复杂多变的状况也就不再去考虑。

1.1 小应用面临的问题

  • 如果生成的配置文件需要发生变化:那么相应的读取配置文件的程序需要变化;同时使用这些数据的程序也需要变化
  • 如果模板文件需要发生变化:那么读取模板的文件的地方需要发生变化,同时,运行中把参数数据设置到模板的程序也需要发生变化
  • 如果调用逻辑或调用顺序需要发生变化:那就需要修改调用部分的程序来适应新的变化
  • 如果输出格式需要发生变化:那就只好重新写代码来实现新的输出格式

类似的问题还有很多。

1.2 X-gen

因此,需要一个项目把生成应用的核心部分独立出来,形成公共的应用,让变化的部分从应用中分离出来,让程序人员可以根据需要进行配置和扩展,从而适应各种应用的需要。

X-gen分为两个部分:

  • 核心框架。用来生成应用的公共部分
  • 自定义模板部分。按照程序员的需要来定义模板,几乎所有能重复使用的功能都可以通过X-gen生成

2.X-gen功能概述

X-gen是一个能按照模板和配置去生成结果的通用框架,设计精巧,结构灵活,平台开放,支持模板自定义,支持配置方式自定义,支持生成方式自定义,甚至可以自定义generate的过程。

X-gen的核心是一个通用的生成调用框架,本身并不约定任何需要生成的东西,因此几乎可以满足所有朋友的各种generate需求。

X-gen需要解决的问题:

  • 解决根据什么来生成的问题
  • 解决如何如何生成的问题,同时还要解决在生成的时候如何利用外部主题的问题
  • 解决生成结果的问题,包括最终生成什么格式,以及把结果输出到什么地方等问题

2.1 配置管理模块(genconf)

X-gen设计模式综合实战2-配置管理
配置管理模块主要完成:

  • 获取用户配置的数据
  • 缓存用户配置的数据
  • 并对外提供访问这些数据的接口

X-gen是一个通用的框架,它本身并不固定要求配置的格式,也不要求配置的来源,因为它也不固定获取和解析配置数据的程序。虽然默认提供了对xml配置的支持,但可以通过注册新的provider来提供对新的配置方式的支持。

X-gen可以完全由开发人员自己来制定配置的方式、配置的地方、配置的格式,以及如何获取这些配置数据,如何解析这些配置数据等。并可以很简单的方式插入到X-gen的核心框架中。

2.2 分发调度模块(dispatch)

X-gen设计模式综合实战3-分发调度模块
分发调用提供接受用户请求的入口,然后根据用户请求的内容,去获取相应的配置数据,然后按照配置的要求来发出命令,要求按照这些配置数据来完成generate的功能。

在每一个具体命令的实现中,先动态组合完成需要完成的generate功能,然后就将这些功能交给generate的代理去完成。
也即分发调度只是负责接收用户的任务,然后把任务组合好,最后分配出去,只是起到一个调度的作用,本身并不处理用户请求的功能。

2.3 生成代理模块(genproxy)

X-gen设计模式综合实战4-生成代理模块
介于生成调度(dispatch)和真正生成(geninvocation)之间额外的附加层,目的是能够根据需要切换不同的代理,比如生成调度根据配置,需要通过远程来生成,那么就需要远程代理,远程访问的方式可能是rmi或webservice等。

2.4 具体调用模块(geninvocation)

X-gen设计模式综合实战5-具体调用模块
这个模块实现一个具体生成功能的调用过程,通常是把用户配置的参数数据,按照一定的规则与theme的模板相结合,从而得到需要生成的结果,然后把结果输出的过程。

2.5 模板管理模块(template)

X-gen设计模式综合实战6-模板管理模块
模板管理的功能就是负责获取相应的模板数据,并对这些模板的数据进行管理,在外部需要这些模板数据的时候,可以访问模板管理提供的接口来获取。

2.6 生成输出模块(output)

X-gen设计模式综合实战7-生成输出模块

  • 结果如何输出
  • 输出到什么地方
  • 输出成为什么格式

生成输出本身并不固定任何的输出要求,开发人员完全可以在外部来定义输出的格式,输出的地方,以及如何输出,只需要在theme的配置中注册新的outtype即可。

3.外部主题

X-gen设计模式综合实战8-开发外部主题
一套用于生成的模板及其相应程序和配置。由于模板的配置会有很多个,通常会把多个相关的模板组合在一起,统称为主题theme。

外部主题是独立于X-gen核心框架之外的,完全由开发人员根据需要来制定,通常里面会包含generate需要的所有原始模板文件,跟模板文件对应的解析和生成的辅助程序,生成处理的Action处理程序,还有theme的配置文件,一般这几个是必不可少的。
其次,根据需要,可由开发人员扩展功能。比如:在进行生成处理前后需要额外添加的功能,自定义的输出类型。

外部主题决定了按照什么来生成、如何生成以及生成什么东西的具体信息,是提供给X-gen核心框架使用的重要数据。

4.整体结构

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生x阅读 15,967评论 3 119
  • 文/孤鸟差鱼 你难过的样子 又有多好 丑成那样 风都不愿理会 还摇头晃脑
    孤鸟差鱼阅读 99评论 0 3
  • 每天起床第一件事 是解决生理问题 喝下五百毫升凉开水 放掉四百毫升尿 依据某些理论 相当于吃掉了青蛙孩子的孩子 现...
    静听旁白阅读 239评论 0 1
  • 父亲刚开始从青岛过来,粮食关系是没转过来的。那时来说应该是黑户,因为没有户口。当时青岛奶奶那里以为父亲是赌气,最终...
    6水中飓风6阅读 305评论 0 13