현재 새 응용 프로그램에 대한 데이터 액세스 계층 및 비즈니스 논리 계층 클래스를 작성하고 있으며 (분명히) 질문이 있습니다.일반 DAL/BLL 클래스
- 각 "층"다른 클래스 라이브러리와 네임 스페이스 (즉 App.Model, App.DAL에서 분리 모델 클래스와 데이터 액세스에 대한 엔티티 프레임 워크 사용 5 : 첫째, 여기에 도움이 될 몇 가지 세부 사항은 , App.BLL)
DAL로 시작 - 모든 DAL 클래스가 상속하도록 기본 클래스를 작성하기로 결정했습니다.
public abstract class DALBase<T> : IDisposable
{
protected AppEntities context;
protected DbSet set;
public DALBase()
{
context = new OECCORPEntities();
set = context.Set(typeof(T));
}
protected virtual void Save()
{
context.SaveChanges();
}
public virtual void Add(T model)
{
set.Add(model);
Save();
}
public virtual T Get(int id)
{
return (T)set.Find(id);
}
public virtual List<T> GetAll()
{
return set.OfType<T>().ToList();
}
public virtual void Delete(int id)
{
T obj = Get(id);
set.Remove(obj);
Save();
}
public virtual void Update()
{
Save();
}
public void Dispose()
{
context.Dispose();
}
}
기본 클래스는 DAL 클래스가 작업 할 모델의 유형이어야하는 제네릭 형식을 구현합니다. 제네릭 형식을 사용하여 생성자에서 아래의 미리 정의 된 CRUD와 같은 가상 함수 (add, get 등)에 사용되는 generic 인수의 형식을 사용하여 DbSet을 만듭니다.
그리고 나서 아이디어를 얻었습니다. 잠시만 기다려주세요 ... 일반적인 것이므로 모든 단일 모델에 대해 DAL 클래스를 구현할 필요가 없습니다. 다음과 같이 쓸 수 있습니다 :
public class GenericDAL<T> : DALBase<T>
{
public GenericDAL() : base() {}
}
... 어떤 모델에도 사용할 수 있습니다. OK, Business Logic Layer 등등. BLL에 대한 기본 클래스도 만들었습니다.
public abstract class BLLBase<T>
{
protected GenericDAL<T> dal;
public BLLBase()
{
dal = new GenericDAL<T>();
}
public virtual void Add(T model)
{
dal.Add(model);
}
public virtual T Get(int id)
{
return dal.Get(id);
}
public virtual List<T> GetAll()
{
return dal.GetAll();
}
public virtual void Delete(int id)
{
dal.Delete(id);
}
public virtual void Update()
{
dal.Update();
}
}
... GenericDAL을 사용하여 작업을 수행합니다.
public class GenericBLL<T> : BLLBase<T>
{
public GenericBLL() : base() { }
}
그리고 그것을 테스트하는 간단한 콘솔 응용 프로그램 :
class Program
{
static void Main(string[] args)
{
GenericBLL<ADMIN> bll = new GenericBLL<ADMIN>();
List<ADMIN> admins = bll.GetAll();
}
}
... "ADMIN"는이다 그래서 시뮬 방식으로, 난 그냥 같이 보이는 GenericBLL 클래스를 썼다 모델 유형. 매력처럼 작동합니다.
추가 기능을 필요로하지 않는 한 모든 단일 모델에 대해 DAL/BLL 클래스를 작성하지 않아도되는 아이디어가 있습니다. 누군가가 왜 내가 라고 말하면이 이런 식으로하고 싶지 않겠습니까? 일반 DAL/BLL 클래스는 작업을 완료하고 개발 시간을 절약 할 수 있다고 생각합니다.
감사합니다.
오른쪽. 모델이 표준 crud 함수를 더 많이 필요로한다면,이를위한 특정 BLL 클래스를 구현할 것입니다. "모델"에 필요한 많은 기능은 매우 기본입니다. 따라서 일반적인 클래스가 많은 역할을합니다. – zday
맨 처음부터 모든 엔터티에 대한 특정 BLL 클래스를 작성하는 것이 좋습니다. 그것들은 일반 기본 클래스에서 상속받은 스텁이어야합니다. 이렇게하면 이후에 비즈니스 논리를 추가하기로 결정한 경우 유형을 변경할 필요가 없습니다. –
큰 제안 - 많은 의미가 있습니다. 고맙습니다! – zday