둘 모두 정당한 방법으로 구현할 수 있습니다. 문제는 무엇을 어떻게 응용 프로그램을 사용자에게 노출해야하는지입니다.
- 모델의 모든 애플리케이션 로직 (따라서 쿼리 언어) 구현 : 그들은 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
}
}
덕분에 의미가 있습니다. –