3二、最簡單的mvc框架tiny,orm、原理圖、問題與解決思路

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的方法。

問題2Aop功能太過雞軸,只能對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的隱形特性。這個先買個關子,先不說明,等你們看見代碼就一下明白了。就讓它在神祕下吧。

相關文章
相關標籤/搜索