2013-03-11 3 views
0

다른 공급 업체와 재고를 확인하는 웹 스토어 용 PHP 스크립트를 작성하려고합니다. 불행하게도 그렇게하는 방법은 각 공급 업체마다 완전히 다릅니다. 나는 하나의 작업 루틴을 가지고 있지만, 약간 다른 스크립트를 작성하는 대신 동일한 코어를 사용하고 각 공급자마다 별도의 구문 분석 루틴을 사용합니다. 그런 식으로 새로운 파싱 파일을 작성하고 올바른 위치에 드롭함으로써 새로운 공급자에 대한 지원을 추가 할 수 있습니다. phpclass 내의 함수 선택

나는 원래 공급자는 그 각각에 대해 서로 다른 것 같이, 포함 된 파일 내에있는() getproduct와

class Supplier{ 
    function __construct($sup = "") { 
     $f = "supplier_" . $sup . ".php"; 
     if (file_exists($f)) { 
      include_once $f; 
     } 
    } 
} 

인과

$ref = "123456"; 
$supplier = new Supplier("CompanyOne"); 
$product = $supplier->getproduct($ref); 
echo "Product with supplier reference " . $ref . " is " . $product["name"]; 

같은 것을 예상 것입니다.

그러나 포함 된 루틴이 클래스 자체보다는 생성자의 컨텍스트 내에서 끝나기 때문에이 방법이 효과가 있을지 잘 모르겠습니다.

이것은 일반적인 상황이되어야하지만, include, extend, callbacks 등을 보는 데 오래 동안 보냈으며,이를 수행하는 최선의 방법을 찾기 위해 무엇을하고 싶은지 설명하기 위해 모든 방법으로 검색을 시도했습니다. 아무것도없이 올라가지.

내가 잘못된 나무를 짖고 있습니까? 이 일을하는 가장 좋은 방법은 무엇일까? 내가 런타임까지 이름을 알지 못하는 몇 가지 다른 코드 집합을 포함하고 싶다는 것을 명심해야한다.

+2

이렇게하는 객체 지향적 인 방법은 상속 또는 전략 패턴을 구현하는 것입니다. 따라서 각 고객에 대해'Supplier'에서 상속받은 클래스를 만들고'getproduct' 메서드를 상속 (상속 방식)하거나 GetProductStrategy 클래스 (실제로 서브 클래스 중 하나)를 받아들이는 일반적인'Supplier '를 갖습니다. 제품 (전략 aproach). 나는 더 간단하고 마음이 덜 부끄럽기 때문에 (특히 중학교 프로그래머를 위해) – J0HN

답변

3

왜 각 공급 업체에 대한 수업을 연장하지 않습니까? 각 공급 업체

class Supplier{ 
//do stuff 
} 

class Supplier_FirstCompany extends Supplier{ 
//do similar stuff, but different overwritten functions. 
//still inherits functions from parent so not all need to be overwritten. 
} 
다음

당신도 전달 된 요구 사항/네임 스페이스를 기반으로 파일을로드 할 것이라고 spl_autoload를 사용하여 자동 로더를 설정할 수 그것을 확장하여 기본 클래스가 있습니다. 이것은 아마도 이것을 수행하는 가장 간단한 방법이 될 것입니다.

+0

예. 그렇습니다. 상속을 통해 처리 할 수있는 것과 거의 비슷합니다. 어쩌면 [Interface] (http://php.net/manual/en/language.oop5.interfaces.php)도 믹스에 넣을 수 있습니다. [도메인 모델] (http://martinfowler.com/eaaCatalog/domainModel.html)도 염두에 두며, [PoEAA] (http://martinfowler.com/eaaCatalog/) 웹 페이지의 설명은 약간 있습니다. 간결한. 그러나 나는 당신이 5 개의 'product'객체보다는 어떤 시점에서 어떤 영역 논리를 원할지도 모른다고 상상한다. – ficuscr

+0

@ficuscr 너무 많이하지 마세요. [코드 우주 비행사] (http://www.joelonsoftware.com/articles/fog0000000018.html) 알약 : – J0HN

+0

Word. 제 경험으로는 [요요 문제] (http://en.wikipedia.org/wiki/Yo-yo_problem)와 [빈혈 도메인 모델] (http://en.wikipedia.org)을 이어 받음으로써 더 많은 고통을 겪었습니다./wiki/Anemic_Domain_Model)보다 (또는 심지어 괜찮은 엔지니어링) 오버 엔지니어링. 밖에서 무엇이 있는지 알기 좋습니다. 물론 최선의 방법은 프로젝트에 달려 있습니다. – ficuscr