Pola Desain untuk Validasi Data


23

Apa yang akan menjadi pola desain terbaik untuk masalah ini:

Saya memiliki Objek A. Objek A dapat didaftarkan atau dihapus dari database tergantung pada permintaan pengguna.

Validasi data dilakukan sebelum pendaftaran atau penghapusan objek. Ada seperangkat aturan yang harus diperiksa sebelum objek dapat didaftarkan dan seperangkat aturan untuk dihapus. Beberapa aturan ini umum untuk kedua operasi.

Sejauh ini, saya pikir pola desain Rantai Tanggung Jawab paling cocok tapi saya kesulitan mengimplementasikannya.


6
Menurut Anda mengapa pola desain Rantai Tanggung Jawab paling cocok?
Adam Zuckerman

Jawaban:


17

Biasanya saya akan menggunakan kelas validator terpisah untuk memvalidasi setiap kasus penggunaan. Misalnya sebelum menambahkan produk ke database, saya akan menggunakan AddProductValidator untuk memvalidasi aturan bisnis, sebelum menghapus produk, saya akan menggunakan DeleteProductValidator untuk memvalidasi, dll. Aturan bisnis umum dapat diekstraksi ke kelas spesifikasi (pola Spesifikasi) dan dibagikan oleh kelas validator

Untuk menyusun kelas validator, saya ikuti pendekatan di sini: http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/

Jika Anda menggunakan .NET, saya pikir Anda mungkin ingin mempertimbangkan Validasi Lancar ( https://github.com/JeremySkinner/FluentValidation ). Saya pikir itu cukup keren dan cukup dekat dengan artikel yang saya sebutkan di atas


1
url baru Validasi Validasi: github.com/JeremySkinner/FluentValidation
Brij

4

Seperti dijelaskan, saya mungkin akan mengimplementasikan tipe opsi . Dengan begitu saya bisa mengembalikan "Tidak Ada" atau nilai yang divalidasi (mungkin malas) tapi itu detail implementasi dan mengarah dengan baik ke ide menggunakan Dekorator .

Pola dekorator

Tentu saja jika antarmuka menjadi jelek, saya akan menggunakan fasad .


Penghias akan bekerja, tapi saya biasanya menganggap pola Penghias sebagai sesuatu yang akan digunakan ketika Anda ingin mengubah output menjadi input untuk kelas lain untuk digunakan. Dalam hal ini Anda hanya perlu memvalidasi. Saya pikir rantai tanggung jawab mungkin bekerja lebih baik.
Neil
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.