Arsitektur MVC Vs n-tier

142

Saya bertanya-tanya apa sebenarnya perbedaan antara MVC (yang merupakan pola arsitektur) dan arsitektur n-tier untuk suatu aplikasi. Saya mencarinya tetapi tidak dapat menemukan penjelasan sederhana. Mungkin saya agak naif pada konsep MVC, jadi kalau ada yang bisa menjelaskan perbedaannya maka akan lebih bagus.

Bersulang

Arnkrishn
sumber

Jawaban:

94

Arsitektur N-tier biasanya memiliki setiap lapisan yang dipisahkan oleh jaringan. Yaitu lapisan presentasi ada di beberapa server web, kemudian yang berbicara ke backend server aplikasi melalui jaringan untuk logika bisnis, kemudian yang berbicara ke server database, lagi melalui jaringan, dan mungkin server aplikasi juga memanggil beberapa layanan jarak jauh ( katakanlah Authorize.net untuk pemrosesan pembayaran).

MVC adalah pola desain pemrograman di mana bagian kode yang berbeda bertanggung jawab untuk mewakili Model, Tampilan, dan pengontrol di beberapa aplikasi. Kedua hal ini saling terkait karena, misalnya lapisan Model mungkin memiliki implementasi internal yang memanggil basis data untuk menyimpan dan mengambil data. Pengontrol dapat berada di server web, dan memanggil appservers dari jarak jauh untuk mengambil data. MVC meringkas detail tentang bagaimana arsitektur aplikasi diimplementasikan.

N-tier hanya mengacu pada struktur fisik suatu implementasi. Keduanya kadang-kadang bingung karena desain MVC sering diimplementasikan menggunakan arsitektur N-tier.

Zak
sumber
56
N-tier juga merupakan pola desain, Anda tidak perlu 3 server untuk melakukan sistem 3-tier, pada kenyataannya, dimungkinkan untuk melakukan sistem n-tier menggunakan satu file, memisahkan setiap tier dengan konsep konseptual.
Magallanes
6
Tier pada dasarnya menyiratkan bahwa komunikasi antarproses sedang terjadi. Biasanya di seluruh jaringan. Saya tidak setuju bahwa alur desain kode dalam proses (apalagi dalam file yang sama) merupakan pendekatan desain berjenjang. Tentu saja itu IMHO. "Server" menyiratkan bahwa mesin dapat menjalankan beberapa proses pada kotak yang sama; dan mereka bahkan mungkin masih dapat berbicara di jaringan "localhost".
Zak
2
Semua format yang dibahas adalah contoh desain 3 layer. Jangan bingung perbedaan antara layer dan tier. Memang benar bahwa Anda dapat menjalankan lebih dari satu tier pada mahcine fisik (misalnya Anda membagi server besar melalui hypervisors), tetapi intinya di sini adalah N-Tier menyamakan ke hop jaringan fisik (misalnya TCP / IP). Secara lokal Anda akan lebih efisien untuk menggunakan pipa bernama, tetapi sekali lagi, jika Anda menjalankan pada sistem yang sama Anda bersaing untuk memori dan kekuatan pemrosesan. Semua ini adalah alasan untuk mempertimbangkan isolasi presentasi, Logika Bisnis & Akses Data, dan database pada mesin yang berbeda.
Zack Jannsen
1
Saya akan merekomendasikan siapa pun yang membaca pertanyaan ini untuk membaca jawaban lain, jawaban ini tidak akurat
keisar
@magallanes, Pergi dengan 'Zak', pertama kita harus menghapus perbedaan antara Tier dan Layer Di sini adalah artikel
proyek codep yang
42

Jika desain 3-tier seperti ini:

Client <-> Middle <-> Data

derai MVC adalah:

     Middle
     ^    |
     |    v
Client <- Data

Yang berarti bahwa:

  • dalam padanan 3-tier, komunikasi antar lapisan adalah dua arah dan selalu melewati tier Tengah
  • dalam padanan MVC komunikasi itu searah ; kita dapat mengatakan bahwa setiap "lapisan" diperbarui oleh lapisan di sebelah kiri dan, pada gilirannya, memperbarui lapisan di sebelah kanan - di mana "kiri" dan "kanan" hanyalah ilustrasi

PS Client akan menjadi View dan Middle the Controller

