MVC: Apa perbedaan antara model dan layanan?


15

Mengapa dalam beberapa kerangka logika lapisan disebut "Model" sedangkan dalam beberapa kerangka disebut "Layanan". Apakah mereka berbeda satu sama lain atau hanya berbeda dengan penamaan konvensi?


PEMBARUAN 1

Alasan saya bertanya adalah karena dalam Zend Framework, kerangka kerja MVC klasik, semua orang menggunakan konsep Model. Sekarang saya sedang belajar AngularJS dan tampaknya kata Model menghilang dan digantikan oleh layanan kata.

Apa yang saya perhatikan adalah bahwa layanan lebih seperti singleton yang dapat digunakan kembali berulang kali (contoh: klien REST) ​​sedangkan model lebih terkait dengan manipulasi data yang berasal dari pengontrol dalam pola MVC.


Berbagi penelitian Anda membantu semua orang. Beri tahu kami apa yang telah Anda coba dan mengapa itu tidak memenuhi kebutuhan Anda. Ini menunjukkan bahwa Anda telah meluangkan waktu untuk mencoba membantu diri sendiri, itu menyelamatkan kami dari mengulangi jawaban yang jelas, dan yang paling utama itu membantu Anda mendapatkan jawaban yang lebih spesifik dan relevan. Lihat juga Cara Meminta
nyamuk

Mengutip Shakespeare: apa yang ada dalam nama, mawar dengan nama lain masih mawar. Model aplikasi Anda mungkin dapat diterapkan sebagai layanan.
jwenting

Jawaban:


22

Model: Bidang yang termasuk objek, metode yang membantu untuk mendapatkan / mengatur data dari objek (pengakses nama lengkap yang mengembalikan nama depan + nama belakang)

Layanan: Metode untuk melakukan operasi dengan satu atau lebih model, lihat 'unit kerja', transaksi, dll ...


Karyawan :: buat hanya harus mengambil satu set data, melakukan validasi model jika perlu, dan mengembalikan Obyek Karyawan.

EmployeeService :: hireEmployee dapat membuat karyawan, mengirim mereka email selamat datang, membuat kotak surat, membuatkan mereka sandwich, dll ... itu dapat mengembalikan set data, atau kode hasil, dll ...


Ini juga dapat memengaruhi validasi:

Validasi Model: Karyawan harus memiliki id, nama depan dan belakang, dan tanggal lahir

Validasi Layanan: Karyawan untuk posisi bartender harus berusia 21 atau lebih, dan disetujui oleh manajer.


Terima kasih atas contoh yang sangat konkret yang menggambarkan betapa rumitnya logika bisnis kata nyata, dan karenanya mengapa lapisan layanan tambahan dapat membantu selain dari lapisan model.
wlnirvana

3

Menurut pengalaman saya, lapisan Model dalam pola desain MVC mengacu pada setiap komponen perangkat lunak yang terlibat dengan manipulasi data (POJO, DAO, semua jalan ke SQL, JDBC, dan sebagainya).

Sedangkan lapisan layanan sebenarnya merupakan tambahan untuk MVC:

Kita tahu bahwa komponen Model layer dipanggil di dalam lapisan Controller . Setelah yang terakhir dibangun, Anda menyadari bahwa itu tidak terlihat ringkas (berantakan dengan kode kotor); Pengontrol mungkin tidak memberikan detail tambahan (mis. memformat parameter permintaan sebelum memanggil metode DAO yang akan mengkonsumsinya ...). Oleh karena itu, Anda dapat menyertakan lapisan tambahan ini, yaitu Layanan lapisan .

Akhirnya, Anda dapat memasukkan kode kotor Anda ke dalam metode statis dengan nama yang bermakna, parameter, dan sebagainya, yang akan menghasilkan lapisan Kontroler sintetis.

Lihatlah tautan ini:

/programming/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2


1
Ini persis bagaimana saya melihat lapisan layanan juga. Tapi kemudian, lebih sering daripada tidak, saya melihatnya digunakan untuk melayani API eksternal ke dalam model bisnis. Kedua skenario yang saya lihat valid. Masalahnya di sini hanya dalam benturan nomenklatur.
burntblark

2

Secara struktural kelas dasar ini adalah sama, namun mereka digunakan untuk mengklasifikasikan keprihatinan yang berbeda dari tingkat Layanan dan Model implementasi MVCS

Service:- A concrete service class defines the API of an external Service.

Model :- Defines the API of the applications data model.

Jadi, sementara kelas dasar sama, kelas konkret yang dibuat dengan memperluas kelas dasar ini melayani dua tujuan yang sama sekali berbeda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.