저장소 패턴 구현에 대해 많이 읽었으며 엔티티 예측 투영을 어떻게 구현해야합니까?또 다른 저장소 패턴 질문 : 도메인 모델 예측을 다루는 방법?
예를 들어 크고 복잡한 제품 엔티티가 있지만 제품의 이름 만 표시하고 싶은 경우 ID입니다. 어디에서이 프로젝션을 구현해야합니까? 내 엔터티 저장소 또는 호출자 코드에서?
저장소 패턴 구현에 대해 많이 읽었으며 엔티티 예측 투영을 어떻게 구현해야합니까?또 다른 저장소 패턴 질문 : 도메인 모델 예측을 다루는 방법?
예를 들어 크고 복잡한 제품 엔티티가 있지만 제품의 이름 만 표시하고 싶은 경우 ID입니다. 어디에서이 프로젝션을 구현해야합니까? 내 엔터티 저장소 또는 호출자 코드에서?
나는 이것을 저장소에서한다.
예를 들어, 내 ProductRepository 인터페이스는 다음과 같이 보일 것이다 :
ProductView
이
Product
의 단순화 된 표현이다
interface IProductRepository
{
Product Get(int productId);
void Save(Product product);
ProductView FindProducts(string productNameSearch);
}
. (예를 들어 이름과 ID 만 포함).
ProductView를 얻기위한 투영은 추상화되어야하는 것이므로 리포지토리는 imho에게 좋은 장소입니다. 나는 최근에 다음과 같은 패턴까지 꿈꿔 왔던
:이 패턴에서
interface IRepository
{
Product FindByName(string name);
ProjectionType FindByName<ProjectionType>(string name,
Expression<Func<Product, ProjectionType>> selector);
// ...
}
을, 당신은 예를 들어이 같은 LINQ 식을 익명 클래스와 즉석에서 예측 지정할 수 있습니다 :
var productView = repository.FindByName("foo",
p => new { p.SomeProperty, p.SomeOtherProperty });
을
나는 꽤 생각합니다. NHibernate.Linq으로, 구현은 다음과 같습니다
ProjectionType FindByName<ProjectionType>(string name, Expression<Func<Product, ProjectionType>> selector)
{
using(var session = this.sessionFactory.OpenSession()) {
return session.Linq<Product>()
.Where(p => p.Name.Equals(name))
.Select(selector)
.SingleOrDefault();
}
}
면책 조항 : 버그 나 위의 코드 나쁜 스타일의 조심하십시오. 컴파일조차되지 않을 수도 있습니다. 이것은 내 머리 끝에서 나온 것입니다. 그러나 그 생각은 꽤 분명해야한다고 생각합니다.
의견이 있으십니까?
그러나이 패턴은 엔터티 컬렉션과 같은 액세스를 제공하기위한 것입니다 당신이, 저장소 패턴이 방법을 아프게하지 않는,하지 엔티티 전망? –