X-gen项目背景
很多做应用项目的朋友都会有这样的感觉:项目越来越大,模块越来越多,但是大多数都是重复或者相似的做法,至少每个模块的基础部分的实现是差不多的,比如CRUD(增删改查)功能的实现,又比如翻页功能的实现等等。
因此,很多朋友都在想办法解决这个问题,如何能够减少这些重复劳动,让自己把有限的时间和精力投入到具有创意或挑战的功能实现上。
很快地,大家便根据自己的需要,结合公司已有的系统架构和公共功能,制作出了符合自己需要的小应用,可以实现根据配置文件或者是数据库定义来生成应用模块,并带上增删改查的功能实现。
一切看起来是那么完美,从此不需要再去写每个模块的基础部分了,可以根据配置或数据库定义来生成这些基础部分,然后在此基础之上,进行业务功能的开发就可以了。
通常这种程序,由于是公司内部专用,因此会实现得非常简单,很多复杂多变的状况也就不再去考虑了,只要满足自己的需要即可。
1:如果生成的配置文件需要发生变化:那么相应的读取配置文件的程序需要变化;同时使用这些数据的程序也需要变化
2:如果模板文件需要发生变化:那么读取模板文件的地方需要发生变化,同时,运行中把参数数据设置到模板的程序也需要发生变化
3:如果调用逻辑或调用顺序需要发生变化:那就需要修改调用部分的程序来适应新的变化
4:如果输出格式需要发生变化:那就只好重新写代码来实现新的输出格式
类似这样的问题还有很多,这里就不一一列举了。
由于很多这样公司内部使用的工具型应用,是按照公司现有的开发模式来实现的,大都实现得非常简单和僵硬,对于这些变化适应能力是非常差的。
而上述这些变化,是经常发生的,因此,很多公司都会有人专门负责维护这样的内部应用,不断更改这些程序来适应新的应用的需要。但由于生成的调用过程、生成配置、生成模板以及最后生成等功能是搅和在一起的,因此改动起来非常困难。
因此我们需要一个项目,来把生成应用的核心部分独立出来,形成公共的应用,让变化的部分从应用中分离出来,让程序人员可以根据需要进行配置和扩展,从而适应各种应用的需要。
X-gen就是这样一个应用。X-gen分成两个部分,一个部分是核心框架,用来实现生成应用的公共部分;另外一个部分就是自定义模板部分,按照程序人员的需要来制定模板,几乎所有能重复使用的功能都可以通过X-gen生成,没有什么使用限制。
x-gen是一个能按照模板和配置去生成结果的通用框架,设计精巧,结构灵活,平台开放,支持模板自定义,支持配置方式自定义,支持生成方式自定义,甚至可以自定义generate的过程。
X-gen的核心是一个通用的生成调用框架,本身并不约定任何需要生成的东西,因此几乎可以满足所有朋友的各种generate需求。
x-gen首先要解决根据什么来生成的问题;其次要解决如何生成的问题,同时还要解决在生成的时候如何利用外部主题的问题;然后要解决生成结果的问题,包括最终生成成为什么格式,以及把结果输出到什么地方等问题。
x-gen是按照配置来generate的,配置管理模块主要完成:获取用户配置的数据、缓存用户配置的数据 、并对外提供访问这些数据的接口等功能。
X-gen是一个通用的框架,它本身并不固定要求配置的格式,也不要求配置的来源,因而它也不固定获取和解析配置数据的程序。虽然x-gen默认提供了对xml配置的支持,但可以通过注册新的provider来提供对新的配置方式的支持。
x-gen可以完全由开发人员自己来制定配置的方式、配置的地方、配置的格式,以及如何获取这些配置数据,如何解析这些配置数据等。并能够以很简单的方式插接到x-gen的核心框架中。
分发调度提供接受用户请求的入口,然后根据用户请求的内容,去获取相应的配置数据,获得户配置的数据过后,就按照配置的要求来发出命令,要求按照这些配置数据来完成generate的功能。
在每一个具体命令的实现中,先动态组合需要完成的generate的功能,然后就把这些功能交给generate的代理去完成。
也就是说分发调度只是负责接收用户的任务,然后把任务组合好,最后分配出去,只是起到一个调度的作用,本身并不处理用户的请求功能。
生成代理是一个介于生成调度(dispatch)和真正生成(geninvocation)之间额外的附加层,目的是能够根据需要切换不同的代理,比如生成调度根据配置,需要通过远程来生成,那么就需要远程代理,远程访问的方式可能是rmi或webservice等等
这个模块实现一个具体生成功能的调用过程,通常是把用户配置的参数数据,按照一定的规则与theme的模板相结合,从而得到需要生成的结果,然后把结果输出出去的过程。
模板管理的功能就是负责获取相应的模板数据,并对这些模板的数据进行管理,在外部需要这些模板数据的时候,可以访问模板管理提供的接口来获取。
具体调用运行完成后,会产生generate的结果,这些结果如何输出?输出到什么地方?输出成为什么格式等等问题,都由生成输出来负责。
生成输出本身并不固定任何的输出要求,开发人员完全可以在外部来定义输出的格式,输出的地方,以及如何输出等,只需要在theme的配置中注册新的outtype即可。目前x-gen提供了最简单的输出成为普通文本类型的文件的功能。
所谓theme,就是一套用于生成的模板及其相应程序和配置。由于模板的配置会有很多个,通常会把多个相关的模板组合在一起,统称为主题,也就是theme,今后我们就不说模板了,而是说x-gen根据主题/theme来生成。。
外部主题是独立于x-gen核心框架之外的,完全由开发人员根据需要来制定,通常里面会包含generate所需要的所有原始模板文件,跟模板文件对应的解析和生成的辅助程序,生成处理的Action处理程序,还有theme的配置文件,一般这几个是必不可少的;其次是根据需要,由开发人员扩展的功能,比如:在进行生成处理前后需要额外添加的功能,自定义的输出类型等等。
外部主题决定了按照什么来生成、如何生成以及生成成为什么东西的具体信息,是提供给x-gen核心框架使用的重要数据。
相关推荐
设计模式综合项目实战X-Gen生成器 PPT
标题中的"protoc-gen-go与protoc-gen-go-grpc插件"是指Google开源的Protocol Buffers(protobuf)生态系统中的两个关键工具,它们是为Go语言设计的编译器插件。Protocol Buffers是一种序列化协议,它允许数据以高效...
在提供的资源中,"X-gen代码生成框架PPT" 讲义可能是对X-gen框架的详细介绍,包括它的设计理念、核心功能、使用方法以及优势等。这部分内容可能会涵盖以下知识点: 1. **设计理念**:X-gen可能基于“DRY”(Don't ...
在Java环境下使用gRPC时,需要对.proto文件进行编译,生成服务端和客户端的存根代码,这正是`protoc`和`protoc-gen-grpc-java`工具的作用。 `protoc`是Protocol Buffers的编译器,它能够读取.proto文件并生成对应...
protoc-gen-grpc-java-1.9.1-windows-x86_64.exe
【开源项目-lyft-protoc-gen-validate】是一个在IT领域中非常有价值的工具,尤其对于那些使用Protocol Buffers(简称protobuf)进行数据序列化的开发者来说。protobuf是由Google开发的一种高效的数据序列化协议,...
"黑苹果一键生成工具OC-GEN-X 0.7.7"是一款专为MOCOS系统用户设计的软件,主要用于简化在非Apple硬件上安装 macOS 操作系统的流程,也就是我们通常所说的“黑苹果”(Hackintosh)搭建。MOCOS是Mac OS的非官方克隆...
标题中的"protoc.exe AND protoc-gen-go.exe.rar"表明这是一个包含了两个关键工具的压缩包:protoc.exe和protoc-gen-go.exe。这两个工具在IT领域,尤其是开发使用Protocol Buffers(protobuf)的项目时非常关键。 ...
在IT行业中,`protoc-gen-go.exe` 和 `protoc.exe` 是两个非常重要的工具,特别是在Golang(Go语言)的开发环境中。这两个工具与Protocol Buffers(简称protobuf)紧密相关,protobuf是一种高效的数据序列化协议,由...
《Go-gen:类型驱动的Go代码生成工具深度解析》 在Go编程语言的世界里,代码生成工具能够极大地提高开发效率,减少重复工作,确保代码一致性。"Go-gen"就是这样一款强大的工具,它以类型驱动的方式生成Go代码,帮助...
protoc-gen-grpc-java-1.40.0-osx-aarch_64 mac arm芯片平台grpc生成java的支持。官网上面没有,这是基于源码编译生成的。 pom.xml:(protoc-gen-grpc-java-1.40.0.pom) <?xml version="1.0" encoding="UTF-8"?> ...
《NGUI Next-Gen UI v3.11.2 (u5)——Unity中的高效UI解决方案》 在Unity游戏开发中,用户界面(UI)的设计与实现是至关重要的环节,它直接影响到玩家的游戏体验。NGUI(Next-Gen UI)是一款专为Unity引擎设计的UI...
解决 protobuf-gen-lua 跨文件引用message,直接覆盖这个文件,重新生成lua文件,就能解析到跨文件引用的message
NGUI Next-Gen UI是一款功能强大、灵活性高的UI插件,是当前最新版本的NGUI插件。它可以覆盖Unity的多个版本,包括Unity 5、Unity 2017和Unity 2018等。与其他UI插件相比,NGUI Next-Gen UI具有高效的性能和优秀的...
标题中的"Proto-gen-lua自动"指的是一个自动化工具或流程,用于处理与 ProtoBuf(Protocol Buffers)相关的 Lua 代码生成。ProtoBuf 是 Google 推出的一种数据序列化协议,它允许开发者定义数据结构,然后生成对应的...
标题中的"protoc-gen-as3-1.0.0-rc6-bin.tar"是一个压缩包文件,其中包含的是一个名为"protoc-gen-as3"的工具的版本为1.0.0-rc6的二进制版本。这个工具主要用于生成ActionScript 3(AS3)代码,与Google的Protocol ...
Next-Gen Soft-Shadows.unitypackage
pm53C软件 pm53C软件 Setup-gen-PCIMC6-8.313.0-CHN-6B_std.exe
当你下载了`protoc-gen-lua-master`这个压缩包,实际上你获取的是一个protobuf编译器的Lua版本。解压后,你需要将文件夹名`protoc-gen-lua-master`更改为`protoc-gen-lua`,这样做的目的是为了遵循教程中的命名约定...