ASP.NET MVC dan Rails memiliki area penggunaan yang serupa, dibangun dengan arsitektur yang sama, kedua kerangka kerja tersebut relatif baru dan open source.
Jadi sebagai programmer Rails saya ingin tahu, apa yang bisa dilakukan ASP.NET MVC dan Ruby on Rails tidak bisa, dan sebaliknya?
ruby-on-rails
comparison
asp.net-mvc
Nikita Barsukov
sumber
sumber
Jawaban:
Saya telah mengembangkan aplikasi nyata dengan Rails dan ASP.NET MVC, tetapi jawaban ini datang dengan peringatan yang signifikan: Saya belajar dan mengembangkan dengan Rails pra-versi 2, jadi sangat mungkin bahwa saya jauh ketinggalan zaman dengan saya Pengetahuan rel.
Yang sedang berkata, saya tidak berpikir bahwa ada sesuatu yang dapat dilakukan dengan satu tetapi tidak yang lain. Dengan serangkaian persyaratan untuk aplikasi web, Anda harus dapat membangun aplikasi itu - mungkin sama efisiennya - dengan Rails atau ASP.NET MVC.
Ada beberapa hal rapi yang - sepengetahuan saya - tersedia di ASP.NET MVC terutama karena aspek C # /. NET. Misalnya: ketika saya memiliki halaman yang berisi formulir yang dikirimkan, saya akan memiliki Tindakan yang memeriksa untuk melihat apakah itu berurusan dengan GET atau POST untuk memutuskan apa yang harus dilakukan:
Ini adalah contoh sepele dari itu, tetapi
if request.post?
polanya sangat umum di Rails. Untuk kasus-kasus non-sepele, kode Aksi bisa menjadi besar dan berantakan, dan seringkali, saya berharap bahwa saya bisa mengubahnya menjadi metode terpisah secara bersih. Dalam ASP.NET MVC saya dapat melakukan itu:Saya pikir bisa memisahkan penanganan GET dan POST dengan rapi. Jarak tempuh Anda mungkin beragam.
Hal lain yang dilakukan ASP.NET MVC yang sangat keren (sekali lagi menurut saya) juga terkait dengan penanganan formulir POS. Di Rails, saya harus meminta
params
hash untuk semua variabel formulir saya. Katakanlah saya memiliki formulir dengan bidang 'status', 'gonkulated', 'invert' dan 'disposisi':Tetapi ASP.NET MVC memungkinkan saya untuk mendapatkan semua nilai formulir saya sebagai parameter untuk metode Tindakan saya:
Itulah dua hal yang sangat saya sukai tentang ASP.NET MVC atau Rails. Mereka tidak cukup alasan untuk pengembang waras atau kompeten untuk memilih satu kerangka kerja dari yang lain.
sumber
public ActionResult Edit(Foothing foothing)
, yaitu fitur ModelBinder bahkan lebih rapi.Salah satu keunggulan ASP.NET MVC daripada Rails adalah jika Anda perlu membangun aplikasi baru di atas basis data yang ada. ActiveRecord Rails sangat berpendapat tentang bagaimana tabel harus disusun (tabel harus memiliki satu dan hanya satu kolom integer sebagai kunci utama yang disebut 'id', dll) jadi jika tabel Anda yang ada tidak sesuai dengan preferensi ActiveRecord, sulit untuk membuat ActiveRecord kerja. Tetapi mengembangkan aplikasi baru dengan db baru dengan ActiveRecord dan Rails cepat!
ASP.NET MVC tidak memiliki ORM default. Anda dapat memilih strategi akses data yang sesuai dengan kebutuhan Anda. Beberapa ORM seperti nhibernate dapat mendukung basis data lama. Anda dapat memiliki kunci utama panduan, dll.
Ada alternatif untuk Rails ActiveRecord yang disebut DataMapper , tetapi saya belum mencobanya.
sumber
Setelah menggunakan keduanya, jawabannya IMO adalah bahwa ASP.NET MVC lebih fleksibel daripada Rails jika aplikasi Anda perlu melakukan lebih dari sekadar membaca / menulis dari database. Dalam pengalaman saya Rails rusak dengan cepat dan berat begitu Anda memperkenalkan segala jenis kompleksitas atau logika untuk aplikasi di luar logika CRUD yang sangat sepele. ASP.NET MVC tidak menemukan batasan ini karena ini lebih "terbuka" tentang apa yang dapat Anda lakukan.
Semua hal lain dianggap sama dalam aplikasi CRUD "Web 2.0" yang khas, tidak ada yang dapat dilakukan oleh orang lain, tetapi untuk aplikasi yang lebih rumit yang memerlukan alur kerja, atau sumber data yang berbeda, atau untuk berinteraksi dengan aplikasi lain, atau apa pun itu bukan tipikal CRUD, ASP.NET dapat melakukan lebih banyak dan tidak membatasi seperti Rails.
sumber
Saya tidak pernah bekerja dengan Ruby on Rails, jadi saya tidak cukup memenuhi syarat untuk menjawab pertanyaan ini, tetapi satu hal yang saya sukai dari ASP.NET MVC adalah keamanannya. Ini menghalangi. Adam Crossland dan rmac menyentuhnya secara singkat dalam komentar mereka, tetapi saya ingin menunjukkan bahwa dengan metode pengontrol seperti berikut ini, masing-masing parameter akan diketik dengan kuat. Ini membuat kode dalam metode Edit jauh lebih bersih karena Anda tidak perlu khawatir tentang mengubah representasi string menjadi variabel yang diketik dengan benar.
Tempat lain keamanan jenis ini muncul adalah di Tampilan dan Tampilan Parsial di mana orang dapat mengaitkan tampilan sebagian dengan objek C # Lama Biasa, yang akan berfungsi sebagai model Tampilan atau Tampilan Parsial itu. Ini membuat hidup jauh lebih mudah, terutama di mana Anda ingin membangun hierarki pandangan yang mengandung pandangan lain.
Jika
Infinity.ViewModels.Site
namespace berisi kelas yang disebutContactViewModel
, maka untuk tampilan Razor, Anda melakukannya dengan menempatkan garis seperti ini di bagian atas tampilan:dan untuk tampilan ASPX, Anda melakukannya dengan mendeklarasikan tampilan seperti ini:
Anda mengaitkan instance sebenarnya dari objek model dengan tampilan dalam metode tindakan Controller dan kemudian mengakses instance objek model dalam tampilan dengan
Model
properti tampilan.Bagi saya, ketikan yang kuat ini sangat keren. Tim yang menciptakan ASP.NET MVC telah menghabiskan banyak upaya untuk membuat masing-masing dari 3 area Model, View, dan Controller diketik dengan kuat.
Saya tidak yakin apakah Ruby-on-Rails memiliki ini, tapi saya harap begitu.
sumber
Mereka sangat mirip, dan mereka semua dapat "melakukan hal yang sama" sebagian besar, hanya beberapa hal yang lebih mudah dalam satu dan lebih keras daripada yang lain.
Saya menggunakan ASP.NET MVC di sekitar rilis asli dan itu jelas merupakan Rails clone minus activerecord. Jadi, Rails hampir pasti memiliki fitur yang jauh lebih besar dan ekosistem plugin / permata yang jauh lebih besar.
sumber
Dalam pengalaman saya yang terbatas, keuntungan utama ASP.NET MVC adalah bahasa yang dikompilasi. Ini memungkinkan Anda untuk mendeteksi beberapa bug pemrograman yang sudah dikompilasi, di mana Ruby harus mengandalkan pendeteksian selama pengujian unit.
Juga fakta bahwa itu dikompilasi memungkinkan untuk memiliki alat refactoring canggih, misalnya mengubah nama properti di satu tempat, dan semua referensi ke properti diubah. Setidaknya ini tidak bisa dilakukan di TextMate, yang banyak digunakan pengembang Rails.
Di sisi lain, keuntungan utama Ruby on Rails adalah bahwa itu adalah bahasa yang ditafsirkan;) Sifat Ruby, bagaimana Anda dapat memodifikasi objek apa pun dalam memori, atau menambal monyet kelas, dapat menyebabkan beberapa solusi yang sangat elegan; lihat buku Eloquent Ruby untuk beberapa contoh. Dan banyak kerangka Rails sendiri didasarkan pada kemampuan ini.
Kemampuan untuk mengganti metode apa pun pada objek apa saja kapan saja juga sangat membantu saya dalam menulis unit test. Dalam .NET, Dependency Injection dan kontainer IOC sebenarnya merupakan persyaratan untuk membuat kode yang dapat diuji. Itu tidak perlu di Ruby.
Edit:
Setelah memikirkannya, mungkin fitur pembunuh Rails adalah migrasi basis data. Kerangka kerja ASP.NET MVC tidak dengan sendirinya menyediakan dukungan basis data apa pun. Framework .NET memang memiliki beberapa komponen akses data / ORM, misalnya Entity Framework dan Linq to Sql. Tetapi tidak memiliki alat untuk merancang struktur database.
Jika Anda membayar untuk salah satu versi VS yang lebih mahal, Anda bisa mendapatkan Data Dude , yang memungkinkan Anda merancang skema basis data, dan memiliki beberapa alat untuk menyebarkan skema ke basis data. Tetapi sejauh yang saya tahu, dukungan untuk menangani migrasi dari versi aplikasi yang lebih lama sangat terbatas.
Beberapa mengklaim bahwa ASP.NET MVC sebenarnya bukan kerangka kerja MVC, hanya kerangka kerja VC, karena kurangnya dukungan untuk migrasi database.
Edit (lagi):
Perubahan pada toolchain Visual Studio / EF telah memperkenalkan migrasi berbasis kode sejak edit terakhir saya. (tetapi juga periksa FluentMigrator jika Anda akan turun jalan itu)
sumber
Masalah utama saya dengan Microsoft MVC 3 dan Entity Framework adalah prinsip-prinsip desain mereka yang buruk.
Salah satu masalah pertama yang saya temui adalah ketika menggunakan kelas lain sebagai properti dan mencoba membuat daftar dropdown untuk nilai yang mungkin.
Untuk menggambarkan maksud saya katakan Anda memiliki dua kelas model seperti ini:
Menciptakan properti Warna akan cukup untuk ORM nyata tetapi tidak EF. Anda harus menambahkan ID yang berlebihan untuk properti Color di kelas Thing seperti:
Jika Anda tidak menambahkan bidang ID berlebihan untuk referensi objek asing, Anda tidak dapat dengan mudah membuat daftar dropdown dengan semua opsi yang mungkin dari kelas yang ditautkan.
Ini benar-benar desain yang mengerikan karena sangat memadukan pekerjaan internal dari satu kelas ke kelas lainnya. Seharusnya tidak tahu apa-apa tentang ColorID, kelas Warna harus menangani pemeriksaan kesetaraan sendiri tanpa memperlihatkan bahwa ia bahkan memiliki ID.
Ini adalah praktik terbaik 101 hal, tetapi tampaknya Microsoft sama sekali tidak menyadari prinsip dasar ilmu komputer dan pemrograman berorientasi objek. [/ Rant]
sumber
int?