2011-01-27 2 views
0

나는 엔터프라이즈 회계 응용 프로그램의 아키텍처를 변경하고 있습니다. IRepositoy <TDataModel> 패턴을 사용 하겠지만 약간의 차이가 있습니다. 기본 IRepository <TDataModel>에서 파생 된 모든 엔티티에 대한 인터페이스를 만들려고합니다. 나의 실체는 고객, 제품 및 주문 인 경우 예를 들어, 그럼 난IRepository <T> 및 Repository-Per-Entity

IClientRepository있을 것입니다 : IRepository <ClientModel>
IProductRepository : IRepository <ProductModel>
IOrderRepository : IRepository <OrderModel>

public interface IRepository<TDataModel, TId> 
{ 
    TDataModel Get(TId Id); 
    IList<TDataModel> List(); 

    TDataModel Add(TDataModel Item); 
    TDataModel Add(TDataModel Item, IContext executingContext); 

    void Update(TDataModel Item); 
    void Update(TDataModel Item, IContext executingContext); 

    bool Delete(TId Id); 
    bool Delete(TId Id, IContext executingContext); 

    IList<TDataModel> Where 
     (System.Linq.Expressions.Expression<Func<TDataModel, bool>> criteria); 
} 


public interface IProductRepository : IRepository<DataModel.Product, int> 
{ 

} 

이유 이 접근 방식을 사용하기 때문에 일부 도메인 모델의 특성을 DAL과 BLL이 아닌 - 예를 들어 일부 엔티티의 CreationDate로 설정하려고합니다. ?)

일부 IRepository < 샘플을 보았지만이 조합을 사용하는 것을 찾을 수 없습니다. 이 일을 하는게 좋을까? 그렇지? 다른 장단점은 무엇입니까?

미리 감사드립니다.

+0

왜 업데이트 방법이 필요합니까? 사용자 지정 빌드 데이터 액세스 계층을 사용하거나 ORM 중 하나에 의존하고 있습니까? –

+0

네, NHibernate를 사용하고 있지만 다른 프로젝트에서도 업데이트 방법이 너무 잘못입니까? – sos00

답변

0

나는 그것이 창조 날짜를 어떻게 생각 하느냐에 달려 있다고 생각합니다. 도메인의 일부입니까, 아니요? 도메인 로직이 값에 의존합니까?

예를 들어, 시스템이 "대신 생성"기능을 필요로합니까 (이 경우 작성자와 생성 날짜는 현재 사용자 및 현재 시간과 동일하지 않습니다). 백업에서 데이터를 복원해도 원래 값을 유지하지 못한다면 어떤 문제가 발생합니까? 생성 날짜가 클라이언트의 시간대, 서버 datetime 또는 데이터베이스 datetime인지 여부가 중요합니까?

위의 모든 답변이 아니오이면 A) 작성 날짜가 도메인의 일부가 아니므로 외부에서 설정할 수 있습니다. B) 정말 필요합니까? 그렇다면 캐시 관리, 변경 알림 등 인프라 관련 문제 만 추측하고 있습니다. 맞습니까?

+0

감사 Addys,이 예제에서 CreationDate는 사용자가 엔티티가 생성 된시기를 알 수있는 유익한 필드입니다. 많은 재무 운영 또한이 날짜에 따라 다릅니다 (예를 들어 계정 생성 시점을 알 필요가있는 계정 관심사를 계산하는 경우)). 이것은 클라이언트/서버 응용 프로그램이므로 전역 속성 인 Utils.ServerCurrentDateTime을 사용하여 엔터티의 CreationDate를 설정합니다. 그러나 모든 시나리오에서 우리는이 필드에 Utils.ServerCurrentDate를 넣었습니다. 그래서 도메인 관련 작업으로 간주하지 않았습니다. – sos00

+0

또 다른 상황이 있습니다. 예를 들어 사용자가 현지 캘린더 (shamsi 캘린더)에서 날짜 필드와 동일한 가치를 알아야하기 때문에 CreationDate 필드 (엔티티 용)가있는 경우 CreationDateSh 해당 엔티티에 대한 CreationDateSh는 어떻게 든 자동 계산됩니다. 왜냐하면 우리는 CreationDate의 shamsi를 이에 담기 만하면되기 때문입니다. 다시 한번 저장소 (repository)의 Insert() 및 Update()를 오버로딩 해, – sos00

관련 문제