model-view-controller - 컨트롤러 - 파이썬 mvc




지방 모델, 마른 컨트롤러 및 MVC 디자인 패턴 (2)

방금 MVC에 대한 설명과 함께 블로그 게시물 을 읽었습니다. 몇 달 동안 MVC 프레임 워크 (CakePHP)로 웹 애플리케이션을 개발 한 경험이 있기 때문에 기초를 얻었지만 내 논리를 어디에 두는 지에 대한 잘못된 접근법을 생각하게하는 주제가 생기기 시작했습니다.

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

내 응용 프로그램에서 모델은 식욕 부진 및 컨트롤러 비만입니다. 컨트롤러에는 모든 비즈니스 로직이 있고 모델에는 연결 및 유효성 검사 규칙 외에는 아무것도 없습니다.

컨트롤러를 통해 스캐닝을하면 모델에 있어야 할 많은 로직을 식별 할 수 있습니다.

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

이제 내 질문에 :

  1. 위에서 제시 한 예제를 통해 모델에 속한 컨트롤러에있는 로직의 인스턴스라고 생각하면 올바른 길을 가고 있습니까?
  2. 웹 애플 리케이션에 공통적 인 로직의 다른 영역은 무엇입니까?
  3. 이 문제를 확인하고 디자인 패턴을 변경하는 것이 전쟁의 절반이라고 확신합니다.하지만 위의 예를 들고 그 논리를 모델로 옮기려고해도 어디서부터 시작해야할지 몰라요. 누구든지 여기에 몇 가지 코드를 게시하거나 좋은 학습 리소스에 연결하여 올바른 방향으로 나를 가리킬 수 있습니까? CakePHP만의 도움은 훌륭 하겠지만, MVC로는 충분할 것입니다.

그들 중 일부는 프레임 워크의 특성을 다루기 때문에 (당신이 작업하고있는 것에 관계없이) "올바른"대답을주는 것은 약간 힘듭니다.

적어도 CakePHP 측면에서 :

  1. 데이터 또는 데이터 조작을 다루는 것은 모델에 있어야합니다. CakePHP의 관점에서 간단한 find () 메소드는 무엇입니까? ... 다른 곳에서 필요할 수도있는 "특별한"(즉 특정 '조건'집합) 호출을 할 수있는 기회가 있다면 이는 모델의 메서드를 둘러싸는 좋은 변명입니다.

  2. 불행히도 쉬운 대답은 없으며 코드의 리팩토링은 자연스러운 과정입니다. 때로는 그냥 일어 나기도합니다. "거룩한 마카로니가 모델에 있어야합니다!" (글쎄 어쩌면 당신은 그렇게하지 않지만, 나는 :))


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

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

2) 이러한 클래스를 사용하는 다른 방법을 추가하면 거의 복사 - 붙여 넣기 방식으로 기능을 복제해야합니까? ... 아마 그 기능을 옮길만한 좋은 이유이기도합니다.

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