MVC প্যাটার্ন মেনে কোড লেখা

Web Development - কোডইগনাইটার (Codeigniter) - CodeIgniter এর বেস্ট প্র্যাকটিস এবং নিরাপত্তা |

MVC (Model-View-Controller) প্যাটার্ন হল একটি ডিজাইন প্যাটার্ন যা অ্যাপ্লিকেশন কনসার্নের আলাদা আলাদা অংশে বিভক্ত করে, যাতে কোডটি আরও সংগঠিত, রক্ষণাবেক্ষণযোগ্য এবং মডুলার হয়। CodeIgniter এই প্যাটার্নটি অনুসরণ করে, যা ডেভেলপারদের সিস্টেমের বিভিন্ন অংশ আলাদাভাবে পরিচালনা করতে সাহায্য করে।

এখানে MVC প্যাটার্ন মেনে CodeIgniter এ কোড লেখার পদ্ধতি দেখানো হবে:


MVC প্যাটার্নের তিনটি অংশ

  1. Model (মডেল): এটি ডেটাবেস এবং ডেটা সম্পর্কিত সমস্ত কার্যকলাপ পরিচালনা করে। মডেল ডেটাবেসের সাথে যোগাযোগ করে এবং ডেটা সংরক্ষণ, আপডেট, রিট্রিভ বা ডিলিট করে।
  2. View (ভিউ): এটি ইউজার ইন্টারফেস বা অ্যাপ্লিকেশনের আউটপুট প্রদর্শন করে। ভিউ শুধুমাত্র তথ্য প্রদর্শন করে, কোন লজিক বা ডেটা প্রক্রিয়াকরণ করে না।
  3. Controller (কন্ট্রোলার): এটি ইউজারের ইনপুট গ্রহণ করে, মডেলের সাহায্যে ডেটা প্রক্রিয়া করে এবং সেই ডেটা ভিউতে পাঠায়।

CodeIgniter এ MVC প্যাটার্ন মেনে কোড লেখা

১. Model (মডেল) তৈরি করা

Model অ্যাপ্লিকেশনের ডেটা ম্যানেজমেন্টের জন্য দায়ী। এটি ডাটাবেসের সাথে যোগাযোগ করে এবং ডেটা রিট্রিভ, ইনসার্ট, আপডেট অথবা ডিলিট করে।

Example: ProductModel (মডেল)

app/Models/ProductModel.php:

namespace App\Models;

use CodeIgniter\Model;

class ProductModel extends Model
{
    protected $table = 'products'; // টেবিলের নাম
    protected $primaryKey = 'id'; // প্রাইমারি কী
    protected $allowedFields = ['name', 'description', 'price']; // অনুমোদিত ফিল্ড

    // ডেটা রিট্রিভ করার জন্য একটি মেথড
    public function getProducts()
    {
        return $this->findAll();
    }

    // একটি নির্দিষ্ট পণ্য রিট্রিভ করার জন্য
    public function getProduct($id)
    {
        return $this->find($id);
    }

    // পণ্য ইনসার্ট করার জন্য
    public function addProduct($data)
    {
        return $this->save($data);
    }

    // পণ্য আপডেট করার জন্য
    public function updateProduct($id, $data)
    {
        return $this->update($id, $data);
    }

    // পণ্য ডিলিট করার জন্য
    public function deleteProduct($id)
    {
        return $this->delete($id);
    }
}

এখানে, মডেল ডেটাবেস থেকে পণ্য সম্পর্কিত কার্যকলাপ পরিচালনা করে এবং Controller থেকে কল করা হবে।


২. Controller (কন্ট্রোলার) তৈরি করা

Controller হলো অ্যাপ্লিকেশনের লজিক অংশ, যা ইউজারের ইনপুট গ্রহণ করে এবং ভিউতে প্রক্রিয়াকৃত ডেটা পাঠায়। Controller মডেল থেকে ডেটা প্রক্রিয়া করে এবং সেই ডেটা ভিউতে পাঠায়।

Example: ProductController (কন্ট্রোলার)

app/Controllers/ProductController.php:

namespace App\Controllers;

use App\Models\ProductModel;

