返回目錄
這個抽象類在我之前的文章中也有介紹過,而在“不忘本”系列中的抽象類,將會主要介紹它的概念及與接口的區別。
抽象類不同的普通類,它有自己的標示符abstract,在抽象類裡將可以出現抽象方法,它本身只能充當父類的角色,所以,它在真實的生產過程中,都是通過子類去實現的,即抽象類不能被實例化。前面說的父類有時我們經常叫它基類,比如你的WEB層的controller可能需要一個基類,用來存儲公用的屬性和方法,這時,抽象類是最好的選擇,在frameworks裡有很多這樣的例子,如System.Web.Mvc.Controller這就是一個抽象類,它由一組與控制器相關的方法及屬性組件。
在我們實現項目中,我提倡每個層中都要有自己的基類,用來存儲公用的東西,如controller裡的BaseController,BLL層的BaseBll,data層裡的RepositoryBase等等,它們都是其它功能類的父類。
接口用來約束一組行為,實現接口的對象之前沒有本質聯系,它是一種行為規范,或者是一種標示,通過接口我們可以實現多態!
抽象類一些相關聯的對象的一種抽象,將相關聯的對象的公用信息進行抽象,放到一個類裡,而這個類往往叫它抽象類,用abstract進行標示。
接口是一組行為規范,看一個簡單倉儲接口
IRepository<TEntity> TEntity : IQueryable<TEntity> TEntity Find(
它會叫每個具體的倉儲接口去實現它,如IUserRepository是用戶持久化的接口,同時它也可能被持久化基類去實現,如DbContextRepository,它是使用ef來完成持久化的基類,當然你可以使用MemoryContextRepository去實現IRepository這個接口,當然它的功能就是使用內存表來實現持久化的。
抽象類的代碼展示:
DemoContextRepository<TEntity><TEntity> TEntity : IExtensionRepository<TEntity>成員 Insert(IEnumerable<TEntity> Update(IEnumerable<TEntity> Delete(IEnumerable<TEntity> Update<T>(System.Linq.Expressions.Expression<Action<T>> entity) T : IQueryable<TEntity> GetModel(EntityFrameworks.Entity.Core.Specification.ISpecification<TEntity> IQueryable<TEntity> GetModel(System.Linq.Expressions.Expression<Func<TEntity, >> TEntity Find(System.Linq.Expressions.Expression<Func<TEntity, >> TEntity Find(EntityFrameworks.Entity.Core.Specification.ISpecification<TEntity> BulkInsert(IEnumerable<TEntity> item, BulkInsert(IEnumerable<TEntity> BulkUpdate(IEnumerable<TEntity> item, BulkDelete(IEnumerable<TEntity> Action<EntityFrameworks.Entity.Core.SavedEventArgs> Action<EntityFrameworks.Entity.Core.SavedEventArgs> IOrderableRepository成員 IQueryable<TEntity> GetModel(Action<EntityFrameworks.Entity.Core.Orderable<TEntity>> IQueryable<TEntity> GetModel(Action<EntityFrameworks.Entity.Core.Orderable<TEntity>> orderBy, EntityFrameworks.Entity.Core.Specification.ISpecification<TEntity> IQueryable<TEntity> GetModel(Action<EntityFrameworks.Entity.Core.Orderable<TEntity>> orderBy, System.Linq.Expressions.Expression<Func<TEntity, >> IRepository<TEntity>成員 IQueryable<TEntity> TEntity Find(
上面的抽象類只是一個DEMO,所以實現持久化的邏輯我並沒有實現,當然這並不是它的重點,重點在於你的具體倉儲如果繼承了它,將會以DemoContextRepository這種方式去持久化對象。
返回目錄