Haruskah saya menggunakan AngularJS dan ASP.NET MVC?

58

Saya mulai belajar AngularJS dan ASP.NET MVC, tetapi saya tidak yakin mengapa harus menggunakan keduanya secara bersamaan dalam proyek yang sama?

Bukankah keduanya kerangka kerja MVC? Haruskah saya menggunakan keduanya dalam aplikasi yang sama? Bukan satu atau yang lainnya?

Natalie
sumber

Jawaban:

74

Jika Anda membuat aplikasi halaman tunggal (SPA) , maka Anda mungkin tidak memerlukan "MVC" di ASP.NET MVC . Tampilan, terutama tampilan dinamis, kemungkinan disampaikan / dimanipulasi sisi klien. Menangani sudut itu baik-baik saja.

Tapi mungkin Anda tidak ingin SPA 100%. Lalu apa? Bayangkan saja 10 halaman, tetapi 10 halaman yang sangatdinamis. Setelah pengguna masuk, ada lencana pengguna kecil di sudut kanan. Itu tidak dinamis. Itu hanya menunjukkan beberapa hal bagus seperti "skor" pengguna dan selfie terbaru mereka. Anda men-cache hal-hal bagus sehingga mereka dapat dengan mudah diambil. Sekarang, Anda bisa menggunakan dua cara dengan ini. Jika Anda seorang purist MVC sisi klien, Anda hanya mengambil data badge setelah payload HTML awal dikirim, sama seperti semua data lainnya. Tapi mungkin Anda bukan purist. Mungkin Anda kebalikan dari purist. Mungkin Anda seorang yang tidak senonoh. Jadi, alih-alih mengirimkan HTML awal, mengirimkan beberapa JavaScript yang akan dikirim kembali ke server Anda, memposting melalui JavaScript untuk mengambil data lencana, dan kemudian pada akhirnya menggabungkan data itu ke dalam tampilan melalui MVC sisi klien,itu sebagai HTML awal Anda. Setelah HTML awal Anda dikirimkan, Anda melanjutkan dengan tipikal MVC sisi klien Anda.

Jadi ... MVC di server dan di klien hanyalah cara mudah untuk mengatur kode yang dulu berantakan pada tahun 2001. Anda tidak harus memilih satu atau yang lainnya. Anda bisa memilih keduanya. Memang, semakin banyak yang Anda lakukan setelah HTML awal dikirim, semakin sedikit Anda membutuhkan MVC sisi server. Tetap, itu ada untuk Anda jika Anda membutuhkannya. Sebagai contoh, saya bekerja pada aplikasi ASP.NET MVC / Angular di mana templat Angular eksternal sebenarnya .NET MVC ActionResult. Itu berarti pengontrol server Anda dapat menggabungkan data ke dalam tampilan, mengirimkannya ke Angular sebagai templat, dan pengontrol Angular kemudian dapat menggabungkan data ke dalam tampilan. Saya tidak mengatakan ini adalah ide yang baik, tetapi itu hanya menunjukkan bahwa satu bentuk MVC tidak membuat yang lain usang.

Selain itu, tidak masalah bagaimana Anda menggunakan Angular, Anda akan memerlukan cara untuk mengirimkan HTML awal, templat, dan yang paling penting data. Mengapa tidak menggunakan platform yang membuatnya mudah? Ada banyak, tetapi .NET MVC tidak bungkuk. Seperti yang saya katakan, Anda dapat membuat HTML awal dan templat Angular eksternal hasil dari tindakan MVC, tetapi lebih baik lagi, Anda dapat menggunakan .NET Web API untuk mengirimkan data. API Web sama lezatnya dengan kompot aprikot.

Ringkas: MVC hanyalah sebuah pola. Anda mungkin ingin menggunakan pola itu pada sejumlah lapisan fisik. Itu tidak bisa digunakan. Gunakan secara bebas jika itu masuk akal. Selain itu, Angular mungkin bukan MVC (begitu kata orang yang peduli tentang hal-hal ini), jadi jangan ragu untuk menggunakannya dengan alat yang memiliki "MVC" dalam namanya. Sial, bahkan jika itu adalah MVC, campur dan cocokkan seperti yang diinginkan.

