0

이것은 일부 생각을하고 방금 POC 작업을 시도했지만 조금은 솔직하게 잃어 버렸습니다.n 계층 응용 프로그램에서 리포지토리 모델 사용

그래서이 연습의 목적으로 전통적인 DAL, BAL & FE 구조가 있습니다.

DAL은 Entity Framework를 통한 내 DB에 대한 참조를 가지고 있으며 이로부터 단일 테이블 JobInfo에 액세스 할 수 있습니다.

인공 간은 DAL 프로젝트를 참조하고이 인터페이스가 있습니다

public interface IJobInfoRepository 
{ 

    IEnumerable<JobInfo> SelectAll(); 
    JobInfo SelectByID(string id); 
    void Insert(JobInfo obj); 
    void Update(JobInfo obj); 
    void Delete(string id); 
    void Save();  
} 

가 그럼이 클래스가 : 내 FE 프로젝트에서

public class JobInfoRepository : IJobInfoRepository 
{ 

    public JobInfoRepository() 
    { 
     _db = new TestEntities(); 
    } 

    public JobInfoRepository(TestEntities db) 
    { 
     _db = db; 
    } 

    private TestEntities _db = null; 

    public IEnumerable<JobInfo> SelectAll() 
    { 
     return _db.JobInfoes.ToList(); 
    } 

    public JobInfo SelectByID(string id) 
    { 
     return _db.JobInfoes.Find(id); 
    } 

    public void Insert(JobInfo obj) 
    { 
     _db.JobInfoes.Add(obj); 
    } 

    public void Update(JobInfo obj) 
    { 
     _db.Entry(obj).State = EntityState.Modified; 
    } 

    public void Delete(string id) 
    { 
     JobInfo existing = _db.JobInfoes.Find(id); 
     _db.JobInfoes.Remove(existing); 
    } 

    public void Save() 
    { 
     _db.SaveChanges(); 
    } 
} 

을 나는 BAL 프로젝트를 참조하십시오. 그러나 이것이 내가 잃어버린 곳입니다. DAL 프로젝트에 대한 FE 액세스를 제공하지 않고 내 JobInfo 엔티티에 대한 가시성을 갖지 않으면 FE 코드가 BAL 프로젝트의 CRUD 연산을 어떻게 수행 할 수 있습니까?

감사합니다,

데이브

답변

1

당신은 두 가지 방법을 사용할 수 있습니다.

  1. 에만 엔티티 정의 (POCO 클래스)를 보유하고 프로젝트를 만들고 당신이 한 (1) 만 사용 모델에 asyou을 할 수
  2. 모든 프로젝트에서 참조하고 AutoMapper를 사용하여 개체에 매핑 할 수 있습니다 또는 ValueInjecter

2의 장점은 당신의 persisntence layer (DAL)에서 사용되는 엔티티에서 BL 및 FE에 사용 된 모델을 실제로 제거한다는 것입니다. 또한 BL의 모델과 FE에서 표시하거나 편집 할 모델 (예 : MVC의보기 모델 구현)과의 사이에 이러한 혼란을 적용 할 수도 있습니다. 간단한 프로젝트를 구현하는 경우

, 아마 당신은 1. 만족 수 있습니다하지만 당신은 좀 더 복잡한 뭔가를 구현하는 경우 대신, 그런데 2

를 사용하는 것이 바람직 할 수있다 각 엔티티에 대한 리포지토리 구현의 경우 기본 리포지토리 (예 : Repository<T>)를 구현하고 각 엔티티에 상속하여 기본 리포지토리에서 사용할 수없는 다른 기능 만 구현하면 많은 시간을 절약 할 수 있습니다.

EF를 사용하면 DbSet<T> 컬렉션을 사용할 수 있으므로 일반 저장소를 쉽게 구현할 수 있습니다.

+0

단점 2.는 단시간에 매핑 할 시간을 낭비한다는 것입니다. 나는 1과 함께 갈 것이다. –

+0

나는 직장에서 최근에했던 프로젝트에 대해 1 번에서 언급 한 접근 방식을 취했으며, 필요한 것보다 더 적절했다. 그러나 그런 식으로 그 일을 한 이후로 나는 더 나은 방법을 찾고 DAL에서 FE를 완벽하게 분리하기 위해 잔소리를했습니다. – user3742300

+0

AutoMapper 또는 ValueInjector를 사용한 적이 없기 때문에 절대로 사용하지 마십시오. AutoMapper가 꽤 비대해진 것은 사실입니까?이 기사에 대한 기사는 제가 여기에 있습니다 : http://rogeralsing.com/2013/12/01/why-mapping-dtos-to-entities-using-automapper-and -entityframework-is-horrible/ – user3742300

관련 문제