it-swarm-id.com

Apa yang dapat dilakukan oleh ASP.NET MVC dan Ruby pada Rails tidak bisa?

ASP.NET MVC dan Rails memiliki area penggunaan yang serupa, dibangun dengan arsitektur yang sama, kedua kerangka tersebut relatif baru dan open source.

Jadi sebagai seorang programmer Rails Saya ingin tahu, apa yang dapat dilakukan ASP.NET MVC dan Ruby pada Rails tidak bisa, dan sebaliknya?

37
Nikita Barsukov

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 saya Saya sangat ketinggalan zaman dengan pengetahuan saya Rails.

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:

def edit
  @item = Item.find(params[:id])

  if request.post? 
    @item.update_attributes(params[:item])
    redirect_to :action => 'edit', :id => @item.id 
  end
end

Ini adalah contoh sepele dari itu, tetapi if request.post? pola adalah pola yang 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:

public ActionResult Edit() {
  // Render my page that has the Edit form
  ...
}

[HttpPost]
public ActionResult Edit(Foothing foo) {
  // Save my Foothing data
  ...
}

Saya pikir bisa memisahkan penanganan GET dan POST permintaan 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 hash params untuk semua variabel formulir saya. Katakanlah saya memiliki formulir dengan bidang 'status', 'gonkulated', 'invert' dan 'disposisi':

def edit
  @item = Item.find(params[:id])

  if params[:status] == "new"
    ...
  else
    ...
  end

  if params[:gonkulated] == "true"
    ...
  else
    ...
  end

  if params[:invert] == "true"
    ...
  else
    ...
  end

  # Rest ommited for brevity
end

Tetapi ASP.NET MVC memungkinkan saya untuk mendapatkan semua nilai formulir saya sebagai parameter untuk metode Tindakan saya:

[HttpPost]
public ActionResult Edit(int id, string status, bool gonkulated, bool invert, int disposition) {
    ...
}

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 di atas yang lain.

31
Adam Crossland

Satu keuntungan dari ASP.NET MVC lebih dari Rails adalah jika Anda perlu membangun aplikasi baru di atas database yang sudah ada. ActiveRecord dari 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 berfungsi. 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 disebut DataMapper , tapi saya belum mencobanya.

6
Endy Tjahjono

Saya tidak pernah bekerja dengan Ruby pada Rails, jadi saya tidak benar-benar memenuhi syarat untuk menjawab pertanyaan ini, tetapi satu hal yang saya sukai tentang ASP.NET MVC sangat adalah jenis-keamanannya. Ini berlaku Adam Crossland dan rmac menyentuhnya secara singkat dalam komentar mereka, tetapi saya ingin menunjukkan bahwa dengan metode pengontrol seperti berikut ini, setiap parameter akan diketik dengan kuat. Ini membuat kode dalam metode Edit jauh lebih bersih di Anda tidak perlu khawatir tentang mengubah representasi string menjadi variabel yang diketik dengan benar.

[HttpPost]
public ActionResult Edit(int id, string status, bool gonkulated, bool invert, int disposition) {
    ...
}

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 adalah namespace yang berisi kelas yang disebut ContactViewModel, maka untuk tampilan Razor, Anda melakukannya dengan menempatkan garis seperti ini di bagian atas tampilan:

@model Infinity.ViewModels.Site.ContactViewModel

dan untuk tampilan ASPX, Anda melakukannya dengan mendeklarasikan tampilan seperti ini:

<%@ Page Language="C#" ="~/Views/Shared/Site.master" ="System.Web.Mvc.ViewPage<Infinity.ViewModels.Site.ContactViewModel>" %>

Anda mengaitkan instance sebenarnya dari objek model dengan tampilan dalam metode aksi Controller dan kemudian mengakses instance objek model dalam tampilan oleh properti Model view.

Bagi saya, ketikan yang kuat ini sangat keren. Tim yang membuat ASP.NET MVC telah menghabiskan banyak upaya untuk membuat masing-masing dari 3 Model, View, dan area pengontrolan diketik dengan kuat.

Saya tidak yakin apakah Ruby-on-Rails memiliki ini, tapi saya harap begitu.

2

Setelah menggunakan keduanya, jawabannya IMO adalah bahwa ASP.NET MVC lebih fleksibel daripada Rails jika aplikasi Anda perlu melakukan lebih dari cukup baca/tulis 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 "buka" 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 seketat Rails.

2
Wayne Molina

Mereka sangat mirip, dan mereka semua dapat "melakukan hal yang sama" sebagian besar, hanya beberapa hal lebih mudah dalam satu dan lebih sulit daripada yang lain.

Saya menggunakan ASP.NET MVC sekitar rilis asli dan itu pasti Rails clone dikurangi activerecord. Jadi, Rails hampir pasti memiliki fitur yang jauh lebih besar dan plugin/permata ekosistem yang jauh lebih besar.

1
scottschulthess

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 bergantung pada pendeteksian selama pengujian unit.

Juga fakta bahwa itu dikompilasi memungkinkan untuk memiliki alat refactoring canggih, mis. ubah nama properti di satu tempat, dan semua referensi ke properti diubah. Setidaknya ini tidak dapat dilakukan di TextMate, yang banyak digunakan oleh banyak Rails).

Di sisi lain, keuntungan utama dari Ruby pada Rails adalah bahwa itu adalah bahasa yang ditafsirkan;) Sifat Ruby, bagaimana Anda dapat memodifikasi objek apa pun dalam memori, atau patch monyet kelas, dapat menyebabkan beberapa solusi yang sangat elegan; lihat bukunya Eloquent Ruby untuk beberapa contoh. Dan banyak dari Rails Kerangka itu 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. Di .NET, Dependency Injection, dan IOC kontainer sebenarnya merupakan persyaratan untuk membuat kode yang dapat diuji. Itu tidak perlu di Ruby.

Edit:

Setelah memikirkannya, mungkin fitur pembunuh dari Rails adalah migrasi basis data. Kerangka kerja ASP.NET MVC tidak dengan sendirinya menyediakan dukungan basis data. Kerangka .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 mendesain skema database, dan memiliki beberapa alat untuk menyebarkan skema ke database. 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 VC, karena kurangnya dukungan untuk migrasi basis data.

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)

1
Pete