Hanya sedikit Roger
sumber
3
Respon luar biasa. Terima kasih banyak atas penjelasan Anda +1
Natalie
Bisakah Anda memberi tahu saya, misalnya jika ada web api yang menyediakan saya dengan data, dan saya ingin menunjukkan data ini dalam kotak, apakah saya melakukan perulangan dan templating menggunakan Angular atau MVC? Apakah saya memanggil layanan web api menggunakan bagaimana caranya? Bagaimana Anda memutuskan dari awal proyek ke mana Anda akan pergi?
Natalie
1
@Natalie Jika datanya dari Web API, kemungkinan Anda mengambilnya dari sisi klien. Ini berarti Anda mengikat dalam Angular, bukan .NET MVC. Anda tidak secara eksplisit mengulang. Anda mengikat data ke grid / tabel Anda menggunakan ngRepeat . Untuk mengambil data, Anda mungkin akan menggunakan modul $ http dan memanggil titik akhir API Web Anda. Adapun untuk memutuskan pendekatan mana yang akan digunakan, itu unik. Tidak ada jawaban hitam dan putih. Anda harus bereksperimen, mengevaluasi, dan mengikuti insting Anda.
Scant Roger
... satu kata peringatan. Jika Anda belum pernah menggunakan kerangka JavaScript layanan lengkap atau Angular lainnya sebelumnya, Anda harus menghabiskan waktu berjam-jam mempelajari tali. Mereka belum tentu mudah. Saya dapat meyakinkan Anda, bahwa mereka membuat hidup Anda lebih mudah dalam jangka panjang. Bekerja keras. Tetap dengan itu. Anda akan melakukannya dengan baik.
Scant Roger
1
@ ScantRoger Saya minta maaf, tetapi jawaban Anda tidak menjelaskan semuanya untuk saya. Jika saya menggunakan kerangka sisi server MVC, di mana tampilan agnostik, bagaimana cara saya mengikat Angular dengannya? Server (API web) sudah berisi definisi Model dan Controller. Jadi, jika saya menggunakan Angular, saya dikenakan MVC lagi. Jadi apakah itu akhirnya menjadi MCVCM ...? (Definisi Model & Pengendali di sisi klien dan di sisi server) Atau karena alasan saya tidak boleh menggunakan kerangka kerja MVC sisi klien, seperti Angular, jika saya sudah menggunakan kerangka kerja MVC untuk API Web saya
Abdul
17

ASP.NET MVC adalah kerangka kerja sisi server; tidak peduli apa perpustakaan JavaScript yang Anda gunakan. AngularJS adalah pustaka sisi-klien, yang tidak peduli teknologi apa yang mendukung sisi-server situs web-itu bisa Python, ASP.NET MVC, atau bahkan sekelompok tua file statis HTML yang disimpan langsung pada disk.

ASP.NET MVC dan AngularJS keduanya kompatibel, dan ada banyak proyek di luar sana yang menggunakannya bersama-sama.

Apakah Anda perlu menggunakan keduanya? Tidak juga. Itu sepenuhnya tergantung pada kebutuhan proyek Anda.

  • Jika situs web Anda dinamis, Anda harus menggunakan beberapa skrip sisi server. Anda bisa menggunakan ASP.NET, dan fakta bahwa Anda menggunakan AngularJS tidak akan membuat kode sisi server Anda lebih banyak MVC. Jika Anda ingin dapat menyusun aplikasi sisi server Anda sebagai MVC, Anda lebih suka memilih ASP.NET MVC.

  • Demikian pula, fakta bahwa Anda menggunakan ASP.NET MVC tidak menyiratkan apa pun tentang struktur kode sisi klien Anda. Anda dapat meletakkan semua JavaScript Anda dalam satu file tanpa memikirkan strukturnya dan senang dengan itu (sampai proyek mulai tumbuh). Sekali lagi, AngularJS menghadirkan dirinya sebagai cara untuk menyusun aplikasi Anda di sisi klien.


