Розніца паміж мадэллю і назіральнікам

У мяне ўзнікаюць праблемы з разуменнем розніцы паміж назіральнікам і мадэллю. Ці з'яўляюцца яны на самой справе тое ж самае?

Напрыклад, у мяне ёсць мадэль, якая экспартуе заказы. У мяне ёсць назіральнік, які праслухоўвае падзеі (напрыклад, змешчаных заказ), а затым ёсць код у кантролеры патэлефанаваць мадэлі экспартнага замовы.

Цяпер у мяне ёсць кантролер, які я хачу, каб выканаць тую ж самую функцыю (экспарт заказаў на аснове перададзенага запыту).

Ці магу я проста стварыць асобнік назіральніка (які ўжо ёсць метад для выкліку мадэлі экспарту), або мне трэба зрабіць, каб стварыць код яшчэ раз, каб стварыць мадэль?

1

6 адказы

Мадэль складаецца з фактычнай схемы. [Дадзеныя і поле].

З вашага кантэксту

<�Р> У мяне ёсць назіральнік, які праслухоўвае падзеі (напрыклад, змешчанага замовы)

Усё, што праслухоўвае падзеі, і г.д. з'яўляецца тое, што роля «<�моцны> кантролер ». Такім чынам, мадэль з'яўляецца <�моцны> зусім розныя ад назіральніка.

2
дададзена

З пункту гледжання вызначэнняў: -

З пункту гледжання выкарыстання ў Magento

  • Models

    • Models extends ( another model classes ) or ( abstract class Mage_Core_Model_Abstract ) so it has Base class and method shared,extended,implemented from that base class.

    • Usually Models in Magento are associated with database tables and it implements ORM through Resources and Collection

    • XML Declaration :

    --

    
    ..............
    
        
            Package_Modulename_Model
            Modulename_resource
        
        
            Package_Modulename_Model_Mysql4
            package_modulename_mysql4
            
                 
                    <table>db_table</table>
                
            
        
    
    ........
    
    
  • Observers

    • Observer are normal classes that implement some method to watch for defined events that happen in during the execution of the script and it execute instructions defined in this methods ( functions ).
    • Observers can be stand alone classes or extends other classes to share some methods from it or any other possible purpose.

    • XML Declaration : Observer doesn't need to declared to be used in magento, you just need to specify the class name and method to be fired based on the dispatched event.

    --

    
        
            
                
                    model
                    Package_Modulename_Model_Observer
                    quoteSaveAfter
                
            
        
    
    

Прыведзеная вышэй інфармацыя з'яўляецца вельмі кароткай, але ён дэманструе прынцыповую розніцу паміж назіральнікам і мадэллю.

Вы павінны прачытаць і на практыцы выкарыстоўваць гэта ў Magento з рознымі варыянтамі выкарыстання, каб мець магчымасць адрозніваць як (праверце вікі-спасылкі і Google некаторыя падручнікі)


У адпаведнасці з заўвагай, што вы хочаце атрымаць доступ да назіральніка ад кантролера, Вы можаце зрабіць гэта па-рознаму

  • Вы можаце напісаць назіральніку Extend (Mage_Core_Model_Abstract) {Вам трэба вызначыць раздзел модуля мадэлі ў config.xml модуля}, тады вы зможаце атрымаць доступ да назіральніка, як нармальная мадэль Mage :: getModel ( 'имя_модуля/ModelName');

  • Напісаць назіральніка як звычайны клас PHP у модулі (напрыклад: Package_Module_Model_Observer), а затым вы заўсёды можаце выкарыстоўваць «новы» аператар, каб стварыць яго асобнік $ класа = новы Package_Module_Model_Observer() </р>

2
дададзена
Дзякуй, што выдатнае тлумачэнне. Так што ў маім выпадку, я хачу мець некалькі метадаў, якія выклікаюць мадэль. Назіральнік павінен мець магчымасць доступу да гэтага метаду (як гэта падзея будзе выклікаць яго), але кантролер павінен таксама мець доступ да гэтых метадаў. Што б лепшы спосаб будзе арганізаваць свой код, так што я павінен толькі паказаць гэтыя метады OneC? Гэтыя метады сапраўды 4 радкі кода, стварыць асобнік мадэлі і г.д.
дададзена аўтар Lock, крыніца
Я рэдагаваў пост, так што адказ на ваша пытанне.
дададзена аўтар Meabed, крыніца

Назіральнік з'яўляецца кантролерам. Яно праслухоўвае азначанае падзея, і калі гэта нават звальняюць, назіральнік кажа мадэль, што рабіць. Мадэль апрацоўвае дадзеныя і кантролер паведамляе, што рабіць з дадзенымі.

У вашым выпадку, я не думаю, што вы б стварыць асобнік назіральніка, а стварыць кантролер і выкарыстоўваць існуючую мадэль экспарту з ім.

0
дададзена

Мадэль паведамляе звязаныя з ім віды і кантралёры, калі адбыліся змены ў сваім стане. Мадэль бізнес-логіка. Мадэль кіруе паводзінамі і дадзены дамен прыкладання, адказвае на запыты аб прадастаўленні інфармацыі пра свой стан (звычайна з пункту гледжання), і рэагуе на каманды змяніць стан (звычайна ад кантролера). Назіральнік з'яўляецца тое, што атрымлівае гэтыя паведамлення і абнаўлення/рэагаваць на яго.

0
дададзена

Model View Controller у Magento рэалізаваны трохі адвольна. У Magento назіральнік проста мадэль, якая мае публічны метад з пэўным параметрам, які змяшчае дадзеныя, якія перадаюцца ад падзеі, так што так, яны адно і тое ж. Вы можаце проста стварыць асобнік і выклікаць той жа самы метад, але вы павінны будзеце прайсці тыя ж дадзеныя, што перадаецца да падзеі.

Напрыклад: у выпадку sales_order_place_after аб'ект замовы перадаецца. Вы маглі б зрабіць нешта накшталт гэтага:

$observer = Mage::getModel(‘yourmodule/observer’);

$observerData->setOrder($order);

$observerData = new Varien_Object();

$observer->exportOrder($observerData);

Here you will find some more details about the issue. This link also offers you a video of a presentation of Andreas von Studnitz and Dr. Nikolai Krambrock about code quality on the Meet Magento DE 2014: http://www.code4business.de/code-qualitaet-magento/

0
дададзена