kosong
sumber
13
di MVC dapatkah model berinteraksi langsung dengan klien (tampilan) ??? Saya kira tidak!
palAlaa
6
@Alaa, saya setuju dan itulah mengapa saya pikir itu mengacu pada aliran data. Pembaruan: Saya baru saja memeriksa Wikipedia, dan Model dapat berinteraksi dengan View melalui pengamat (tidak langsung).
batal
1
Dalam MVC: Arsitektur MVC berbentuk segitiga: tampilan mengirimkan pembaruan ke controller, controller memperbarui model, dan tampilan diperbarui secara langsung dari model. Dalam Three Tier: Arsitektur tiga tingkat adalah tingkat klien yang tidak pernah berkomunikasi secara langsung dengan tingkat data Dalam model Three-tier semua komunikasi harus melewati tingkat tengah
ketan italiya
1
Di sini jika Middle adalah pengontrol maka komunikasi antara Middle, Client dan Middle, Data dua arah bukan searah seperti dijelaskan dalam ans .. Pengontrol meneruskan data ke model dan model mengembalikan kembali data yang diperbarui ke pengontrol yang kemudian mengembalikannya ke browser setelah melewati tampilan.
Naga
30

Inilah yang dikatakan tentang arsitektur n-tier

Sepintas, ketiga tingkatan tersebut mungkin tampak mirip dengan konsep MVC (Model View Controller); Namun, secara topologi mereka berbeda. Aturan mendasar dalam arsitektur tiga tingkat adalah tingkat klien tidak pernah berkomunikasi secara langsung dengan tingkat data; dalam model tiga tingkat semua komunikasi harus melewati tingkat middleware. Secara konseptual, arsitektur three-tier adalah linear. Namun, arsitektur MVC berbentuk segitiga: View mengirimkan pembaruan ke Controller, Controller memperbarui Model, dan View diperbarui secara langsung dari Model.

Xinus
sumber
11
Kedengarannya bagus, tapi saya tidak percaya "View diperbarui secara langsung dari Model" adalah ide yang bagus. Tidak masuk akal untuk menggunakan Controller untuk pembaruan dan sisipan, tetapi tidak untuk pemilihan dan filter, dan saya tidak melihat titik pemisahan masalah hanya untuk mengikat pandangan ke model! Kesimpulan - MVC adalah salah satu dari kebingungan yang dibuat oleh .... tebak. Saya tidak ingat 3-tier terbatas pada "arsitektur sistem" atau "desain aplikasi". Konsep sentral adalah pemisahan keprihatinan .
Sam
1
Itu akan tergantung pada apa yang Anda lakukan. Aplikasi MVC untuk aplikasi iOS (yang kemungkinan tidak akan memungkinkan tampilan diperbarui langsung dari Model) akan berbeda dari aplikasi Web (yang mungkin). MVC adalah paradigma, bukan cara mutlak dalam melakukan sesuatu.
Dave Kanter
2
@ Sam sepenuhnya setuju. Terlalu banyak jargon untuk konsep yang intuitif.
smwikipedia
1
kedengarannya bagus, tidak bekerja. Wikipedia bukan sumber utama kebenaran
ACV
Begitulah cara Anda menafsirkan kebenaran, dan sekali lagi itu tergantung pada apa tujuan Anda
Xinus
17

Satu-satunya kesamaan adalah bahwa kedua pola memiliki tiga kotak di diagram mereka. Pada dasarnya mereka sangat berbeda dalam penggunaannya. Jika faktanya, biasanya tidak ada pilihan antara pola mana yang akan digunakan, tetapi kedua pola tersebut dapat digunakan bersama secara berbahaya. Berikut adalah perbandingan keduanya: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html

allthingscs
sumber
3
Saya pikir ini adalah jawaban terbaik, terutama karena MVC benar-benar fokus pada UI, dan itu bisa menjadi tier UI Anda dalam desain 3 tier. Diagram di tautan menunjukkan ini dengan sangat baik.
Alex
5

Aturan mendasar dalam arsitektur three-tier adalah tingkat klien tidak pernah berkomunikasi secara langsung dengan tingkat data; dalam model tiga tingkat semua komunikasi harus melewati tingkat middleware.

Ini arsitektur kapal. Ini menjawab pertanyaan tentang bagaimana cara menyampaikan informasi antara pengguna dan database. Dimana MVC adalah arsitektur segitiga: View mengirimkan pembaruan ke Controller, Controller memperbarui Model, dan View diperbarui secara langsung dari Model. Ini menjawab pertanyaan tentang bagaimana antarmuka pengguna mengelola komponen di layar.

pooja gupta
sumber
5

@Cherry Middle ware berfungsi lebih seperti penangan permintaan atau pengalihan dalam Pola MVC.

Saya ingin menjelaskan sedikit tentang MVC, Menurut saya Model View Controller berfungsi seperti ini.

  1. Klien memulai sesi dengan meminta layanan apa pun.
  2. Permintaan ini diterima dan ditangani oleh Pengendali (Request handler, redirector dll)
  3. Kontroler memproses info dasar pada permintaan dan mengarahkannya ke Model yang relevan yang dapat mengisi permintaan data.
  4. Model mengisi permintaan sesuai dengan parameter yang diteruskan oleh Kontroler dan mengirimkan kembali hasilnya ke Kontroler. (Catatan: Di sini saya ingin menghapus bahwa data tidak langsung dikembalikan ke klien dalam arsitektur MVC yang sebenarnya, melainkan mengisi dan kembali ke pengontrol.)
  5. Pengontrol daripada mengirim data itu ke Lihat (Klien).
  6. Klien memiliki layanan yang diminta di depannya.

