Validasi Lancar vs. Anotasi Data [ditutup]

123

Apa perbedaan operasi antara dua paket validasi ini saat digunakan untuk validasi ASP.NET MVC? Mereka tampaknya memiliki objek yang mirip, sampai ke nama objeknya. Apakah yang satu terkait dengan yang lain? Apa perbedaan mereka? Dengan cara apa perbedaan ini menunjukkan kasus penggunaan yang berbeda?

SiberianGuy
sumber
52
Menarik juga untuk dicatat, bahwa pertanyaan yang tertutup karena tidak konstruktif biasanya memiliki banyak suara positif, sehingga sebenarnya SANGAT membantu orang. Pasti ada yang salah dengan hal ini
Dmitry Efimenko
2
Saya setuju bahwa jenis pertanyaan ini berguna tetapi jawaban di bawah ini lebih seperti opini bagi saya dan bukan fakta.
Ian Warburton
3
Saya sepenuhnya setuju juga, namun menanyakan "apa perbedaannya" daripada "apa preferensi Anda" mungkin akan menghindari situasi tersebut.
Jeremy A. West
Saya pikir kesepakatannya adalah Anda harus mengatakannya sehingga jawaban kurang berdasarkan opini daripada faktual. Jangan tanya, "Apa favoritmu?" tetapi "Apa perbedaan operatifnya?" Maka Anda tidak akan mendapatkan jawaban seperti, "Saya lebih suka Validasi Lancar." tetapi sebaliknya hal-hal yang mengedepankan perbedaan pertama dan menyajikan temuan kedua.
ruffin

Jawaban:

113

Saya lebih suka Validasi Lancar :

  1. Ini memberi saya kendali yang jauh lebih baik atas aturan validasi saya
  2. Melakukan validasi bersyarat pada properti yang berbeda jauh lebih mudah dibandingkan dengan Anotasi Data
  3. Ini memisahkan validasi dari model tampilan saya
  4. Pengujian unit jauh lebih mudah dibandingkan dengan Anotasi Data
  5. Ini memiliki dukungan validasi sisi klien yang sangat baik untuk sebagian besar aturan validasi standar
Darin Dimitrov
sumber
6
Beberapa poin lagi dari artikel ini ( webdevbros.net/2010/12/03/… ): 1. Terlalu banyak anotasi membuat model Anda terlihat jelek (mirip dengan poin 3 Anda) 2. Dapat digunakan kembali lebih baik 3. Performa lebih baik (karena tidak ada Refleksi )
SiberianGuy
2
@Idsa Poin pertunjukan terdengar meragukan. Refleksi hanya perlu terjadi satu kali per model. Ini mengasumsikan implementasi yang baik, saya tidak tahu bagaimana implementasi khusus ini bekerja.
CodesInChaos
@CodeInChaos, sepertinya Anda benar. Tetapi saya akan menyimpannya di sana karena saya juga tidak yakin (dan cukup malas untuk mencari tahu) bagaimana penerapannya.
SiberianGuy
2
Saya setuju dengan FluentValidation ... itu keren. Dari perspektif kode OCD, saya suka bahwa ini menghilangkan tanggung jawab validasi dari pandangan dan memberikan kelas mereka sendiri. Saya mencoba xVal beberapa waktu lalu di MVC1 ... Anotasi Data baik-baik saja untuk hal-hal sederhana, tetapi begitu Anda mendapatkan lebih dari beberapa aturan, Anda hampir tidak dapat membedakan apa yang seharusnya diwakili oleh ViewModel.
Brandon Linton
@Darin bagaimana Anda melewatkan pesan kesalahan dalam tampilan? dapatkah Anda memberikan contoh bagaimana melakukannya?
Jaime Sangcap
32

Saya jelas lebih suka Anotasi Data karena ...

  1. semua aturan validasi dapat dikonfigurasi di satu tempat dalam kode (dalam kelas metadata model) dan tidak perlu diulang di tempat lain.
  2. ada dukungan yang sangat baik untuk validasi sisi klien (sekali lagi - tanpa pengulangan aturan validasi!) saat menggunakan atribut Anotasi Data .
  3. Atribut Anotasi Data dapat diuji untuk memastikannya ada.
  4. ada atribut validasi tambahan yang bagus yang dibuat oleh komunitas (mis. Ekstensi Anotasi Data ).
Marius Schulz
sumber
2
Saya pikir sebagian besar properti ini dapat dicapai dengan beberapa bentuk validasi yang lancar. Saya tidak tahu apakah perpustakaan di OP mendukung ini, tetapi pada prinsipnya itu mungkin, dan juga tidak terlalu sulit.
CodesInChaos
Apa gunanya menguji keberadaan atribut? Bukankah itu pada dasarnya mengulangi aturan validasi?
Sam
30
@ Sam: Dengan menguji apakah properti didekorasi dengan atribut Anotasi Data, Anda tidak menguji fungsionalitas dari atribut itu sendiri; Anda hanya memastikan itu ada. Saya harus mengatakan bahwa sekarang, dua tahun kemudian, saya berada di pihak Darwin dan setuju dengan jawabannya.
Marius Schulz
@ Sam, karena Anda mungkin ingin tahu apakah seseorang menghapusnya dari model Anda.
Steve
3
Komentar bagus Marius. Sayangnya sebagian besar tutorial EF sekarang menunjukkan validasi dilakukan dengan Anotasi Data. Saya juga awalnya terhubung dengan kesederhanaan anotasi, tetapi segera setelah saya mencoba menerapkan aturan validasi khusus, saya langsung masuk ke tim Validasi Lancar ... Omong-omong, sayang sekali Darin berhenti memposting :( Sebagian besar komentarnya di StackOverflow tepat setelah lebih dari 5 tahun !!!
Koshera