한쪽에서 킬러 응용 프로그램 (ASP.NET MVC)을 작성하고 싶습니다.) 다른 측면에서 "소위"모범 사례를 계속 유지해야한다면 많은 의구심이 있습니다. 비용. 그래서 나는 디자인 질문을 가지고 있으며, 정말로 당신이 나를 도울 수 있기를 바랍니다.도메인 모델 의심
표준 블로그를 상상해보십시오. 최근 게시물 10 개를 보여주고 싶습니다. 내 데이터베이스에 표준
Posts, Categories, Tags, PostTags
테이블이 있습니다. 그래서 자연스러운 결과로, 내 도메인 Post 클래스는 다음과 같은 속성을 갖습니다.
public Category Category { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
나는 POCO를 지원하는 EF4를 사용합니다. 그리고 표준 쿼리 데이터를로드 :
from p in context.Posts.Include("Category").Include("Tags")
select p
을하지만 (예를 들어와 그 2 곳) 전체 포스트 클래스를로드해야하는 이유, 때 페이지에 내가 (게시물 자체 외에) 보여주고 싶은 모든 카테고리 및 각 태그에 대한 링크이므로 필요한 모든 열은
[Categories].[Name], [Categories].[Slug], [Tags].[Name], [Tags.Slug]
입니다.
전체 범주 또는 태그 인스턴스 (데이터베이스의 해당 테이블에 100 개의 열이있을 수 있음)가 필요하지 않습니다! 나는 사이트가 많은 요청을 받으면 문제가되는 것이라고 상상한다. 따라서 모든 열을로드하지 않는 것이 좋을 것입니다 (무서운 피하십시오 SELECT *
).
내 도메인에 새로운 클래스를 추가 할 수 있다고 생각했습니다. ShortPost. 하지만 내 도메인이 아니라고 느낍니다. Post가 모델입니다. ShortPost는 ... 글쎄요, 완전한 Post의 일부입니다. 게다가이 ShortPost는 View를 기쁘게하기 위해 modyfying/domain (Model) 조정과 같은 느낌을줍니다.
총계 : 전체 모델 인스턴스를로드해야 할 때 뷰 측면에서 전체 개체가 필요하지 않습니까? 선호하는 솔루션/방법/기타에 대해 알려주실 수 있습니까?
OK, 그 대답입니다 ...하지만 반대 논쟁으로 저는 다음과 같이 말할 것입니다 : 전체 인스턴스 (예 : 데이터베이스의 200 열을 의미)를로드하는 것이 속도가 느려지는 것을 두려워합니다. 그리고 웹 응용 프로그램의 성능은 다음과 같습니다. 꽤 중요합니다. – Darmak
캐싱에 대해 완전히 잊어 버렸습니다 ... 그 트릭을 할 것입니다. 대단히 감사합니다 개념 : – Darmak