java-真正面向配置+组件的开发

想大家在阅读本文章之前先阅读https://blog.csdn.net/shuaizai88/article/details/84670485

博主提供的开源组件 Mybatis-JPA 组件开源地址 https://gitee.com/shuaizai88/jack_mybatis_jpa

1 什么叫做组件

          组件 1.0  就是js插件,比如一个下拉,一个文件上传。

           组件2.0  几个js插件组合而成,比如可以吧省市区 变成一个组件,也可能是业务组件,比如 很多地方都写这么个功能,每次复制粘贴 不好维护,那么就抽离引入吧。

           组件 3.0 直接和DB打交道的组件。

                          根据约定,这个省市区的 三个字段的命名是什么,对应数据库的哪个字段,这个省市区组件,和校验插件(他们可能不是一家的),如何去集成。

 

 2   为啥需要组件

           有了组件,我们可以把代码写到最简单。只关注核心业务逻辑,不写一行多余的代码。

 3   使用组件后的代码是怎样的?

           A  使用JS来做项目配置,业务代码和配置代码在一起,如果你想,你甚至可以把SQL写这里(不要先喷我安全问题,后面讲安全)。

           B   上干货吧,以下是初版本的设计。 

                 

var modelConfig= {title:'学生',pkey:'student_id',orderBy:'student_id Desc',db:'ucenter',name="student",table:'t_student'};

var listPage={ 
  getListSett:function(){
	  return [
		  {field:'name',title:'姓名',width:'25%',formart:'testFormart',align:'center'},
	      {field:'sex',title:'姓名',width:'25%',formart:'testFormart',align:'center',trans:'wordbook',key:'sex',showField:'transMap.sexName'}
  ]},
  getFilter:function(){
      return [
		  {field:'type',type:'select',url:'${path.basePath}/ms/xx?xx=${param.fatherId}',val:'id',text:'typeName',title:'分类'},
		  {field:'sex',type:'wordbook',code:'sex',title:'性别'},
		  {field:'name',type:'input',title:'姓名',filterType:'like'},
		  {field:'startDate',type:'date',title:'开始日期',dateSett:'{formart:"yyyy-MM-dd"}',filterType:'>='},
	  ];      
  }, 
  getButtons:function(){
       return {'你好':'sayHello'};
  },
  getDisableButton:function(){
	    return ['del','export'];  
  },
  otherFunction:function(){
      return {
	     formart:function(index,val){
	        return '<font size="10">' + row.val + '</font>'
	    },
	     sayHello:function(row){
		    
	    }
	  }		
  }
};


var add={ 
	getFormField:function(){
	     return [
			  {field:'name',title:'姓名',required:true,max:10,type:'input'},
			  {field:'age',title:'姓名',required:true,dataType:'n0-3',type:'input'},
			  {field:'sex',title:'性别',required:true,type:'wordbook',code:'sex'},
		 ];
	},
	otherFunction:function(){
      return {
	     ready:function(){
	        
	    },
	    loadSuccess:function(info){
		    
	    },
	    onSave:function(){
		    
	    },
		saveSucess:function(){
		    
	    },
		saveError:function(){
		    
	    },
	  }		
   }
}

        是不是都能看懂?无论你是个java程序员,还是个php程序员,又或者是个前端程序员,只要你弄懂数据库设计,就可以写CRUD了。

          上面代码中的部分解释:trans:wordbook 字典,code:字典编码。

                                                  dataType: 数据验证规则,如果有多个可以写  a&b 或者 a|b。

           listPage 代表列表页面, 包含列表字段配置,过滤条件配置,自定义按钮配置,禁用系统默认按钮配置,以及自定义js配置。

            add 代表添加/修改/详情 页面,包含表单字段配置,以及几个handel,当然也可以自己写其他的方法。

 

4   实现思路--FOR 页面代码生成。

       1  将js加载到java中,当做配置文件读取,JDK 1.8自带了JS引擎,看看你就懂了

       2  根据规则拦截请求,我会拦截pagex/ms/namespace  然后根据namespace找到js,把js的配置项解析为html(说白了就是拼接字符串就是这么简单)

       3   把拼接出来的字符串给前端写过去。

                  

4   后端实现思路。

      在项目启动的时候,遍历所有的js,根据js配置拼接sql 动态添加到mybatis中。

      提供一个统一个控制器对外提供api  传namespace 可以定位到sql 执行,返回结果。

5    安全

          虽然这个配置文件是一个js,但是他不能被浏览器直接访问到,一个filter就搞定拦截了,然后虽然他是一个js,但是他实际上是给后端用的,js做配置,不觉得xml json property  yml 都弱爆了么。。(仅针对这个场景)。

 

6   扩展性

         你说,我有一些前端代码,系统组件+配置 无法实现,中间包含非公共的业务,那怎么办呢?

         我没说不让你写html代码!!!!

         你自己在写一段代码,加载进来就完了。

         比如上面我们是student.js,在他的目录下面你可以写一个student.jsp,配置不出来的写到这里面,引擎自动帮你把student.jsp 执行结果给前端返回回去,这个jsp中你爱写啥写啥。

          

         

          

  

         

 

            

 

 

                                              

     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值