<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      不忘本~抽象類

      返回目錄

      說在前

      這個抽象類在我之前的文章中也有介紹過,而在“不忘本”系列中的抽象類,將會主要介紹它的概念及與接口的區(qū)別。

      概念:

      抽象類不同的普通類,它有自己的標示符abstract,在抽象類里將可以出現抽象方法,它本身只能充當父類的角色,所以,它在真實的生產過程中,都是通過子類去實現的,即抽象類不能被實例化。前面說的父類有時我們經常叫它基類,比如你的WEB層的controller可能需要一個基類,用來存儲公用的屬性和方法,這時,抽象類是最好的選擇,在frameworks里有很多這樣的例子,如System.Web.Mvc.Controller這就是一個抽象類,它由一組與控制器相關的方法及屬性組件。

      在項目中的抽象類:

      在我們實現項目中,我提倡每個層中都要有自己的基類,用來存儲公用的東西,如controller里的BaseController,BLL層的BaseBll,data層里的RepositoryBase等等,它們都是其它功能類的父類。

      與接口的區(qū)別:

      從概念上來說:

      接口用來約束一組行為,實現接口的對象之前沒有本質聯(lián)系,它是一種行為規(guī)范,或者是一種標示,通過接口我們可以實現多態(tài)!

      抽象類一些相關聯(lián)的對象的一種抽象,將相關聯(lián)的對象的公用信息進行抽象,放到一個類里,而這個類往往叫它抽象類,用abstract進行標示。

      從代碼的角度來說:

      接口是一組行為規(guī)范,看一個簡單倉儲接口

          /// <summary>
          /// 基礎的數據操作規(guī)范
          /// </summary>
          /// <typeparam name="TEntity"></typeparam>
          public interface IRepository<TEntity>
                 where TEntity : class
          {
              /// <summary>
              /// 添加實體并提交到數據服務器
              /// </summary>
              /// <param name="item">Item to add to repository</param>
              void Insert(TEntity item);
      
              /// <summary>
              /// 移除實體并提交到數據服務器
              /// 如果表存在約束,需要先刪除子表信息
              /// </summary>
              /// <param name="item">Item to delete</param>
              void Delete(TEntity item);
      
              /// <summary>
              /// 修改實體并提交到數據服務器
              /// </summary>
              /// <param name="item"></param>
              void Update(TEntity item);
      
              /// <summary>
              /// 得到指定的實體集合(延時結果集)
              /// Get all elements of type {T} in repository
              /// </summary>
              /// <returns>List of selected elements</returns>
              IQueryable<TEntity> GetModel();
      
              /// <summary>
              /// 根據主鍵得到實體
              /// </summary>
              /// <param name="id"></param>
              /// <returns></returns>
              TEntity Find(params object[] id);
          }

      它會叫每個具體的倉儲接口去實現它,如IUserRepository是用戶持久化的接口,同時它也可能被持久化基類去實現,如DbContextRepository,它是使用ef來完成持久化的基類,當然你可以使用MemoryContextRepository去實現IRepository這個接口,當然它的功能就是使用內存表來實現持久化的。

      抽象類的代碼展示:

        /// <summary>
          /// 做為一個持久化機制的實現,它可能是ado.net,linq2sql,entityframeworks,nhibernate,redis,memoryStream,fileStream etc.
          /// 宗旨:我們不應該將數據持久化的方式暴露到業(yè)務(領域)層
          /// 建立倉儲:為每個聚合根建立倉儲接口和實現,而不是為每個實體
          /// 使用倉儲:應該根據使用場景去聲明為倉儲,而不是每次都是IExtensionRepository
          /// </summary>
          /// <typeparam name="TEntity"></typeparam>
          public class DemoContextRepository<TEntity> :
              IExtensionRepository<TEntity>
              where TEntity : class
          {
              #region IExtensionRepository<TEntity>成員
              public void Insert(IEnumerable<TEntity> item)
              {
                  throw new NotImplementedException();
              }
      
              public void Update(IEnumerable<TEntity> item)
              {
                  throw new NotImplementedException();
              }
      
              public void Delete(IEnumerable<TEntity> item)
              {
                  throw new NotImplementedException();
              }
      
              public void Update<T>(System.Linq.Expressions.Expression<Action<T>> entity) where T : class
              {
                  throw new NotImplementedException();
              }
      
              public IQueryable<TEntity> GetModel(EntityFrameworks.Entity.Core.Specification.ISpecification<TEntity> specification)
              {
                  throw new NotImplementedException();
              }
      
              public IQueryable<TEntity> GetModel(System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate)
              {
                  throw new NotImplementedException();
              }
      
              public TEntity Find(System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate)
              {
                  throw new NotImplementedException();
              }
      
              public TEntity Find(EntityFrameworks.Entity.Core.Specification.ISpecification<TEntity> specification)
              {
                  throw new NotImplementedException();
              }
      
              public void BulkInsert(IEnumerable<TEntity> item, bool isRemoveIdentity)
              {
                  throw new NotImplementedException();
              }
      
              public void BulkInsert(IEnumerable<TEntity> item)
              {
                  throw new NotImplementedException();
              }
      
              public void BulkUpdate(IEnumerable<TEntity> item, params string[] fieldParams)
              {
                  throw new NotImplementedException();
              }
      
              public void BulkDelete(IEnumerable<TEntity> item)
              {
                  throw new NotImplementedException();
              }
      
              public event Action<EntityFrameworks.Entity.Core.SavedEventArgs> AfterSaved;
      
              public event Action<EntityFrameworks.Entity.Core.SavedEventArgs> BeforeSaved;
              #endregion
      
              #region IOrderableRepository成員
              public IQueryable<TEntity> GetModel(Action<EntityFrameworks.Entity.Core.Orderable<TEntity>> orderBy)
              {
                  throw new NotImplementedException();
              }
      
              public IQueryable<TEntity> GetModel(Action<EntityFrameworks.Entity.Core.Orderable<TEntity>> orderBy, EntityFrameworks.Entity.Core.Specification.ISpecification<TEntity> specification)
              {
                  throw new NotImplementedException();
              }
      
              public IQueryable<TEntity> GetModel(Action<EntityFrameworks.Entity.Core.Orderable<TEntity>> orderBy, System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate)
              {
                  throw new NotImplementedException();
              }
              #endregion
      
              #region IRepository<TEntity>成員
              public void Insert(TEntity item)
              {
                  throw new NotImplementedException();
              }
      
              public void Delete(TEntity item)
              {
                  throw new NotImplementedException();
              }
      
              public void Update(TEntity item)
              {
                  throw new NotImplementedException();
              }
      
              public IQueryable<TEntity> GetModel()
              {
                  throw new NotImplementedException();
              }
      
              public TEntity Find(params object[] id)
              {
                  throw new NotImplementedException();
              }
      
              #endregion
          }

      上面的抽象類只是一個DEMO,所以實現持久化的邏輯我并沒有實現,當然這并不是它的重點,重點在于你的具體倉儲如果繼承了它,將會以DemoContextRepository這種方式去持久化對象。

      返回目錄

       

      posted @ 2013-12-17 17:05  張占嶺  閱讀(973)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 国产91麻豆视频免费看| 久久久av男人的天堂| 日韩精品一区二区三区日韩| 久久久国产精品樱花网站| 久久久综合香蕉尹人综合网| 色综合激情丁香七月色综合| 国产成人AV一区二区三区在线| 国产亚洲av日韩精品熟女| 久久国产精品夜色| 最近中文国语字幕在线播放| 午夜福利啪啪片| 亚洲天堂男人天堂女人天堂| 四虎国产精品永久在线| 四虎永久免费高清视频| 中文字幕亚洲制服在线看| 五月天国产成人AV免费观看| 精品久久丝袜熟女一二三| 日韩中文字幕v亚洲中文字幕| 五月丁香色综合久久4438| 99午夜精品亚洲一区二区| 潜江市| 国产成人精品无码播放| 少妇人妻偷人偷人精品| 国产精品国语对白一区二区| 精品婷婷色一区二区三区| 蜜臀av一区二区国产精品| 亚洲人成色99999在线观看| 亚洲国产精品久久久久秋霞影院| 久久久久蜜桃精品成人片公司| 草草浮力影院| 石楼县| 军人粗大的内捧猛烈进出视频| 日韩全网av在线| 99久久99久久久精品久久| 九九热视频精品在线播放| 久久婷婷五月综合色和啪| 国产精品第一页中文字幕| 久久婷婷五月综合色国产免费观看| 久久高清超碰AV热热久久| 成人婷婷网色偷偷亚洲男人的天堂| 区一区二区三区中文字幕|