我們開發程序的目的是為了完成業務功能, 理想的情況下程序中的每一條語句都應該是與業務直接相關的, 例如程序中不應該出現連接數據庫,
讀取某個字段等純技術性的操作, 而應該是得到用戶A的基本信息等具有業務含義的操作. dao(data access
object)層存在的意義在于將與數據持久化相關的函數調用剝離出去, 提供一個具有業務含義的封裝層. 原則上說,
dao層與utils等幫助類的功能非常類似, 只是更加復雜一些, 需要依賴更多的對象(如DataSource,
SessionFactory)等. 如果不需要在程序中屏蔽我們對于特定數據持久層技術的依賴, 例如屏蔽對于Hibernate的依賴,
在dao層我們沒有必要采用接口設計. 一些簡單的情況下我們甚至可以取消整個dao層, 而直接調用封裝好的一些通用dao操作函數,
或者調用通用的EntityDao類等.
程序開發的過程應該是從業務對象層開始的,
并逐步將純技術性的函數調用剝離到外部的幫助類中, 同時我們會逐漸發現一些業務操作的特定組合也具有明確的含義, 為了調用的方便,
我們會把它們逐步補充到service層中. 在一般的應用中, 業務邏輯很難穩定到可以抽象出接口的地步,
即一個service接口不會對應于兩個不同的實現, 在這種情況下使用接口往往也是沒有必要的.
在使用spring的情況下原則上應該避免使用getBean的調用方式, 應該盡量通過注入來獲得依賴對象, 但有時我們難免需要直接獲取業務對象, 在不使用接口的情況下可以采用如下方式
class TaskService{
public static TaskService getInstance(){
return (TaskService)BeanLoader.getBean(TaskService.class);
}
}
在程序中我們可以直接使用TaskService.getInstance()來得到TaskService對象.通過命名規范的約定, 我們可以從類名推導出spring配置文件中的對象名, 因而不需要使用一個額外的硬編碼字符串名.