2009-12-30 3 views
4

마틴 파울러 (Martin Fowler)의 기업용 애플리케이션 아키텍처 패턴 (독일어, Lazy Load에서 229 페이지)에서 그는 다음과 같은 코드로 예제를 제공합니다.Finder 메소드가 데이터 매퍼 또는 도메인 클래스의 일부가되어야합니까?

public List getProducts() { 
    if (products == null) products = Product.findForSupplier(getID()); 
    return products; 
} 

알 수 있듯이 파인더 방법은 도메인 클래스의 일부로 보입니다 생성물. 어딘가에 (종종 데이터베이스이지만 비즈니스 로직은 신경 쓰지 않아야 함)에서 객체를 가져 오는 것과 관련된 모든 것이 데이터 매퍼 (PersonDataMapper) 클래스의 일부가되어야한다고 생각하기 때문에 약간 혼란 스럽습니다. 아마도 방금 뭔가를 놓친 것일까 요?

+0

독일인이기 때문에 아직 소유하고 있지 않다면 http://www.phpdesignpatterns.de을 구입하시는 것이 좋습니다 – Gordon

답변

3

예제는 지연로드 용 쉬운 방법 입니다. DataMapper를 사용하는 사람은 거의 없습니다. 파울러는 영어 책 (201)에 상태로 :

초기화 지연을 사용하여, 간단하지만 객체와 데이터베이스 사이의 종속성 을 강제하는 경향 않습니다. 이 액티브, 테이블 데이터 게이트웨이행 데이터 게이트웨이에 가장 적합한 이러한 이유로 . 당신이 데이터 매퍼를 사용하여 을 경우에, 당신은 당신이 가상 프록시 [GOF]를 사용하여 얻을 수 있습니다 간접의 추가 계층을해야합니다. 모두에 관해서는

[...]를 DataMapper에 있어야 잘 .. 네,뿐만 아니라 NO. 디자인 패턴을 사용할 때 염두에 두어야 할 점은 언제 사용하고 그렇지 않은 경우입니다. DataMapper는 성배가 아닙니다. 그것을하는 유일한 방법은 아닙니다. 귀하의 응용 프로그램이 웹상에 작고 단순한 CRUD 응용 프로그램 일 때, Data Mapper 및/또는 도메인 모델을 사용하면 복잡성이 증가 할 수 있습니다.

또한 디자인 패턴은 일반 일반적인 소프트웨어 문제에 대한 우수 사례입니다. 콘크리트에 문제를 책에 적었을 때 적용 할 수는 있지만 종교적으로 따라야 할 이유는 없습니다. 패턴의 일부가 문제 해결에 지나치게 복잡 해지면 은 간단하게 유지하십시오. 파생해라. 맞추다. 문제를 풀다.

+0

동의합니다. 어쩌면 DataMapper 패턴이 내 경우에 과잉 개발 일 수 있습니다. 하지만 지금은 내 작은 사이트를 위해 뭔가를 개발하려고합니다. 그 아이디어는 정말 큰/복잡한 아이디어를 얻 자마자 유용 할 것입니다. 나에게 합리적인 소리로 DataMapper에 파인더를 추가하려고합니다.) – openfrog

+0

그게 핵심입니다. 필요할 때 사용하십시오. 당신이 그것을 필요로하지 않는다면, 그것을 버려라. 유혹을 피우고 있지만 앱을 사용하면 가치가있는 것은 아닙니다. – Gordon

관련 문제