2010-06-13 2 views
1

나는 질의 언어가 컨트롤러 내에 (일반적으로) 그 구성 요소에 속한다고 가정하기를 바랄 것이다.하지만 내가 악마의 옹호자 역할을한다면 쿼리 언어가 모델 도메인 내에서 실행된다고 주장 할 것이다. 해당 구성 요소에 밀접하게 연결되어있어 해당 구성 요소의 일부가 될 수도 있습니다.쿼리 언어는 MVC 패턴 내에 어디에 있습니까?

누구나 답변을 알고 계십니까? 직접적인 대답이 있습니까? 아니면 기술에 특정한 것입니까?

답변

2

둘 모두 정당한 방법으로 구현할 수 있습니다. 문제는 무엇을 어떻게 응용 프로그램을 사용자에게 노출해야하는지입니다.

  • 모델의 모든 애플리케이션 로직 (따라서 쿼리 언어) 구현 : 그들은 Domain Model 구현하는 두 가지 방법을 제공하고, Patterns Of Enterprise Application Architecture에서 (난 정말 그 책을 인용하기 좋아하는, 다시 생각). 따라서 도메인 모델은 매우 특수한 용도로 사용됩니다 (사용중인 백엔드 스토리지에 일부 응용 프로그램 논리 및 종속성이 있으므로 쉽게 다시 사용할 수는 없지만 복잡한 도메인 논리에 더 적합 할 수 있습니다).
  • 응용 프로그램 논리를 다른 계층 (컨트롤러에서 MVC 패턴이나 컨트롤러에서 직접 사용하는 Service Layer이 될 수 있음)에 넣습니다. 이는 대개 모델 개체를 일반 데이터 컨테이너로 만들고 사용자에게 전체 (아마도 복잡한) 도메인 모델 구조를 노출 할 필요가 없습니다 (인터페이스를 가능한 간단하게 만들 수 있음). 코드 예를 들어

:

// This can also be your controller 
class UserService 
{ 
    void save(User user) 
    { 
     user.password = md5(user.password) 
     // Do the save query like "INSER INTO users"... or some ORM stuff 
    } 
} 

class User 
{ 
    String username; 
    String password; 

    // The following methods might be added if you put your application logic in the domain model 
    void setPassword(String password) 
    { 
     // Creates a dependency to the hashing algorithm used 
     this.password = md5(password) 
    } 

    void save() 
    { 
     // This generates a dependency to your backend even though 
     // the user object doesn't need to know to which backend it gets saved 
     // INSET INTO users 
    } 
} 
+0

덕분에 의미가 있습니다. –