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;
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.