orm java
先说下orm,在前面咱们没有提这个,其实咱们已经实现了orm功能。 数据库
这里把orm作了极大的简化,以一个model映射到数据库的一张表。在前面看到咱们把业务处理也放在model里,因此这时model才是真正的充血模型,并把对数据库的操做封装为dao,因此orm其实为model+dao。 框架
Tiny v1.0框架原理图 spa
再补一下框架的原理图 设计
Tiny v2.0 设计中。。。(先贴个图) 代理
Tiny框架的问题及解决思路 code
问题1:参数类型Map<String,String>问题 orm
咱们规定全部参数都为Map<String,String>,中值都为String类型确实有点很差让人接受(虽然从页面传递过来的,都是String类型),如今咱们想参数转型的工做由tiny来完成,咱们怎么解决这个问题呢? 继承
解决思路: 接口
重写一个TinyMap类继承HashMap。咱们实现getInt,getString等方法,调用这些方法能够对类型自动转换,当使用get方法时,实际上是调用HashMap的get方法,放回object类型,代码以下:
TinyMap tMap = new TinyMap(参); tMap.getInt(key); tMap.getString(key); tMap.get(key);//Ojbect
而后由前置控制器中将页面的参数转换为TinyMap类型(如今转换为HashMap),最后放入action参数中。因为action中参数为map接口,全部对原设计无影响,用户可同时使用HashMap和TinyMap的方法。
问题2:Aop功能太过鸡轴,只能对action访问的织入,而不能对业务(model)织入
解决办法
方式1:动态代理模式
实现动态代理类。在前置控制器中代码Container.inject(o);(注入模型)时,注入代理类,而后在BindingAop中绑定model(相似action),代理类调用具体的model方法,在执行先后调用aop的before和after。具体以下:
BindingUtil.binding("/模型类/模型方法/", new Class[]{TestAop.class});//模型和aop的绑定
经过绑定,咱们把模型类,自动放入代理类中,而后在action中定义代理类,同之前那样注入,而后action中调用代理类.invok();便可。
缺点:
方式1有个缺点,或者说是java的动态代理模式的缺点(也许你们好的办法,请告诉我下),就是必须得实现接口。实现一个接口通常没什么很差,可是我们的模型是有不少个的,让用户去本身弄接口而后本身实现,这样也没什么不对,只是这样用户开发时,尤为是很是小的系统时,开发时就会很麻烦,这样有违我们当初设计tiny的初衷,因此放弃方式1.
方式2:神秘方式
呵呵,我想到了一个变态的方式,之前看过别的框架实现过,以为真是麻烦(须要用户去本身弄好多东西),我如今决定改一下,我本身感受还不错,并且没有方式1的麻烦问题,在action中的模型,仍是用户本身写的模型类,也不须要用户像绑定action那样去绑定模型和aop的关系,感受一个action绑定就够了。就是说用户在什么也没作的状况下就有了aop的功能,是否是很神秘啊,很符合tiny的隐形特性。这个先买个关子,先不说明,等你们看见代码就一下明白了。就让它在神秘下吧。