Catatan tambahan: Anda menandai pertanyaan Anda ASP.NET MVC 3. Kecuali jika ini adalah proyek lawas yang harus Anda pertahankan atau Anda memiliki kendala spesifik saat hosting aplikasi pada server lama yang tidak diperbarui selama empat tahun terakhir, Anda dapat menggunakan ASP .NET MVC 4 atau 5 sebagai gantinya.

Arseni Mourzenko
sumber
1
terima kasih MainMa. Saya sadar bahwa AngularJS adalah sisi klien, dan MVC adalah sisi server. Saya juga sadar bahwa perpustakaan lain seperti setang, knockoutjs dapat digunakan di MVC.NET, dan Angular dapat digunakan di php, aplikasi java. Yang saya tanyakan adalah mengapa menggunakan keduanya secara bersamaan, karena keduanya melakukan hal yang sama yaitu "MVC", tetapi yang satu adalah sisi klien dan yang lain sisi server. Mengapa mencampur kerangka kerja MVC di sisi klien dan sisi server? Tidak bisakah kita melakukan aplikasi yang hanya aplikasi Angular? Atau aplikasi yang hanya aplikasi MVC.net?
Natalie
@ Natalie: Begitu. Saya mengedit jawaban untuk memberikan lebih banyak informasi tentang itu. Sebuah tanggapan singkat adalah bahwa Anda mencampur kedua kerangka kerja tersebut dalam proyek-proyek di mana masuk akal untuk memiliki struktur spesifik di kedua sisi server dan klien.
Arseni Mourzenko
Bisakah Anda memberi tahu saya, misalnya jika ada web api yang menyediakan saya dengan data, dan saya ingin menunjukkan data ini dalam kotak, apakah saya melakukan perulangan dan templating menggunakan Angular atau MVC? Apakah saya memanggil layanan web api menggunakan bagaimana caranya? Bagaimana Anda memutuskan dari awal proyek ke mana Anda akan pergi?
Natalie
Saya memiliki pertanyaan yang sama di benak saya. Saya tidak bisa menemukan alasan untuk menggunakan asp.net MVC sama sekali. Maksud saya sepertinya Asp.net Web API di sisi server dan Angular di sisi klien sudah cukup. Tapi saya pikir dulu; API Web = Lapisan Akses Data, Asp.Net MVC = Lapisan Logika Bisnis, Sudut = Lapisan UI. Tapi dari sisi Angular kita hanya bisa melakukan panggilan API Web sehingga kita tidak bisa menggunakan sisi server Asp.Net MVC. Saya pikir kita perlu contoh yang baik mengapa kita perlu menggunakan Asp.Net MVC.
Salim
9

Jika Anda menggunakan visual studio ada template situs web MVC 'aplikasi satu halaman' baru yang mencakup pengontrol angular dan MVC Web Api.

Ini bekerja dengan baik karena kode sisi server MVC Anda menyediakan titik akhir json untuk memanggil kode sisi klien.

Selain itu, Anda dapat menggunakan pengontrol MVC untuk menyajikan tampilan html dasar atau tampilan untuk aplikasi satu halaman Anda. ini memberi Anda kekuatan generasi sisi server, otorisasi, arahan ulang, penanganan kesalahan dll

Seringkali Anda akan menginginkan sejumlah kecil server yang dihasilkan html / javascript bahkan pada aplikasi halaman tunggal, hal-hal seperti url endpoint untuk lingkungan yang berbeda, bahasa yang berbeda, atau bahkan halaman otentikasi ganjil yang mungkin lebih mudah dilakukan dari sisi server.

Ewan
sumber
1
Saat membuat templat SPA standar di VS 2015 CE, saya melihat bootstrap, jquery, sistem gugur, respons, dan sammy di folder skrip, tetapi tidak bersudut. Apakah saya melewatkan sesuatu?
TK-421
2

3 tahun kemudian, gunakan ASP.NET Web API untuk menyajikan data dan Angular Anda (js atau yang lebih baru) untuk menyusun aplikasi Anda di sisi klien. Jika Anda membuat situs statis maka gunakan saja ASP.NET MVC.

pengguna441521
sumber