2009-11-16 5 views
1
내가 생성하고 데이터베이스에 저장되어있는 사용자 친화적 인 URL이

..보기 또는 컨트롤러에 URL을 만들어야합니까?

내가 나에게 URL을 제공하는 헬퍼 클래스가 URL을 얻으려면 ...

이 도우미 메서드는 때때로에 호출 데이터베이스는 .. 내가 컨트롤러의 페이지에 필요한 모든 URL을 생성하고 뷰에게 전달해야의 분리에 따르면 ..

을 URL을 생성하거나 그것의 URL을 생성하는 괜찮습니다 보기?

감사

답변

3

매트 제어기만큼 간단하게 유지되어야한다. 여기

작은 팁입니다 : outloud을 말을하는 것입니다, 때로는 나에게 도움이 무엇 당신은 당신의 코드에 대해 생각

언제 그리고 당신이 outloud 말할 수 (두려움은 미치광이 :-)처럼 보이기에도 불구하고) "생성", "생성", "파괴"- 대부분 컨트롤러에서이 작업을 수행해야합니다. "유효성 검사", "데이터", "복잡한 검색"과 관련하여 코드 조각을 생각하는 경우 대부분 모델에 오프로드해야합니다. 잘 생각한다면이 양식은 5 픽셀 이상이거나 그 버튼이 초록색이어야합니다 -보기입니다.

때로는 혼동을 줄 수 있습니다. 다음은 최근 프로젝트의 예입니다. 특정 부분을 관리자에게 표시하고 일부는 사용자에게 표시하려는 경우 두 가지 방법이 있습니다. 하나는 사용 권한에 따라 컨트롤러에 다른 레이아웃을로드하는 것이며, 다른 하나는보기를 통과 할 때 사용 권한을 확인하는 것입니다. 둘 다 장점이 있습니다. 첫 번째는 mvc가 더 많지만 코드 중복을 만들 것이고 두 번째 방식은 복잡하지 않고 mvc가 적지 만 코드는 계속 DRYer로 유지합니다. 또한 두 번째 접근법을 사용하는 세 번째 접근법이 있습니다. 단 하나의 레이아웃 만 가지지 만 부분 배치로의 이중화 또는 삼중 뷰를 갖는 어려운 부분은 모두 오프로드해야합니다.

희망이 있습니다.

1

URL을 생성하는 프로세스가 (모델과 상호 작용) 꽤 복잡한 보인다 나는 그들이 컨트롤러에서 생성 될 전망이다. 제 생각

이 뷰는이 경우에 가능

+0

... 그것 뿐이다 +1 – bytebender

2

내 0.02 $ : 여기 우려 문제의 실제 분리는 DB가 같은 방법 생성 URI를 호출하고있다. DB 호출을 컨트롤러에 넣고 뷰에서 URI를 생성하십시오. 이런 식으로 뭔가 :

컨트롤러 :

// stuff 
var importantNum = (from d in Repository.SomeData 
        where d.Id == id 
        select new 
        { 
         Num = d.ImportantForUri 
        }).First().Num; 
var model.LinkData = new RouteValueDictionary { { "Important", importantNum" }, 
               { "Constant", "Foo"} // etc 
               }; 
return View(model); 

보기 :

<!-- stuff --> 
<%= Html.ActionLink("Hi there", "ActionName", model.LinkData); 
동의해야
+1

- 플레이가 가능한 한 단순해야한다. 모든 로직은 컨트롤러에 있거나 컨트롤러가 호출해야하는 서비스 (비즈니스 로직)가 있습니다. –

관련 문제