2013-09-22 7 views
3

В настоящее время мы разрабатываем сайт электронной коммерции. У нас есть открытый и административный модуль.Как предотвратить дублирование кода

Иногда мы предлагаем такую ​​же функциональность в обоих модулях, как просмотр продуктов или создание заказов. Но есть также некоторые функции, которые присутствуют в публичном или административном режиме, например, при добавлении продуктов (которые находятся в админке).

Наша проблема заключается в том, что общие функции приводят к дублированию логики. Нам нужно реализовать его в обоих модулях.

Одним из способов решения проблемы является использование слоев. Итак, что мы сделали, это переместить общую логику в Модель. Однако, контроллер продолжает дублирующие коды так, как показано ниже:

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(); 
} 

Мой вопрос, разумно создать WebService, который будет инкапсулировать эту логику, и вы просто должны вызвать его от администратора и общественных модулей ..

Как Magento реализует публичные и административные панели. И как он управляет своей логикой.

ответ

0

Я бы порекомендовал вам не делать этого. Из вашего вопроса не совсем ясно, о какой «логике» вы имеете в виду, но это не кажется слишком сложным из вашего примера. В общем, бизнес-логика должна кодироваться в рамках модели, контроллера или вспомогательных частей кода. Он может даже находиться в отдельном расширении, если вы правильно устанавливаете зависимости в основном XML-файле расширения.

Кажется, что вы можете использовать свою логику в классе помощников. Хелпер-файл по умолчанию находится в каталоге /app/code/community/company/extension-name/Helper/Data.php. После этого вы можете вызвать вспомогательный метод в любом месте во внутреннем интерфейсе (блок, модуль, или контроллеры), используя этот кусок кода:

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

Или вы можете называть один и тот же вспомогательный метод из представления (файлы PHTML), как это :

$this->helper('extension-name')->getLogic() 
Смежные вопросы