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.整体结构

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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