Derik Whitaker memposting artikel beberapa hari yang lalu yang menyentuh titik yang membuat saya penasaran selama beberapa waktu: haruskah logika bisnis ada di pengontrol?
Sejauh ini semua demo ASP.NET MVC yang pernah saya lihat menempatkan akses repositori dan logika bisnis di pengontrol. Beberapa bahkan melempar validasi ke sana juga. Ini menghasilkan pengendali yang cukup besar dan membengkak. Apakah ini benar-benar cara menggunakan kerangka MVC? Tampaknya ini hanya akan berakhir dengan banyak kode dan logika duplikat yang tersebar di berbagai pengontrol.
asp.net-mvc
design-patterns
controller
business-logic
Kevin Pang
sumber
sumber
Jawaban:
Logika bisnis harus benar-benar ada dalam modelnya. Anda harus membidik model gemuk, pengontrol kurus.
Misalnya, daripada memiliki:
Saya lebih suka memiliki:
Ini mengasumsikan bahwa pajak dihitung oleh layanan eksternal, dan mengharuskan model Anda mengetahui tentang antarmuka ke layanan eksternal Anda.
Ini akan membuat pengontrol Anda terlihat seperti:
Atau semacam itu.
sumber
Saya suka diagram yang disajikan oleh Microsoft Patterns & Practices . Dan saya percaya pada pepatah 'Sebuah gambar bernilai seribu kata'.
sumber
Ini pertanyaan yang menarik.
Saya pikir yang menarik bahwa sejumlah besar contoh aplikasi MVC benar-benar gagal mengikuti paradigma MVC dalam arti benar-benar menempatkan "logika bisnis" seluruhnya dalam model. Martin Fowler telah menunjukkan bahwa MVC bukanlah pola dalam pengertian Gang Of Four. Sebaliknya, itu adalah paradigma bahwa programmer harus menambahkan pola untuk jika mereka menciptakan sesuatu di luar aplikasi mainan.
Jadi, jawaban singkatnya adalah bahwa "logika bisnis" seharusnya tidak tinggal di controller, karena controller memiliki fungsi tambahan untuk menangani tampilan dan interaksi pengguna dan kita ingin membuat objek hanya dengan satu tujuan.
Jawaban yang lebih panjang adalah Anda perlu memikirkan desain lapisan model Anda sebelum memindahkan logika dari pengontrol ke model. Mungkin Anda dapat menangani semua logika aplikasi menggunakan REST, dalam hal ini desain model harus cukup jelas. Jika tidak, Anda harus tahu pendekatan apa yang akan Anda gunakan agar model Anda tidak membengkak.
sumber
Anda dapat memeriksa tutorial mengagumkan ini oleh Stephen Walther yang menunjukkan Memvalidasi dengan Lapisan Layanan .
sumber
Logika Bisnis tidak boleh terkandung dalam pengontrol. Pengontrol harus sekurus mungkin, idealnya mengikuti derai:
Selain itu, pengontrol dapat berisi beberapa logika aplikasi.
Jadi di mana saya meletakkan logika bisnis saya? Dalam Model.
Apa Model? Nah, itu pertanyaan yang bagus. Silakan lihat artikel Pola dan Praktik Microsoft (pujian untuk AlejandroR untuk penemuan yang sangat baik). Di sini ada tiga kategori model:
Tentu saja, MVC adalah paradigma yang hadir dalam variasi yang berbeda. Yang saya jelaskan di sini adalah MVC menempati lapisan atas saja, vide artikel ini di Wikipedia
sumber
Jika Anda menggunakan Dependency Injectors, logika bisnis Anda akan menuju ke sana dan karenanya Anda akan mendapatkan pengontrol yang rapi dan bersih.
sumber