Programing

뚱뚱한 모델, 마른 컨트롤러 및 MVC 디자인 패턴

lottogame 2020. 10. 20. 07:13
반응형

뚱뚱한 모델, 마른 컨트롤러 및 MVC 디자인 패턴


방금 은행 업무 비유로 MVC를 설명 하는 블로그 게시물읽었습니다 . 저는 MVC 프레임 워크 (CakePHP)를 사용한 웹 애플리케이션 개발에 대해 몇 달의 경험을 가지고 있으므로 기본 사항을 얻었지만 제 논리를 넣는 위치에 결함이있는 접근 방식을 취하고 있다고 생각하게 만드는 테마를보기 시작했습니다.

  • 뚱뚱한 모델, 마른 컨트롤러
  • 모델에 가능한 한 많은 비즈니스 로직을 유지하십시오.

내 앱에서 모델은 식욕 부진이고 컨트롤러는 비만입니다. 컨트롤러에는 모든 비즈니스 논리가 있고 모델에는 연결 및 유효성 검사 규칙 외에는 없습니다.

컨트롤러를 살펴보면 이제 모델에 포함되어야하는 많은 로직을 식별 할 수 있습니다.

  • 앱에는 항목이 포함 된 목록이 있으며 항목의 순위를 지정할 수 있습니다. 목록을 순위 순으로 정렬하는 정렬 논리는 컨트롤러에 있습니다.
  • 마찬가지로 항목 (항목 모델)에도 이미지 (이미지 모델)가 있습니다. 각 항목에는 기본 이미지가있을 수 있습니다 (item 테이블에서 image_id로 지정됨). 항목이 이미지와 함께 표시되면 기본 이미지가 먼저 표시되어야합니다. 컨트롤러에서이 작업을 수행하는 논리가 있습니다.
  • 목록이 표시되면 관련 목록이 사이드 바에 표시됩니다. 관련된 목록을 결정하는 논리는 컨트롤러에 있습니다.

이제 내 질문에 :

  1. 위에서 제시 한 예를 사용하여 모델에 속한 컨트롤러에 현재 논리의 인스턴스라고 생각하는 것이 올바른 방향입니까?
  2. 모델에 포함되어야하는 웹 앱에 공통적 인 로직의 다른 영역은 무엇입니까?
  3. 이 문제를 파악하고 디자인 패턴을 변경하는 것이 전투의 절반이라고 확신하지만 위에서 제시 한 예제를 사용하여 논리를 모델로 옮기려고해도 어디서부터 시작해야할지 모르겠습니다. 누군가 여기에 코드를 게시하거나 좋은 학습 리소스에 연결하여 올바른 방향으로 나를 가리킬 수 있습니까? CakePHP 특정 도움말은 훌륭 할 것이지만 MVC로 충분할 것이라고 확신합니다.

일부는 프레임 워크의 세부 사항을 다루기 때문에 "올바른"답변을 제공하는 것은 약간 어렵습니다.

적어도 CakePHP의 관점에서 :

  1. 데이터 또는 데이터 조작을 다루는 모든 것은 모델에 있어야합니다. CakePHP의 관점에서 간단한 find () 메소드는 어떻습니까? ... 다른 곳에서 필요할 수있는 "특별한"(즉, 특정 '조건'집합을 회상하는) 작업을 수행 할 가능성이있는 경우 모델의 메서드 내부를 감싸는 좋은 변명입니다.

  2. 안타깝게도 쉬운 답은 없으며 코드 리팩토링은 자연스러운 과정입니다. 가끔 일어나서 "성스러운 마카로니 ... 모델에 있어야합니다!" (글쎄, 당신은 그렇게하지 않을 수도 있지만 나는 :))


내 논리가 올바른 위치에 있는지 확인하기 위해 적어도이 두 가지 '테스트'를 사용하고 있습니다.

1) 단위 테스트를 작성하면 테스트를 수행 할 하나의 '실제'개체 (= 프로덕션에서 사용중인 개체) 만 만들고 값 개체를 제외하고는 다른 개체를 많이 포함하지 않는 것이 쉽습니다. 테스트를 수행하기 위해 실제 모델 객체와 실제 컨트롤러 객체가 모두 필요한 것은 기능을 이동하는 데 필요한 신호일 수 있습니다.

2) 스스로에게 질문하십시오. 이러한 클래스를 사용하는 다른 방법을 추가하면 거의 복사-붙여 넣기와 같은 방식으로 기능을 복제해야합니까? ... 그것은 아마도 그 기능을 옮겨야 할 좋은 이유 일 것입니다.

또한 흥미로운 : http://www.martinfowler.com/bliki/AnemicDomainModel.html

참고 URL : https://stackoverflow.com/questions/467113/fat-models-skinny-controllers-and-the-mvc-design-pattern

반응형