2009-12-19 6 views
1

내에서 (하위) 컨트롤러에 액세스 나는이 표현하는 방법을 정말 모르겠지만, 나는 종종 RoR에 응용 프로그램에서 볼 하나 개의 패턴이 같은 것입니다 :ASP.NET : 자원

프로젝트는 프로젝트 자원 내에서 TaskController에 액세스 할 수있는 작업이 있기 때문에/후/postid/댓글/기본적으로 모델에

TASKID

또는

/프로젝트/projectid/작업/commentid.

는 지금은 ASP.NET MVC와 MVCContrib에서 SimplyRestfulRouting를 사용하기 시작했다, 그래서 나는 다음과 같은 형식이 :

경로 => 액션

/{컨트롤러} => 색인()

/{컨트롤러}/{id} =>보기()

나는 모든 세부 사항에 들어 가지 않을 것입니다. 누구든지 Google에 볼 수있는 SimplyRestfulRouting을 할 수 있습니다. 일관성있는 방법이 허용되는지 궁금합니다.

/{컨트롤러}/{컨트롤러}/{ID} 유형 구문.

분명히 이것이 많은 라우트를 설정하는 것보다 구성 스타일보다 규칙적인 것이면 이상적입니다.

답변

0

저는이 개념이 마음에 들면/Project/ProjectId/Tasks로 이동하여 해당 프로젝트의 작업에 대한 필터링 된보기를보고 싶습니다. 그러나 개인적으로 '항목 별'보기 (예 : 세부 정보/표시/업데이트/등)가/Task/TaskId에 돌아온다면 별 상관이 없습니다.

그러나 프로젝트가 없으면 작업이 존재할 수없는 경우와 같이/Project/ProjectId/Tasks/TaskId를 통해 액세스 할 수있는 경우와 같이 "종속"유형의 경우 어떻게 유용 할 수 있는지 확인하십시오.

public ActionResult Tasks(string id) 
{ 
    Project projectToDisplay = Repository.GetProject(id); 
    ViewModel["Tasks"] = Repository.GetTasksForProject(projectToDispaly); 
    return View(projectToDisplay); 
} 

물론,이 강력한 형식의 뷰 모델로 개선 할 수있는 다음과 같이

내 버전을 구현하기 위해, 나는 프로젝트 컨트롤러에서 작업을해야합니다. 하여 저장소에 다음 당신이 단지 수

public Project GetProject(int id) 
{ 
    return _entities.Projects.FirstOrDefault(m => m.Id == id); 
} 

public IList<Task> GetTasksForProject(Project project) 
{ 
    return _entities.Tasks.Where(m => m.Project.Id == project.Id).ToList(); 
} 

또는 엔티티 프레임 워크 :

public Project GetProject(int id) 
{ 
    return _entities.Projects.Include("Tasks").FirstOrDefault(m => m.Id == id); 
} 

그리고 참고로

, 내 저장소 (엔티티 프레임 워크의 특정는) 다음과 같은 코드가 있습니다 컨트롤러는 다음을 필요로합니다 :

public ActionResult Tasks(string id) 
{ 
    return View(Repository.GetProject(id)); 
} 

조금 더 V 뷰 모델.

(주의 :이 코드는 프로젝트/작업 컨텍스트에 맞게 조정되어 있으므로 실제 코드가 아닙니다.이 코드가 작동하지 않거나 오류가 발생하면 사과 드리며 효과적으로 다시 작성했습니다. 오타가있을 수 있습니다.)

+0

나는 점에서이 두 가지 유형의 리소스에 대한 책임, 궁금합니다. –

+0

아마도 "이상적인 솔루션"보다 불완전한 세계에서 해결 방법이라고 생각합니다. 나는 그것이 더 중요한 것이 무엇인지에 달렸고, 당신이 원하는 결과를 얻었거나 현재의 베스트 프랙티스 신념을 위반하지 않았다고 생각합니다. IMHO, 가끔은 "잘못한 길"을 취할 필요가 있습니다. 나는 이상주의보다 사실주의를 우선시한다고 생각한다. 결국 "코드가 추악하기"때문에 필요한 기능을 제공 할 수 없다면 최종 기능은 필요한 기능을 제공하지 못했다는 것입니다. 그냥 내 2 센트 : P (불타는 시작하자 ...) –