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.

melodui
sumber
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

Phuong Nguyen
sumber
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 .

Elliott Frisch
sumber
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