0

성능에 대한 높은 요구가있는 인터넷 응용 프로그램과 함께 노력하고 있습니다. 이는 좋은 캐싱 기능이 우리 성공에 중요하다는 것을 의미합니다.엔터티 프레임 워크와 포스트 샤프를 사용하여 캐싱이 필요한 개체 모델을 만드는 옵션에는 어떤 것이 있습니까?

솔루션은 데이터베이스 액세스를위한 Entity Framework Code First와 캐싱을위한 Postsharp로 작성되었습니다. 잠시 동안 모델은 아래와 같이 보입니다.

public class Article 
{ 
    private readonly IProducerOperator _producerOperator; 
    public Article(IProducerOperator operator) 
    { _producerOperator = operator; } 

    public int Id { get; set; } 
    ... 
    public int ProducerId { get; set; } 

    public Producer Producer { 
     get { return _producerOperator.GetProducer(ProducerId); } 
    } 
} 

작업 클래스는 아래와 같습니다.

public class ArticleOperations : IArticleOperations 
{ 
    private readonly IDataContext _context; 
    public ArticleOperations(IDataContext context) 
    { _context = context; } 

    [Cache] 
    public Article GetArticle(int id) 
    { 
     var article = _context.Article.Find(id); 
     return article; 
    } 
} 

public class ProducerOperations : IProducerOperations 
{ 
    private readonly IDataContext _context; 
    public ProducerOperations(IDataContext context) 
    { _context = context; } 

    [Cache] 
    public Producer GetProducer(int id) 
    { 
     var producer = _context.Producer.Find(id); 
     return producer; 
    } 
} 

나는 비즈니스 오브젝트에서 가진 dependendencies 좋아하지 오전하지만 대한 인수는 대부분 ... 캐시에서 게으른 로딩을 가지고하는 것입니다. 이 솔루션은 또한 캐싱이 생산자 ... GetProducer에 한 번만 수행됨을 의미합니다. 일반적으로 나는 거기에 의존성이 있다고 생각조차하지 않을 것입니다. 객체는 POCO 여야합니다. 이 부분에 새로운 입력이 필요합니다. 대신 어떻게 할 수 있습니까? 이것이 최선의 방법입니까?

우리는 또한 반대쪽을 해결해야합니다. 즉 캐시 된 제작자로부터 모든 기사를 검색 할 수 있어야합니다.

답변

0

먼저, postsharp를 사용하여 캐싱과 결합하여 엔티티 프레임 워크 코드를 사용하는 솔루션이 실제로 있습니다. Ideablades는 먼저 Devforce 코드를 먼저 발표했습니다. 이러한 종류의 프레임 워크는 실제로 모든 것을 해결하고 캐싱과 함께 사용할 것으로 예상되는 엔티티 프레임 워크를 사용할 수 있습니다.

그러나이 경우 솔루션이되지 않았습니다. 우리는 우려의 완전한 분리를 향해갔습니다. 비즈니스 객체에만 관심을 기울이면 데이터 만 포함된다는 의미였습니다. 작업 클래스는 비즈니스 객체를 채울 책임이 있습니다.