2013-10-16 3 views
1

보기에서 논리가 허용되지 않지만보기에서 LINQ를 사용하도록 허용되는지 궁금합니다.보기에서 LINQ 사용

예 : 팀원을 렌더링하는보기가있는 경우. 동일한보기의 사이드 바에는 톱 스코어 또는 기타를 렌더링하는 위젯이 있습니다. 동일한 플레이어 컬렉션을 사용하고 LINQ를 사용하여 가장 많은 5 명의 플레이어를 목표로 삼을 수 있습니까?

나는 해결책을 찾고 있지 않다. 나는 그것이 LINQ에서 가능하다는 것을 알고 있지만 코딩 지침 (모범 사례)을 따르고 있는가?

업데이트 : 내 응용 프로그램은 처음 보았을 때 간단했습니다. 그래서 내보기를 위해 모델로 내 DomainModels (Entities)를 사용할 수 있다고 생각했습니다. 이제는 내 DomainModels를 완전히 분리하고 빌더를 사용하여 내 뷰 모델을 작성했습니다. 모든 linq 로직이 뷰에서 빌더로 옮겨져 더 깨끗합니다.

+0

어쩌면이 당신을 도와줍니다 : http://stackoverflow.com/questions/8413249/shuould-we-perform-linq-directly-in-asp-net-mvc-views – MUG4N

+0

난 내 컨트롤러에서 확실히이 논리를 할 것이다 보기가 아니라 –

+0

하지만 해결책은 별도의 Topscorers 모델을 만들어 컨트롤러에 채우는 것입니다. 그런 다음 플레이어를 모델로 갖춘 더 큰 모델에 추가하십시오. –

답변

3

어림짐작으로서 웹 응용 프로그램이 HTML을 렌더링하는 대신 XML (또는 JSON 또는 기타)을 반환하는 웹 서비스로 작동하도록 허용한다고 상상해보십시오. 앱이 웹 서비스 역할을 할 때 필요한 로직은 비즈니스 로직의 일부이며 컨트롤러에 있어야합니다. 웹 서비스 모드에서 중복되는 로직은 프리젠 테이션 로직이므로 뷰에 있어야합니다.

웹 서비스가 상위 5 명의 플레이어를 가져와야합니까? 예! 따라서 이것은 비즈니스 논리이므로보기에 있어서는 안됩니다.

+0

좋아, 좋은 설명. 또 다른 질문 : 뷰 모델에서 LINQ를 정의 할 수 있습니까? 이미 팀에 선수가 있기 때문입니다. 따라서 팀에서 현재 플레이어 컬렉션을 반복하고 상위 5 명의 플레이어를 반환하는 함수를 정의한다면? –

+0

ASP.NET MCV 방법론에 익숙하지 않아서 추가 의견을 얻고 싶습니다. RoR에서 모델을 사용하는 모든 사람이 사용할 수 있도록 모델에서 범위 (애정 쿼리의 메서드)를 만듭니다. 컨트롤러는 뷰에 대한 쿼리를 준비하므로 뷰는 범위를 쿼리에 적용 할 수 있습니다. 뷰는 뷰 모델을 통해서만 모델에 액세스 할 수 있기 때문에 MVC.NET에서이를 수행 할 수 없습니다. 또한 로직을 수행하지 않아도되는 컨테이너이기 때문에 뷰 모델에이 메소드를두면 안됩니다. 어쩌면 모델에 메서드를 넣고 뷰 모델의 필드에이 메서드를 씁니 까? –

+0

내 응용 프로그램은 처음 보았을 때 간단했습니다. 그래서 내보기를 위해 모델로 내 DomainModels (Entities)를 사용할 수 있다고 생각했습니다. 이제는 내 DomainModels를 완전히 분리하고 빌더를 사용하여 내 뷰 모델을 작성했습니다. 모든 linq 로직이 뷰에서 빌더로 옮겨져 더 깨끗합니다. 답변/의견을 보내 주셔서 감사합니다. –

3

뷰 로직에서 비즈니스 로직이 아닌 프리젠 테이션 로직이면 아무 문제가 없습니다. 따라서보기에서 linq를 사용할 수 있습니다.

당신의 경우, 최고 득점 선수를 계산할 때, 나는 비즈니스 로직으로 간주 될 것이고, 프리젠 테이션 로직으로 간주되지 않을 것이며, 뷰가 아닌 컨트롤러에서 수행되어야한다고 생각합니다.