2011-09-26 5 views
3

내 응용 프로그램의 단계가 수행해야하는 5 가지 작업이 있습니다.모델과 컨트롤러 중 어떤 부분에 들어가는 부분이 있습니까?

  1. 사용자 업로드의 일부로 CSV 파일을받습니다.
  2. CSV의 각 행을 표준 표현으로 구문 분석합니다.
  3. 해당 표현과 관련된 ORM POCO를 만듭니다.
  4. 각 항목을 데이터베이스에 저장하십시오.
  5. 각 POCO에 정의 된 전자 메일 주소로 전자 메일을 보냅니다.

나는 데이터베이스 ORM에 대한 저장소를 이미 가지고 있으며 적어도 컨트롤러가 아마도 자체적으로 SmtpClient를 new'n해서는 안된다는 것을 알게되었지만, 컨트롤러에 들어가는거야? 코드 스 냄새 아래에 내 스 니펫보다 자세한 내용이 노출되어 있습니까?

public ActionResult Index(HttpPostedFileBase file) { 

    var result = model.HandleFileUpload (file); 

    if (result.Success) 
    { 
     return SuccessAction("Success"); 
    } else { 
     return FailureAction("Failure"); 
    } 

} 

이 모든 모델에 속하지 않는 경우, 작업의 종류는 내가 그냥 함께 낮은 수준의 일을 "접착"하고있어 경우라고하고있어 무엇입니까?

답변

3

당신이 설명하는 얇은 컨트롤러는 나에게 꽤 좋아 보인다. 쉽게 테스트 할 수 있으며 모델에서 프로세스의 다른 단계를 처리하는 느슨하게 결합 된 일련의 서비스 클래스를 작성하여 Single Responsibility Principle을 쉽게 준수 할 수 있습니다. 이렇게하면 필요에 따라 MVC 응용 프로그램의 범위 밖에있는 코드를 사용할 수 있습니다.

HandleFileUpload 메서드를 구현하는 FileHandler 클래스를 사용하는 것이 좋습니다. 이것은 아마도 FileParser, RepositoryEmailSender 클래스를 호출하는 프로세스의 단계를 정의합니다. 각 클래스는 인터페이스를 통해 소비되고 FileHandler에 의존성이 주입 될 수 있습니다.

현재 수행중인 작업의 유형은 무엇입니까? 자부심을 가질 수있는 유지 보수 가능한 소프트웨어 개발 :

+0

나는 대답을 더 좋아한다. :) –

+0

이것을 구현 한 후에는 상당한 테스트 가능성을 허용 한 매우 깨끗한 솔루션이다. 따라하기 쉽습니다. –

관련 문제