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.
ConversionConversion EmoticonEmoticon