Membuat Controller dengan Prinsip OOP di ASP.NET MVC Contoh Kasus Reservation

Membuat Controller dengan Prinsip OOP di ASP.NET MVC: Contoh Kasus Reservation

Dalam pengembangan aplikasi berbasis ASP.NET MVC, Controller berperan sebagai jembatan antara model dan view. Dengan menerapkan prinsip Object-Oriented Programming (OOP), kita dapat membuat controller yang modular, reusable, dan mudah dipelihara.

1. Apa Itu Controller dalam ASP.NET MVC?

Controller adalah komponen utama dalam arsitektur MVC (Model-View-Controller). Controller menangani logika bisnis dan mengelola aliran data antara model dan view. Prinsip OOP seperti inheritance, encapsulation, dan polymorphism dapat diterapkan untuk meningkatkan struktur dan fleksibilitas kode.

2. Contoh Kasus: Reservation

Kita akan membuat sistem reservasi sederhana dengan fitur seperti:

  • Menampilkan daftar reservasi.
  • Menambah reservasi baru.
  • Mengedit reservasi yang ada.
  • Menghapus reservasi.

3. Langkah-Langkah Implementasi

a. Membuat BaseController

BaseController digunakan sebagai kelas induk untuk mendefinisikan logika umum yang dapat digunakan oleh semua controller.

 
using System.Web.Mvc;
namespace ReservationApp.Controllers
{
    public class BaseController : Controller
    {
        protected void Log(string message)
        {
            // Logika untuk mencatat aktivitas.
            System.Diagnostics.Debug.WriteLine(message);
        }
    }
}
 

b. Membuat ReservationController

ReservationController mewarisi BaseController untuk memanfaatkan fungsi log dan menambahkan logika khusus untuk pengelolaan reservasi.

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using ReservationApp.Models;

namespace ReservationApp.Controllers
{
    public class ReservationController : BaseController
    {
        private static List reservations = new List();

        // Action untuk menampilkan daftar reservasi
        public ActionResult Index()
        {
            Log("Fetching reservation list.");
            return View(reservations);
        }

        // Action untuk menambah reservasi baru
        [HttpGet]
        public ActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Create(Reservation reservation)
        {
            if (ModelState.IsValid)
            {
                reservation.Id = Guid.NewGuid();
                reservations.Add(reservation);
                Log("New reservation created.");
                return RedirectToAction("Index");
            }
            return View(reservation);
        }

        // Action untuk mengedit reservasi
        [HttpGet]
        public ActionResult Edit(Guid id)
        {
            var reservation = reservations.FirstOrDefault(r => r.Id == id);
            if (reservation == null)
            {
                return HttpNotFound();
            }
            return View(reservation);
        }

        [HttpPost]
        public ActionResult Edit(Reservation reservation)
        {
            var existing = reservations.FirstOrDefault(r => r.Id == reservation.Id);
            if (existing != null && ModelState.IsValid)
            {
                existing.Name = reservation.Name;
                existing.Date = reservation.Date;
                existing.Details = reservation.Details;
                Log("Reservation updated.");
                return RedirectToAction("Index");
            }
            return View(reservation);
        }

        // Action untuk menghapus reservasi
        public ActionResult Delete(Guid id)
        {
            var reservation = reservations.FirstOrDefault(r => r.Id == id);
            if (reservation != null)
            {
                reservations.Remove(reservation);
                Log("Reservation deleted.");
            }
            return RedirectToAction("Index");
        }
    }
} 

c. Membuat Model Reservation

Model digunakan untuk merepresentasikan data reservasi.

 
namespace ReservationApp.Models
{
    public class Reservation
    {
        public Guid Id { get; set; }

        [Required]
        public string Name { get; set; }

        [Required]
        [DataType(DataType.Date)]
        public DateTime Date { get; set; }

        public string Details { get; set; }
    }
}
 

d. Membuat Views

Buat view untuk setiap action (Index, Create, Edit) di folder Views/Reservation.


@model IEnumerable<ReservationApp.Models.Reservation>
<h2>Reservation List</h2>
<table>
    <thead>
        <tr>
            <th>Name</th>
            <th>Date</th>
            <th>Details</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var reservation in Model)
        {
            <tr>
                <td>@reservation.Name</td>
                <td>@reservation.Date.ToShortDateString()</td>
                <td>@reservation.Details</td>
                <td>
                    @Html.ActionLink("Edit", "Edit", new { id = reservation.Id }) |
                    @Html.ActionLink("Delete", "Delete", new { id = reservation.Id })
                </td>
            </tr>
        }
    </tbody>
</table>
<a href="@Url.Action("Create")">Add New Reservation</a>

4. Prinsip OOP yang Diterapkan

  • Encapsulation: Menggunakan BaseController untuk menyembunyikan logika logging.
  • Inheritance: ReservationController mewarisi BaseController.
  • Polymorphism: Action methods seperti Create, Edit, dan Delete menangani berbagai jenis operasi.

Dengan pendekatan ini, kode menjadi lebih terstruktur dan mudah dikembangkan di masa mendatang.

Latest
Previous
Next Post »