class ProductController extends BaseController
{
    public function index()
    {
        $model = new ProductModel();
        $data['products'] = $model->getProducts(); // সমস্ত পণ্য রিট্রিভ করুন

        return view('product_list', $data); // ভিউতে ডেটা পাঠানো
    }

    public function view($id)
    {
        $model = new ProductModel();
        $data['product'] = $model->getProduct($id); // নির্দিষ্ট পণ্য রিট্রিভ করুন

        return view('product_detail', $data); // ভিউতে ডেটা পাঠানো
    }

    public function create()
    {
        // ফর্ম ডেটা গ্রহণ
        $data = [
            'name' => $this->request->getPost('name'),
            'description' => $this->request->getPost('description'),
            'price' => $this->request->getPost('price')
        ];

        $model = new ProductModel();
        $model->addProduct($data); // নতুন পণ্য ইনসার্ট করুন

        return redirect()->to('/products'); // পণ্য তালিকায় রিডিরেক্ট
    }

    public function update($id)
    {
        // আপডেট করার জন্য ফর্ম ডেটা
        $data = [
            'name' => $this->request->getPost('name'),
            'description' => $this->request->getPost('description'),
            'price' => $this->request->getPost('price')
        ];

        $model = new ProductModel();
        $model->updateProduct($id, $data); // পণ্য আপডেট করুন

        return redirect()->to('/products'); // পণ্য তালিকায় রিডিরেক্ট
    }

    public function delete($id)
    {
        $model = new ProductModel();
        $model->deleteProduct($id); // পণ্য মুছুন

        return redirect()->to('/products'); // পণ্য তালিকায় রিডিরেক্ট
    }
}

এখানে, ProductController বিভিন্ন অ্যাকশন যেমন index, view, create, update, এবং delete ম্যানেজ করছে। Controller মডেলকে কল করে এবং ভিউতে ডেটা পাঠায়।


৩. View (ভিউ) তৈরি করা

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

Example: product_list (ভিউ)

app/Views/product_list.php:

<h1>Product List</h1>
<table>
    <tr>
        <th>Name</th>
        <th>Price</th>
        <th>Actions</th>
    </tr>
    <?php foreach ($products as $product): ?>
        <tr>
            <td><?= $product['name']; ?></td>
            <td><?= $product['price']; ?></td>
            <td>
                <a href="/product/view/<?= $product['id']; ?>">View</a> | 
                <a href="/product/update/<?= $product['id']; ?>">Edit</a> | 
                <a href="/product/delete/<?= $product['id']; ?>">Delete</a>
            </td>
        </tr>
    <?php endforeach; ?>
</table>
Example: product_detail (ভিউ)

app/Views/product_detail.php:

<h1>Product Detail</h1>
<p>Name: <?= $product['name']; ?></p>
<p>Description: <?= $product['description']; ?></p>
<p>Price: $<?= $product['price']; ?></p>

এখানে product_list.php পণ্যগুলির তালিকা এবং product_detail.php একটি নির্দিষ্ট পণ্যের বিস্তারিত দেখাবে।


MVC প্যাটার্ন মেনে কোড লেখার সুবিধা

  1. কোডের পুনঃব্যবহারযোগ্যতা: মডেল, ভিউ এবং কন্ট্রোলার আলাদা থাকায় একে অন্যের থেকে পৃথকভাবে কাজ করা যায়, এবং একবার তৈরি করা কোড পুনরায় ব্যবহার করা সহজ।
  2. সুসংগঠিত কোড: কোডের লজিক এবং ভিউ আলাদা থাকায় অ্যাপ্লিকেশনটি আরও সুসংগঠিত এবং সহজে রক্ষণাবেক্ষণযোগ্য।
  3. টেস্টিং সহজ: মডেল, কন্ট্রোলার এবং ভিউ আলাদা থাকায় প্রতিটি অংশ আলাদাভাবে পরীক্ষা করা যায়, যা ইউনিট টেস্টিং সহজ করে।
  4. স্কেলেবিলিটি: অ্যাপ্লিকেশন বৃদ্ধি পেলে মডেল, ভিউ এবং কন্ট্রোলার আলাদা থাকার কারণে স্কেল করা সহজ হয়।

সারাংশ

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

Content added By
Promotion