在業務制定的時候很少會切入快取設計這一環節,畢竟在指標不明確的情況這屬於一種過渡設計.畢竟快取切入有很多手段,在很多時候直接在web進行乙個頁面快取就有著非常高收益的效果.快取是一種橫向的資料處理應用,一般在設計中引入aop,ico的應用元件都可以在後期切入新增.但aop,ico在沒有比較豐富的經驗情況引入會直接增加應用的複雜度和風險.在設計主要介紹一種簡單的設計方式在設計階段引用快取但又不帶來複雜的工作成本.
public class blogservice:inte***ces.iblogservice
public ilistlistcategories()
public blog get(string id)
}
以上是乙個完全不考慮快取應用的情況,一般在前期都這樣做,畢竟完成功能是首要面對的問題.
以list方法為例加入快取處理方式.
public ilistlist(string category, int size, int index, out int pages)
return result;
}
這一平時在開發中看到比較的方式,說實話一開始考慮這樣做的確是增加比較大的工作量,特別在前期階段沒有效能要求的情況,這只會增長工作和延時進度.還有就是快取產品的偶合性也強達不到比較好的秀明度;畢竟開發人員還要學習具體快取產品的api.
可以在設計的時候制定乙個簡單的緩儲存訪問介面.
public inte***ce icached
在設計的時候引入到介面定義中
public inte***ce iblogservice
}
這樣乙個簡單針對邏輯層的cached應用規範就出來了.這樣可以大大降低了開發人員對快取產品依賴;當然這個介面設計的簡陋,在設計時有可能需要考慮超時設定等等.雖然解偶的目的達到了,但使用方便性上還是比較麻煩,工作並沒有多大的減少.
其實在介面針對get定義一些簡單的委託引數可以簡單cache在應用時的**度.
public inte***ce icached
那在編寫邏輯的時候就比較簡單一些
, key);
pages = eo.pages;
return eo.blogs;
}
其實原理比較簡單,就是get內部實現如果相關key不存在的情況直接執行func的方法得到資料,並設定到快取中.以上需要處理一些條件和分頁返回所以感覺會複雜一些.一般**下都簡單.
public textblock getbytitle(string title)
如果再花點小心思,那可以這樣子
public user get(string name)
public user get(string name)
);}
這樣基於在外面套一層cached應用**,裡面的**是不用修改.
通過這樣的設計在邏輯層或其他層面引用快取設計並不會對整個**帶來多大的複雜度變化,剛開始完全可以引用乙個完全都不做的icached實現.在後期有需要的話直接更換**.文章裡的icached的設計比較簡陋畢竟只是用於體現這種設計模式而已.如果業務場複雜的情況這個icached所反映的行為引數可能會複雜一些.不過開發人員總會有辦法把複雜的呼叫變成簡單的.
架構設計 業務邏輯層簡述
業務邏輯層是專門處理軟體業務需求的一層,處於資料庫之上,服務層之下,完成一些列對domain object的crud,作為一組微服務提供給服務層來組織在暴露給表現層,如庫存檢查,用法合法性檢查,訂單建立。業務邏輯層包含領域物件模型,領域實體,業務規則,驗證規則,業務流程。1 領域物件模型為系統結構描...
實戰 業務邏輯層
負責處理系統的核心業務,負責對使用者定義的流程進行建模,負責資料訪問層和展示層的通訊,不能因為資料庫的變換而變化,也不能因為終端的變換而變化。bll 業務邏輯 業務邏輯的操作,包括業務處理,呼叫資料訪問,事務等。ibll 業務介面 業務邏輯層的方法對外暴露的介面和服務契約 wfactivitys 工...
業務層設計
專案架構設計,主要考慮的就是後期維護和可擴充套件性 目前主流的設計 連線資料庫 通過乙個類對映表 通過dao,對對映類操作實現表的增刪改查,通過業務層,對多個dao操作,實現業務 業務層 現實中,乙個業務肯定會使用多個表的,所以在dao層設計就不合適,比如 的乙個訂單,不 僅僅訂單變化了就行,還要使...