我的開發框架(WinForm)2


上篇文章簡單的介紹了一下,我的一個開發框架。看的人還不少,多謝大家的關注,我繼續介紹一下,模塊和模塊之間是怎么組織起來的。

Data模塊:

該模塊主要完成對數據的操作,采用倉儲模式實現,在核心模塊(Core.Data)中定義操作接口和基礎類. 主要的接口有IRepository,IUnitOfWork,IDbCnnFactory。

所有的數據庫操作都是針對實體進行的,一個實體在數據庫中對應一個比,目前為了簡化操作,不考慮實體關聯的操作。這樣更加容易理解,更容易上手。

一、接口的定義

1、IRepository接口,最基本、最重要的接口。通過它完成實體類的增刪改查的操作。

 
 
         
IRepository
2、其中實體類必須繼承EntityBase<Tid>或 EntityBase 類,TId 是指ID的類型,每個實體必須有個主鍵Id,
EntityBase

    3、IDbCnnFactory接口主要完成數據庫連接的維護工作

IDbCnnFactory

    4、IUnitOfWork接口主要實現將多個數據庫操作組合成一個工作單元, 對數據庫來說就是一個事務。

IUnitOfWork

 

另外還有幾個輔助的接口,同樣是在Core.Data中定義

     ISqlRepository:類似於以前的SQLHelper類,它里面只是定義了一些執行sql的方法。

     ITableManager :用於數據表的維護。新建、刪除、重建表操作。
     PageResult<TEntity>:分頁結果類,主要保存 共有多少頁,當前第幾頁,以及當前頁的數據。

     UnitOfWork類:IUnitOfWork接口的實現類。

     IStatRepository:簡單的數據統計.

二、接口的實現

Data.Oracle是針對Oracle數據庫的一個實現。

image

Repository類實現了一下接口一個是默認ID類型的,一個是可自定義ID類型的.

public class Repository<TEntity, Tid> : IRepository<TEntity, id>,IStatRepository<TEntity,Tid>,ISqlRepository 
where TEntity : EntityBase<Tid>, new()
 
public class Repository<TEntity> : Repository<TEntity, Guid>, IRepository<TEntity>, IStatRepository<TEntity>
 where TEntity : EntityBase, new()
   

OracleDbCnnFactory 實現就比較簡單了,和寫ADO.Net一樣.唯一注意的就是增加了MEF的導出標簽

 [Export(typeof(IDbCnnFactory))] ,MEF的使用,園子里有很多好的文章,我就不班門弄斧了

 

三、接口的使用

     比如我設計了一個菜單類,屬性主要有顯示的標題、關鍵字、序號等。

//獲得菜單類操作的Repository
   var rep = ApplicationEx.Container.GetRepository<MenuInfo>();
   //查詢所有可用的菜單,並排序
var ens=  rep.GetEntities(t => t.Enable == true).OrderBy(t=>t.PIndex);
返回的是 IEnumerable<MenuInfo>
 
關於ApplicationEx類,我們后面會介紹到。
通過以上這些接口,我相信90%的數據庫操作,都能滿足。如果你的系統對性能要求比較高的話,我建議直接寫sql+ADO.Net寫,執行效率會更好,也好優化。

我這樣設計也考慮到Web程序的應用,畢竟程序能在web、手機上實現的都會移植過去,單機的項目會越來越少。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM