怎么样让功能开发模板化,并方便移植?

xxjin 发布于 2014/01/27 11:36
阅读 1K+
收藏 2

@JFinal 你好,想跟你请教个问题:

每个人对功能分类,代码包的创建方法都不一样。很多人习惯用分层的思想。分别建model ,controller,routers,service等,然后把整个系统各个模块的功能,都按这个,往里面放代码。这时候如果想把某个功能移植出来的时候,就要从一个一个包里面找。

另一个方法就是小的功能模块分包,一个包里面放这个功能的model ,controller,service 等。这样移植的时候,只需要移这个包即可。

这样虽然可以解决移植的问题,但是现在routers里面actionkey,基本上都是写死的,特别是controller里面render模板的时候很依赖这个,包括对模板文件的路径的依赖。移植的时候就会出问题,必须要修改代码才行。

能不能在controller的actionkey和模板的路径上面,约定一个关系,在我们移植功能的时候,能基本实现0修改。唯一要做的就是把routers,model在config里面注册。

加载中
0
JFinal
JFinal

    赞同楼主的第二种做法,即先分模块,然后在模块中划分Controller、Model、Service之类的,这样更利于系统的维护,也有利于系统规模的扩大

    楼主提到的controller的actionkey和模板的路径上面,约定一个关系,这个开发者完全可以这样做,JFinal 提倡合理的约定,但同时也可以打破约定,例如 JFinal 在现有路由的基础上,约定 render(view) 时,如果 view 不以"/"打头则使用的是 me.add(actionKey, controller, viewPath) 配置中的 viewPath做为基础路径。楼主可以让 viewPath 即为模块名,而 render(view)时,始终不以 "/" 打头,就具有很好的可移植性

1
缪斯的情人
缪斯的情人

实际上已经可以通过简单的扩展实现模块化开发,甚至plugin方式开发。如果不知道怎么扩展可以参考jfinal-ext里面对于routes和model映射的扩展,原理就是通过注解方式或者扫描继承的父类,获取到所有待注册的路由和表对象映射。

另外你需要有自己的一套约定,这个省去了一些配置,也是非常优雅的一种实现方式,比如你的render模板所在路径。

举个例子(这里以插件模式为例,一个插件为一个单独工程/项目):
首先有一个基础容器工程(提供一些公用资源,无实际业务功能),这个基础工程有约定的目录结构(主要针对资源文件和模板,.java文件无视)还有上面说的那些扩展功能,比如我定义好一个模板文件存放目录为plugins。
其次,在插件工程中你可以实现所有的业务功能,也可以每个业务功能作为一个插件(如果项目足够大),在插件中同样创建一个存放模板文件的目录plugins,方便直接拷贝到基础容器对应目录下,这样就不用做任何手动修改代码了,再配合ant打包工具,编译一个jar外加plugins下的模板文件就ok了。
以上是工程化插件开发模式,如果你所有的插件都在一个工程下,那就简单些了,配合注解,就实现了0修改,config也不用改动

返回顶部
顶部