3

MVC의 컨트롤러 작업과 혼동되기 시작했습니다.ASP.NET MVC - 컨트롤러의 작업

나는 5 개 가지 기능 노출하는 서비스가 : 큐

  • GET 패키지
  • 삭제 패키지
  • 에서

    • 목록 패키지 동의 패키지
    • 거부 ​​패키지

    내 ASP.NET MVC 컨트롤러는이 서비스에 의존하며 ca n 일반적으로 작업에 대한 서비스 호출을 실행합니다. 나는 지금까지 행복하다.

    두 번째 부분은 ViewModel 결과를 작성합니다. 컨트롤러 내부에서 이렇게하면 컨트롤러가 폭발하는 종속성 목록을 갖게됩니다. 추가 된 각 동작은 뷰 모델을 작성하기 위해 종속성을 높이며 컨트롤러에 상속됩니다. 나는 이것을별로 좋아하지 않는다. N 개의 다른 뷰 모델 빌더에 의존하는이 컨트롤러를 구축 중이지만 요청 당 하나만 사용하십시오.

    그래서이 모든 것을 꺼내고 각 뷰 모델에 특정한 작업 필터를 적용 할 생각이었습니다. 나는 아직 이것을하지 않았지만 괜찮아 보인다.

    이것이 나를 위해 제기하는 질문은 다음과 같습니다. 컨트롤러의 책임은 무엇입니까? 뷰 모델 구축을 필터로 끌어 들이면 결국 내 컨트롤러는 서비스 호출을 실행하고 필터 플러그인을 제공하는 것보다 조금 더 많은 작업을 수행합니다. 대신 컨트롤러가 각 뷰 모델을 작성해야하는 경우에는 엉망이됩니다.

    요청이 컨트롤러가 아니라 요청마다 거의 인스턴스화하려는 것처럼 보입니다. 필터를 남용하려고합니다.

  • +0

    이 질문은 일부 코드 샘플이 절실히 필요합니다. –

    답변

    4

    전용 ViewModels 및 Poco-Models가 있습니까? 이 경우 ViewModel 내부의 서비스에서 데이터를 처리 할 수 ​​있습니다. 나는이 대참사에 아주 만족합니다. 컨트롤러에서

    public class PackageViewModel() 
    { 
        public PackageDetail{get;set;} 
        public int PackageID{get;set;} 
        public List<Package>Packages{get;set;} 
        public string SomeFilterCriteria{get;set;} 
    
        publlic void FillPackageList(IPackageService packageService) 
        {  
         Packages = packageService.GetPackages(SomeFilterCriteria);  
        } 
    } 
    

    :

    public ViewResult ListPackages(PackageViewModel model) 
    { 
        model.FillPackageList(PackageService); 
        return View("ListPackages",model); 
    
    } 
    

    난 당신이 "보기 모델 빌더"에 의해 무슨 뜻인지 이해하지 말아.

    +0

    "모델 작성자보기"는 DTO의 값을 viewmodel 오브젝트에 지정하는 것을 나타낼 수 있습니다. 저는 현재 컨트롤러에서 이것을하고 있습니다. 올바른 동작인지 아닌지는 확실치 않지만, 볼 수있는 대안은 뷰 모델의 생성자에 DTO를 전달하는 것인데, 확실하지 않습니다. – Sinjai

    2

    컨트롤러는보기에서 발생시키려는 모든 동작을 조율해야합니다. 이 로직을 액션 필터로 끌어 오면, 여전히 경로 별 요청에 대한 로직을 수행하고 있으며, 귀하의 경우에는 더 깨끗해질 것입니다.

    관련 문제