2013-09-22 16 views
3

현재 전자 상거래 사이트를 개발 중입니다. 우리에게는 공개 및 관리 모듈이 있습니다.코드 중복 방지 방법

때로는 제품보기 또는 주문 생성과 같은 두 기능 모두에서 동일한 기능을 제공합니다. 그러나 제품을 추가하는 것과 같이 공개 또는 관리자 (admin에 있음)에있는 일부 기능도 있습니다.

우리의 문제는 일반적인 기능이 논리의 중복을 초래한다는 것입니다. 우리는 두 모듈 모두에서이를 구현해야합니다.

문제를 해결하는 한 가지 방법은 레이어를 사용하는 것입니다. 그래서 우리가 한 것은 공통 논리를 모델로 옮기는 것입니다. 그러나, 컨트롤러는 같은 여전히 ​​중복 코드는 다음과 같습니다

public function invoice() { 
    $this->Invoice->create(); 

    $this->Invoice->setCustomer($this->getCurrentUser); 

    $invoice_items = // get list of items from post 
    $this->Invoice->setItems($invoice_items); 

    $this->Invoice->save(); 
} 

내 질문은, 그것은이 로직을 캡슐화하는 웹 서비스를 만드는 것이 현명하다 당신은 단지 관리자 및 공공 모듈에서 호출해야 ..

Magento는 공용 패널과 관리 패널을 어떻게 구현합니까? 그리고 어떻게 그것의 논리를 관리합니까?

답변

0

나는 그것을하지 않는 것이 좋습니다. 귀하의 질문에서, 당신이 어떤 종류의 '논리'를 언급하고 있는지 명확하게 알 수는 없지만 귀하의 사례와 너무 복잡하지는 않습니다. 일반적으로 비즈니스 로직은 코드의 모델, 컨트롤러 또는 도우미 부분에 코딩되어야합니다. 확장의 기본 xml 파일에서 종속성을 올바르게 설정하는 경우 별도의 확장에 위치 할 수도 있습니다.

논리를 도우미 클래스에 배치하면 도움이 될 것 같습니다. 기본 도우미 파일은 /app/code/community/company/extension-name/Helper/Data.php 아래에 있습니다. 이 같은

Mage::helper('extension-name')->getLogic() 

아니면 뷰에서 같은 도우미 메서드를 호출 할 수 있습니다 (PHTML 파일) : 그런 다음이 코드 조각을 사용하여 백엔드 어디서나 (블록, 모듈, 또는 컨트롤러) 도우미 메서드를 호출 할 수 있습니다 :

$this->helper('extension-name')->getLogic()