ASP.NET MVC 시리즈 프레임워크 구축(二)의 창고층 최적화

12612 단어 asp.net
큰 신은 분출하지 마라, 작은 신은 묵묵히 배운다.
할 줄 아는 것은 언급할 가치도 없는 것이고, 절대로 높고 큰 것은 아니다.
마지막으로 원본 업로드.독자들에게 새로운 인식과 지식을 가져다 줄 수 있기를 바랍니다.
아직 톱에 오른 적이 없다.여러분, 동생을 지지해 주세요.
계속해서 갱신하다.네가 할 때까지 업데이트!!
나는 수다를 떨지 않는다. 나는 단지 중점을 지적할 뿐이다. 지엽적인 것은 댓글로 토론할 수 있다.이 시리즈의 마지막으로, 저는 여러분의 문제를 새로운 Blog에 통일적으로 열거할 것입니다.업무는 계획을 필요로 하고 블로그를 쓰는 것도 마찬가지다.
요구 사항
① EF 컨텍스트의 스레드를 고유하게 유지하십시오.더러운 임시 데이터의 출현을 방지하다
② 프로그램 확장성을 고려하여 설계해 주십시오.나중에 ef 프레임이 Spring 프레임으로 바뀔 수 있음
③ 서비스 층이 창고층을 호출할 때.DBContext는 통합 포털입니다.
③.1 프로그래머의 개발을 편리하게 하고 통일된 입구를 제공한다.ef를 이 입구 안으로 봉합하세요.
③.2 더러운 임시 데이터의 출현을 방지하기 위해'도'는 이 입구의 라인에서 유일하게 유지하십시오.
③.3 이 통일된 입구에서 서비스 층과 창고 층의 결합을 제거해야 한다.
사고의 방향
① ef를 CallContext에 넣습니다.키 값을 형식으로 저장합니다.
② 인터페이스를 향한 생각
공장 인터페이스 + 공장을 신설하다.하나의'공장 방법'모델로'단순 공장'도 아니고'추상 공장'디자인 모델도 아니다.만약 공장의 몇 가지 디자인 모델에 대해 잘 모르신다면, 제가 쓴 디자인 모델 한 편의 블로그를 참고하십시오.
③ ③. 1 새 클래스를 만듭니다. DBContact의 속성 유형은 ObjectContext입니다. 위아래 문장은 ObjectContext를 계승하고'점'은 여러 개의 창고를 계승하기 때문입니다. 
③.2 CallContext에 넣는다.키 값 대 저장.
③.3 새 IDBContact 인터페이스를 생성하여 DBContact를 상속합니다.하나의 공장으로 하나의 인터페이스 공장을 계승하여 창설하다.출하 방법 설계 모델
사상
인터페이스 + 공장 모드 + 라인 유일한 추상적인 방법 공장 역할: 라인 유일한 + 확장성 (인터페이스 대상)
 
상세 정보 코드
ISingleEFCntextFactory.cs
 
using System.Data.Objects;

namespace LKBS.CommunicationPlatform.IDAL
{
 public interface ISingleEFCntextFactory
 {//no public
 ObjectContext GetCurrentEFContext();
 }
}

 
SingleEFCntextFactory.cs
using LKBS.CommunicationPlatform.IDAL;
using System.Data.Objects;//     System.Data.Entity
using System.Runtime.Remoting.Messaging;
using LKBS.CommunicationPlatform.Model;


namespace LKBS.CommunicationPlatform.Factory
{
 public class SingleEFCntextFactory : ISingleEFCntextFactory
 {
  public ObjectContext GetCurrentEFContext()
  {
   //    (  )       。     (  ACTION)    CRUD    ,       .
   ObjectContext callEFContext = (ObjectContext)CallContext.GetData("efContext");//      “   ”
   //    。   new     
   if (callEFContext == null)
   {
    callEFContext = new ModelContainer();
   }
   CallContext.SetData("efContext", callEFContext);
   return callEFContext;
  }
 }
}

BaseRespository.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.Entity;
using LKBS.CommunicationPlatform.Model;
using LKBS.CommunicationPlatform.IDAL;
using System.Data;
using LKBS.CommunicationPlatform.Factory;
using System.Data.Objects;


namespace LKBS.CommunicationPlatform.DAL
{
   public class BaseRespository<T> where T : class,new()
   {
      ISingleEFCntextFactory singleEFFactory = new SingleEFCntextFactory();
      //       ,  “  ”ef        。    ef。 Respositiry db   
      ObjectContext db;//     ,        。                 
      public BaseRespository()
      {
         ObjectContext db = singleEFFactory.GetCurrentEFContext();
      }

      //ModelContainer db = efFactory.GetCurrentEFContext();
      //              、     .
      //           
....CRUD
    }
}

업무 논리층의 호출을 편리하게 하기 위해 통일된 입구를 세우다.
IDBContact.cs
using System.Data.Objects;//       

namespace LKBS.CommunicationPlatform.IDAL
{
  public interface IDBContact
   {
    //       {}
    ObjectContext currentEFContext { get; set; }
    IUserInforRespository userinforResponsity { get; set; }
    //...        , T4    OK
   }
}

DBContact.cs
using LKBS.CommunicationPlatform.IDAL;
using System.Data.Objects;//        
using LKBS.CommunicationPlatform.Factory;

namespace LKBS.CommunicationPlatform.DAL
{
 public class DBContact : IDBContact
 {
  public ObjectContext currentEFContext { get; set; }
  ISingleEFCntextFactory singleEFCntextFactory = new SingleEFCntextFactory();//SingleEFCntextFactory       
  public DBContact()
  {
   currentEFContext = singleEFCntextFactory.GetCurrentEFContext();//
  }
  public IUserInforRespository userinforResponsity { get; set; }
 }
}

ISingleDBContactFactory.cs
namespace LKBS.CommunicationPlatform.IDAL
{
  public interface ISingleDBContactFactory
   {
      IDBContact CreateDBCotactUseEF();
   }
}

SingleDBContactFactory.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using LKBS.CommunicationPlatform.IDAL;
using System.Data.Objects;
using System.Runtime.Remoting.Messaging;
using LKBS.CommunicationPlatform.DAL;


namespace LKBS.CommunicationPlatform.Factory
{
   //    ①      ,②          + using
   class SingleDBContactFactory : ISingleDBContactFactory
   {
      public IDBContact CreateDBCotactUseEF()
      {
         //ObjectContext currentEFContext = new ObjectContext("currentEFContext");
         //return currentEFContext;
         IDBContact dbCotact = (DBContact)CallContext.GetData("currentDBContact");
         if (dbCotact==null)
         {
            dbCotact = new DBContact();
         }
         CallContext.SetData("currentDBContact", dbCotact);
         return dbCotact;

      }
   }
}

 
  

좋은 웹페이지 즐겨찾기