Itu semua tentang MVC yang saya tahu.

Aqeel Ahmad
sumber
1
Saya pikir, seperti dikatakan di atas, MVC berbentuk segitiga, sehingga View kadang-kadang dapat berbicara langsung dengan Model dan sebaliknya, seperti yang dijelaskan dalam dokumen ini: msdn.microsoft.com/en-us/library/ms978748.aspx
ychaouche
5

Beri dirimu istirahat. Dan jangan membatasi diri Anda pada pola tertentu saat memecahkan masalah dunia nyata. Ingat saja beberapa prinsip umum, salah satunya adalah SEPARASI PERHATIAN .

smwikipedia
sumber
4

Selain linier, perbedaan utama lain yang tidak cukup ditekankan di sini adalah bahwa dalam model N-tier, N tidak selalu 3-tier! Ini paling sering diimplementasikan sebagai tiga tingkatan (presentasi, aplikasi, data) dengan lapisan tengah memiliki dua sub-tingkatan (logika bisnis dan akses data). Juga, model dalam MVC dapat berisi data dan logika bisnis untuk manipulasi data, sedangkan ini akan berada di tingkatan yang terpisah di n-tier.

Alkema
sumber
3

Arsitektur N-Tier paling baik didefinisikan menggunakan Diagram Penempatan.

Arsitektur MVC paling baik didefinisikan menggunakan Sequence Diagram.

2 tidak sama dan tidak terkait dan Anda dapat menggabungkan dua arsitektur bersama. Banyak perusahaan telah mengambil langkah-langkah untuk menciptakan arsitektur N Tier'd untuk tidak hanya penyebaran dan skalabilitas, tetapi untuk penggunaan kembali kode juga.

Misalnya, objek Badan Usaha Anda mungkin perlu dikonsumsi oleh aplikasi desktop, layanan web yang terbuka untuk klien, aplikasi web, atau aplikasi seluler. Cukup menggunakan pendekatan MVC tidak akan membantu Anda menggunakan kembali apa pun.

Ed DeGagne
sumber
Jika mvc tidak menggunakan kembali apa pun untuk skenario Anda, maka adakah manfaat mvc dibandingkan dengan n tier arch.
Naga
2

Kesimpulan: N-tier adalah arsitektur, MVC pola desain. Mereka adalah metafora yang sama diterapkan dalam dua bidang yang berbeda.

ychaouche
sumber
1

Jerry: Berikut adalah contoh sederhana bagaimana keduanya terkait:


Tingkat 1 - Terdiri dari Model yang berkomunikasi dengan Tingkat 2 melalui semacam layanan jaringan atau yang sejenisnya, pengontrol untuk menangani validasi input, perhitungan dan hal-hal lain yang relevan untuk tampilan. Dan itu berisi pandangan itu sendiri, tentu saja - yang dapat menjadi GUI di aplikasi desktop, atau antarmuka web di aplikasi web.


Tingkat 2 - Berisi semacam layanan atau cara lain untuk menerima pesan dari Tingkat 1. Tidak / tidak seharusnya tahu tentang Tingkat 1, jadi hanya dapat menjawab panggilan dari atas - jangan pernah menanyakan hal-hal dengan sendirinya. Juga mengandung semua logika bisnis.


Tingkat 3 - Berisi model domain, representasi objek dari database dan semua logika untuk berkomunikasi dan memperbarui entri-database.

Arve Systad
sumber
1

Dalam model tiga tingkat semua komunikasi harus melewati tingkat menengah. Secara konseptual, arsitektur three-tier adalah linear. Namun, arsitektur MVC [model-view-controller] berbentuk segitiga: tampilan mengirimkan pembaruan ke controller, controller memperbarui model, dan tampilan diperbarui secara langsung dari model.

hassan ketabi
sumber
Sebenarnya ini bukan MVC, ini MVVMC. Saya melihat bahwa MVC atau MVVMC hanyalah lapisan presentasi karena saya melihat controller hanyalah middleware antara pandangan dan BLL. Ini adalah bagaimana saya akan mempertahankannya sehingga saya bisa menggunakan BLL sebagai perpustakaan untuk membuat UI untuk platform yang berbeda. Ini semacam aspx.cs dengan dukungan asmx. Saya kadang-kadang merasa MVC adalah cara yang buruk untuk mengatur file dalam folder proyek, agak sulit untuk dipahami karena semua pengontrol akan berada pada satu level dan dilihat dalam subfolder. Saya juga dapat membuat subfolder untuk pengontrol tetapi duplikatnya berfungsi.
Nithin B