設(shè)計(jì)java

          j2ee輕量級(jí)框架,IMVC,IORM && web網(wǎng)絡(luò)游戲

          IMVC 核心接口介紹

              IMVC(InstantMVC簡(jiǎn)稱(chēng))有幾個(gè)比較核心的接口,通過(guò)對(duì)這幾個(gè)接口的了解,可以更深入的了解IMVC到核心機(jī)制。
          1.IAction接口
             action是整個(gè)MVC的核心,如果了解struts或者webwork等MVC框架的朋友應(yīng)該 知道,action是一個(gè)用戶處理模塊,當(dāng)MVC容器接受到一個(gè)請(qǐng)求的時(shí)候,他會(huì)通過(guò)一定的方法獲得一個(gè)相應(yīng)的action類(lèi),然后執(zhí)行action類(lèi)中 相應(yīng)的方法,最后返回一個(gè)視圖給客戶端,這就是最普通的mvc框架的流程。和其他框架的action類(lèi)似,IMVC的action接口也有一個(gè)核心方法, 如下
          public interface IAction {
              
          /**
               * 屬性介紹:驗(yàn)證器,放入Map value 的key
               
          */
              
          public static final String MVC_STATIC_validation="__validation";
              
          /**
               * 屬性介紹:文件上傳 Map value中的key
               
          */
              
          public static final String MVC_STATIC_createUpload="__createUpload";
              
          /**
               * 屬性介紹:這是編輯器
               
          */
              
          public static final String MVC_STATIC_editor="__editor";
              
          /**
               * 方法說(shuō)明:action的核心方法
          & nbsp;    * 
          < span style="color: #808080;">@param object 如果是post方法,object就 是該action對(duì)應(yīng)的form,如果是get方法并且配置get方法沒(méi)有form
               * 那么這里就是null,如果配置get方法也是有form的,這里也是form
               * 
          & nbsp;    * 
          < span style="color: #808080;">@param value  一個(gè)map,在 action中添加內(nèi)容到view都往這里添加
               * 
          @return 
               * String
               
          */
              
          public View execute(Object object,Value value);
          }
          前 面三個(gè)變量這里暫時(shí)不說(shuō),我們來(lái)關(guān)注最后一個(gè)方法,execute,任何action都需要實(shí)現(xiàn)這個(gè)接口,同時(shí)也就是說(shuō)必須在action中有這個(gè)方法。 這個(gè)方法有兩個(gè)傳入變量Object和Value,第一個(gè)是想要的formBean,如果是get方法并且沒(méi)有配置get方法設(shè)置form,那么這個(gè)時(shí)候 就是null,如果是非get方法,而且還傳入了參數(shù),那么IMVC會(huì)自動(dòng)封裝相應(yīng)的form傳入到這個(gè)。第二個(gè)Value參數(shù),Value也是一個(gè)很核 心的接口。在IMVC中有ValueImpl類(lèi)來(lái)實(shí)現(xiàn)。

          Value 接口:
          public interface Value {
              
          public String getString(String key);
              
          public String[] getArray(String key);
              
          public void setObject(String key,Object value);
              
          public Object getObject(String key);
          }

          ValueImpl 類(lèi):
          public final class ValueImpl extends HashMap  implements Map,Value,InstantValue{
              
          //InstantValue
              public void setArray(String key ,String[] arr){
                  
          super.put(key, arr);
              }
              
          //user Value
              public String[] getArray(String key) {
                  
          return (String[])super.get(key);
              }
              
          public Object getObject(String key) {
                  
          return super.get(key);
              }
              
          public String getString(String key) {
                  Object o
          =super.get(key);
                  
          if(o==null){
                      
          return null;
                  }
                  
          if(o instanceof String[]){
                      
          return ((String[])o)[0];
                  }
          else{
                      
          return null;
                  }
              }
              
          public void setObject(String key, Object value) {
                  
          super.put(key, value);
              }
           
          // 以下實(shí)現(xiàn)clone。。提供性能
              private ValueImpl cloneBase(){
                  ValueImpl vimpl
          =(ValueImpl) super.clone();
                  vimpl.clear();
                  
          return vimpl;
              }
              
          public static ValueImpl valueImpl=new ValueImpl();
              
          public static ValueImpl cloneSelf(){
                  
          return valueImpl.cloneBase();
              }
          }
          這個(gè)類(lèi)也相當(dāng)簡(jiǎn)單,我們看第一句:
          public final class ValueImpl extends HashMap  implements Map,Value,InstantValue
          說(shuō) 明這個(gè)類(lèi) 繼承了HashMap,實(shí)現(xiàn)了Map,Value,InstantValue 三個(gè)接口。這三個(gè)接口其實(shí)就是三個(gè)權(quán)限版本,比如Value是用 戶操作權(quán)限,我們看到在action中傳入的是Value,但是在IMVC內(nèi)部操作的時(shí)候是把ValueImpl類(lèi)轉(zhuǎn)換為InstantValue借口的

          InstantValue 接口:
          public interface InstantValue {
              
          public void setArray(String key,String[] value);
          }
          這個(gè)幾口只有一個(gè)方法,這個(gè)方法是不會(huì)暴露給用戶的,是提供IMVC內(nèi)部設(shè)值用的。
          下面還有一個(gè)攔截器接口
          IInerceptor 攔截器接口:
          public interface IInterceptor {
              
          public void execute(HttpServletRequest request,HttpServletResponse response,Value value);
          }
          這個(gè)接口也相當(dāng)簡(jiǎn)單,只有一個(gè)方法,傳入request和response參數(shù),同時(shí)還有一個(gè)Value參數(shù),這個(gè)Value上面已經(jīng)說(shuō)過(guò),是一個(gè)用戶操作的數(shù)據(jù)接口。

          整個(gè)IMVC流程圖簡(jiǎn)單來(lái)說(shuō)如下:


             首先,請(qǐng)求來(lái)了后,IMVC會(huì)創(chuàng)建一個(gè)ValueImp轉(zhuǎn)換為Value傳給前攔截器(如果沒(méi)有設(shè) 置就不用),攔截器操作完畢,在把這個(gè)ValueImp轉(zhuǎn)換為InstantValue接口傳給IMVC內(nèi)部操作,操作完畢接著把它轉(zhuǎn)化為Value接口 供用戶Action操作,最后執(zhí)行后攔截器,執(zhí)行完畢轉(zhuǎn)換為Map借口供模板引擎渲染試圖。
              一個(gè)ValueImp要轉(zhuǎn)換為三種權(quán)限接口,所以他的實(shí)現(xiàn)就要implements 三個(gè)接口。



          --InstantMVC:j2ee輕量級(jí)mvc框架

          posted on 2008-06-10 16:30 剎那 閱讀(430) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 我的j2ee輕量級(jí)框架

          主站蜘蛛池模板: 井研县| 永和县| 宁蒗| 邢台市| 石渠县| 鸡泽县| 山西省| 普宁市| 宣恩县| 颍上县| 罗江县| 九江市| 长宁区| 吐鲁番市| 灵川县| 进贤县| 尼勒克县| 江安县| 喀喇沁旗| 尖扎县| 呼玛县| 富宁县| 固安县| 孟津县| 临洮县| 扎赉特旗| 盈江县| 昔阳县| 侯马市| 阿拉善左旗| 江川县| 措勤县| 喀喇| 吉木乃县| 通化市| 专栏| 乌鲁木齐县| 星座| 宜良县| 峡江县| 辽宁省|