저는 TDD 프로젝트를 진행 중이므로 가능한 한 이런 종류의 개발에 참여하는 훌륭한 실무자를 고수하려고합니다. 그들 중 하나는 가능한 정적 및 전역을 피하고 있습니다.
이 문제에 직면하고 있습니다. "옵션"(추가 "마이크로 아티클")을 연결할 수있는 "아티클"개체가 있습니다.
나는 모든 것이 분리되어 기본적으로 객체 당 1 개의 쿼리를 작성 해야하는 상황에 있기 때문에 생산적이지 않거나 너무 많은 쿼리를 생성하지 않는 좋은 접근 방법을 알 수 없습니다.
실제 관점에서 볼 때 세 가지 옵션이 있습니다.
1) 기사 내부 빌드 :
class Article
{
//[...]
public function getArrOption(){
//Build an array of Options instance.
//return an array of Options.
}
}
프로 : 똑바로
Const : 유지 관리 : 이제 기사 오브젝트에 Option 오브젝트의 빌드 로직이 포함됩니다. 이것은 아마도 코드 복제로 이어질 것입니다.
2) 옵션 팩토리 사용
class Article
{
//[...]
public function getArrOption(){
return OptionFactory::buildFromArticleId($this->getId());
}
}
장점 : 건축 논리가 기사 클래스에 속하지 않습니다
Const : 기사 클래스를 테스트하기 어렵게 만드는 "정적은 조롱하기 어려운"규칙을 위반하고 있습니다.
3) 모든 논리를 분리하십시오.
//Build the array of Option instance in a controller somewhere, using a Factory:
$arrOption = OptionFactory::buildFromArticleId($article->getId());
찬성 : 기사는 자신의 책임 만 처리하며 옵션에 대한 "아버지"링크는 신경 쓰지 않습니다. 상황이 실제로 분리되어 있습니다
Const : 옵션에 액세스해야 할 때마다 컨트롤러 내부에 더 많은 코드가 필요합니다. 즉 , 객체 내부에서 Factory를 절대 사용 해서는 안되며 , 그 소리는 나에게 우 토프입니다.
가장 좋은 방법은 무엇입니까? (내가 뭔가를 놓쳤습니까?) 감사합니다.
편집하다:
말할 것도없이 클래스 내부에서 팩토리를 호출 할 수 없다면 기본적으로 게으른 초기화 패턴을 절대로 사용할 수 없습니다 ...