Denis's Java Library

          The only documentation is the code itself

          Spring中的DAO和Service

              我們開發(fā)程序的目的是為了完成業(yè)務(wù)功能, 理想的情況下程序中的每一條語句都應(yīng)該是與業(yè)務(wù)直接相關(guān)的, 例如程序中不應(yīng)該出現(xiàn)連接數(shù)據(jù)庫, 讀取某個(gè)字段等純技術(shù)性的操作, 而應(yīng)該是得到用戶A的基本信息等具有業(yè)務(wù)含義的操作. dao(data access object)層存在的意義在于將與數(shù)據(jù)持久化相關(guān)的函數(shù)調(diào)用剝離出去, 提供一個(gè)具有業(yè)務(wù)含義的封裝層. 原則上說, dao層與utils等幫助類的功能非常類似, 只是更加復(fù)雜一些, 需要依賴更多的對(duì)象(如DataSource, SessionFactory)等. 如果不需要在程序中屏蔽我們對(duì)于特定數(shù)據(jù)持久層技術(shù)的依賴, 例如屏蔽對(duì)于Hibernate的依賴, 在dao層我們沒有必要采用接口設(shè)計(jì). 一些簡(jiǎn)單的情況下我們甚至可以取消整個(gè)dao層, 而直接調(diào)用封裝好的一些通用dao操作函數(shù), 或者調(diào)用通用的EntityDao類等.
              程序開發(fā)的過程應(yīng)該是從業(yè)務(wù)對(duì)象層開始的, 并逐步將純技術(shù)性的函數(shù)調(diào)用剝離到外部的幫助類中, 同時(shí)我們會(huì)逐漸發(fā)現(xiàn)一些業(yè)務(wù)操作的特定組合也具有明確的含義, 為了調(diào)用的方便, 我們會(huì)把它們逐步補(bǔ)充到service層中. 在一般的應(yīng)用中, 業(yè)務(wù)邏輯很難穩(wěn)定到可以抽象出接口的地步, 即一個(gè)service接口不會(huì)對(duì)應(yīng)于兩個(gè)不同的實(shí)現(xiàn), 在這種情況下使用接口往往也是沒有必要的.
              
              在使用spring的情況下原則上應(yīng)該避免使用getBean的調(diào)用方式, 應(yīng)該盡量通過注入來獲得依賴對(duì)象, 但有時(shí)我們難免需要直接獲取業(yè)務(wù)對(duì)象, 在不使用接口的情況下可以采用如下方式

              class TaskService{
                  public static TaskService getInstance(){
                      return (TaskService)BeanLoader.getBean(TaskService.class);
                  }
              }

              在程序中我們可以直接使用TaskService.getInstance()來得到TaskService對(duì)象.通過命名規(guī)范的約定, 我們可以從類名推導(dǎo)出spring配置文件中的對(duì)象名, 因而不需要使用一個(gè)額外的硬編碼字符串名.

          posted on 2006-02-05 17:17 DenisLing 閱讀(1629) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 丰顺县| 连州市| 胶州市| 江油市| 洛宁县| 晋中市| 荣成市| 新津县| 河东区| 京山县| 岑溪市| 凭祥市| 右玉县| 双鸭山市| 洮南市| 黎川县| 缙云县| 巴林右旗| 忻州市| 康马县| 虞城县| 阜平县| 古丈县| 当涂县| 周至县| 太湖县| 加查县| 安福县| 康乐县| 龙泉市| 通江县| 涞源县| 蓝山县| 镇雄县| 陈巴尔虎旗| 比如县| 图木舒克市| 尚志市| 通辽市| 沁水县| 中阳县|