হেল্পার বনাম মডেল? আমার কোনটি ব্যবহার করা উচিত?


9

আমি ম্যাজেন্টোতে ইনস্টাগ্রাম এপিআইয়ের সাথে কাজ করছি। আমি আমার ইনস্টাগ্রাম ফলোয়ারদের কুপন দিচ্ছি যদি তারা ইনস্টাগ্রামে আমাদের স্টোরটি অনুসরণ করে।

আমি কার্ল ব্যবহার করে পিএইচপি তে ইনস্টাগ্রামে এপিআই কল করছি। বর্তমানে আমি আমার কাস্টম মডিউলের ভিতরে সহায়ক ফাংশনগুলিতে এপিআই কলগুলি মোড়ানো করছি। আমি কি পরিবর্তে এই কলগুলিকে কোনও মডেলের অভ্যন্তরে কোনও ফাংশনে মোড়ানো করব?

উদাহরণ স্বরূপ. বর্তমান ব্যবহারকারী আমার অ্যাকাউন্ট অনুসরণ করছে কিনা তা নির্ধারণ করতে আমি ইনস্টাগ্রামে একটি এপিআই কল করছি। সুতরাং, আমার নিয়ামকটিতে, আমি আমার সহায়ক ফাংশনে একটি কল করছি যা আমার নিয়ামককে অনুসরণের স্থিতি ফিরিয়ে দেয়। আমার নিয়ামকটিতে, আমি প্রয়োজন পরে আমার মডেলগুলি আপডেট করব।

আমি কি এই এপিআই কলগুলিকে সহায়ক ফাংশনের ভিতরে রেখে সঠিক করছি? আমি কখন মডেলগুলির বিপরীতে সহায়তাকারীদের ব্যবহার করব?

<?php

class Company_SocialCoupons_InstagramController extends Mage_Core_Controller_Front_Action
{
    public function followAction() {

       $status = Mage::helper('socialcoupons/instagram')->getFollow();

       if ($status == 'follows') {

            // 1. ADD DATA TO MY DATABASE using my custom model
            //    - Ex. Mage::getModel('socialcoupons/instagram')->setInstagramId(*IGID*), etc. 
            // 2. CREATE COUPON
            // 3. EMAIL COUPON TO CUSTOMER
       }
}

class Company_SocialCoupons_Helper_Instagram extends Mage_Core_Helper_Abstract
{

public function getfollow() {

    $accessToken = $this->getAccessToken();
    $relationshipsUrl = 'https://api.instagram.com/v1/users/' . $this->getUserId() . '/relationship?access_token=' . $accessToken;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $relationshipsUrl);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $jsonData = curl_exec($ch);
    curl_close($ch);

    $response = json_decode($jsonData, true);
    $status = $response['data']['outgoing_status'];
    return $status;
}

public function generateAccessToken($code) {

    // exchange code for access token
    $accessTokenUrl = 'https://api.instagram.com/oauth/access_token';
    $data = array(
        'client_id'     => $this->getClientId(),
        'client_secret' => $this->getClientSecret(),
        'code'          => $code,
        'grant_type'    => 'authorization_code',
        'redirect_uri'  => $this->getRedirectUri()
    );       

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $accessTokenUrl);
    curl_setopt($ch, CURLOPT_POST, count($data));
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $jsonData = curl_exec($ch);
    curl_close($ch);

    $response = json_decode($jsonData, true);

    if (isset($response['error_type'])) { // no error

        Mage::getSingleton('core/session')->unsInstagramAccessToken();
        Mage::getSingleton('core/session')->addError($response['error_message']);
        return $this->_redirect('*/*/authorize');  
    } 

    $accessToken = $response['access_token'];
    $id          = $response['user']['id'];
    $username    = $response['user']['username'];

    Mage::getSingleton('core/session')->setInstagramAccessToken($accessToken);      

    return array(
        'id'       => $id,
        'username' => $username
    );
}

}

উত্তর:


18

