前兩天看到Warp framework的介紹它基於Google Guice是一個輕量級的web開發框架它的Dynamic finder特性實在讓人興奮代碼非常簡單支持注入大大簡化了DAO層的開發下面看看它的幾個例子吧:
@Finder(query=from Person)
public List<Person> listAll() { return null; }
@Finder(query=from Person where firstName = :firstName)
Person find(@Named(firstName) String name);
還有更簡單的嗎
在以往的開發過程中為了層次清晰易於測試通常會將業務邏輯層和數據庫訪問層分開看下面的例子
public class UserService
{
public UserService(IUserDAO userDAO){}
}
為什麼要這樣做呢好處是 userDAO能夠依賴注入使用IOC框架管理 對UserService進行單元測試userDAO使用mock工具創建這樣避免了要單元測試還得生成真實數據的問題
但是這樣就產生了一個問題大部分數據表都會有這麼一個DAO對象存在使得DAO層過於龐大當然如果使用泛型的DAO或者抽象出基類就能使代碼量減少這樣也不能解決根本問題Warp提出的Dynamic finder讓人著實興奮自己根本就不需要逐個DAO去實現只需要方法聲明+annotation
這麼好的想法怎麼能不采用呢 於是我花了幾個小時試著用C#來實現並且結合了Linq To Sql如果直接使用SqlCommand來操作數據庫填充實體實現起來會更加簡單現在用Linq To Sql的人越來越多就結合著來寫的結果還不錯代碼看著的確簡潔了很多就是接口+Attribute我使用的數據庫是NorthwindCustomer是Linq To Sql生成出來的EntityType是用來標識對那個實體類進行操作Find用來標識根據主鍵查找對象的方法Delete表示是刪除一個實體Create表示創建一個實體Query表示自定義的查詢字符串現在只是最簡單實現以後可以提供更復雜的查詢條件和寫法
[DomainType(typeof(Customer))]
public interface ICustomDAO
From:http://tw.wingwit.com/Article/program/net/201311/15442.html