প্রথমে নিজেকে জিজ্ঞাসা করতে হবে কোনও মডেল এবং সহায়কের মধ্যে পার্থক্য কী। সর্বাধিক সাধারণ উত্তর "মডেলের পিছনে একটি টেবিল থাকে"। তারপরে নিজেকে জিজ্ঞাসা করুন "পর্যবেক্ষকরা কেন মডেল হিসাবে তালিকাভুক্ত হন এবং সাহায্যকারী নয়"।

সাহায্যকারীদের অস্তিত্ব থাকা উচিত নয়। তবে সর্বাধিক প্রচলিত অভ্যাসটি হল .. যখন আপনি কোনও কোড কোথায় রাখবেন জানেন না, আপনি এটি কোনও সহায়কতে রেখেছিলেন।
এটি আমার মতে ভুল। সহায়কগুলি ব্যবহার করা ওওপি স্পিরিটের মধ্যে নেই। আপনি কেবল শ্রেণীর ভিতরে কিছু স্বতন্ত্র ফাংশনগুলি গোষ্ঠীভুক্ত করছেন।

তবে যথেষ্ট দার্শনিক কথা
আমি একটি মডেল ব্যবহার করব। মূলত কারণ হেল্পাররা সর্বদা সিঙ্গেলন। Mage::helper()সর্বদা সহায়ক শ্রেণীর একই উদাহরণটি দেয়।
মডেলগুলির জন্য আপনি যা প্রয়োজন তার উপর নির্ভর করে আপনি নতুন দৃষ্টান্ত এবং সিঙ্গেলনগুলি পেতে পারেন। সুতরাং এটি একটি মডেল ব্যবহার করে কিছুটা নমনীয়।

তবে এই নির্দিষ্ট ক্ষেত্রে, আপনার ক্লাসের কেবলমাত্র একটি উদাহরণ প্রয়োজন হলে আপনি সাহায্যকারী বা কোনও মডেল ব্যবহার করতে পারেন। এখানে কোন পার্থক্য নেই. ঠিক কি আপনাকে আরামদায়ক করে তোলে।


এর জন্য ধন্যবাদ. আমি যখন একটি নতুন মডেল শ্রেণি তৈরি করি যা কেবল এপিআই কলগুলি করতে চলেছে তখন কি আমার কি Mage_Core_Model_Abstract বাড়াতে হবে বা আমার কিছু বাড়ানোর দরকার নেই?
অ্যালেক্স লাাকায়ে

3
আপনাকে বিমূর্ত মডেলটি প্রসারিত করার দরকার নেই। তবে আপনি Varien_Object প্রসারিত করতে পারেন। এটি কার্যকর হতে পারে তবে বাধ্যতামূলক নয়
মারিয়াস

2

আমি যুক্তি দিয়ে বলব যে এটি কোনও মডেলের পক্ষে বেশি উপযুক্ত, কারণ এর প্রাথমিক উদ্দেশ্যটি ডেটা অ্যাক্সেস এবং প্রতিনিধিত্ব করা।


2

মডেল:

echo $MyModel->getUserName();

সাহায্যকারী:

echo $MyHelper->getFullname($SomeModelThatImplementsSomeStuff)..

যদি এটির একটি আন্তর্জাতিক অবস্থান থাকে এটি একটি মডেল। যদি এটি সমস্ত গাণিতিক সঠিক ফাংশন, যেমন sin(x)বা এর সাহায্যকারী না হয় str_tolower($text)। কোনও মডেলটির একটি অভ্যন্তরীণ রাজ্য থাকে একটি সহায়ক একটি নির্ভরতা হিসাবে ইনজেকশনের একটি রাষ্ট্র।


1

যদি পদ্ধতিগুলি অনেকগুলি ক্লাস (ব্লক / মডেল / নিয়ন্ত্রণকারী) দ্বারা ব্যবহার করা হয় এবং একাধিক মডেলের মধ্যে সাধারণ হয় তবে একটি সহায়ক হ'ল সুস্পষ্ট পছন্দ।

যদি কোনও একক মডেল তাত্ক্ষণিকভাবে ব্যবহার করা হয় তখন কেবল যদি পদ্ধতিগুলি ব্যবহার করা হয়, তবে সেই মডেলের মধ্যে সঠিক জায়গা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.