Saya sedang berpikir malam ini sambil merenungkan beberapa aplikasi yang perlu saya ubah dan itu membuat saya berpikir. Entity Framework Entities adalah POCO (Plain old CLR Objects) dan model yang digunakan dalam ASP.NET MVC biasanya juga POCO. Ini pada dasarnya berarti hanya properti, tidak ada metode.
Sekarang pemrograman OO biasanya memungkinkan suatu objek untuk merangkum fungsinya, yang mencakup sifat-sifatnya serta metodenya, ini memungkinkan terjadinya polimorfisme. Dengan naiknya kelas POCO yang digunakan, pola desain seperti repositori generik menjadi lebih populer. Ketika di masa lalu objek saya akan memiliki operasi CRUD mereka sendiri, saya sekarang memilikinya di repositori.
Apakah ini hanya sebuah evolusi dalam OO di mana operasi CRUD dihapus dari objek untuk memungkinkan mereka untuk dipisahkan atau mungkin operasi CRUD seharusnya tidak pada level objek di masa lalu dan saya salah? heck, mungkin keduanya benar-benar sah dan selalu. Itu hanya pengamatan yang membuatku berpikir, jadi kupikir aku akan mencari pendapat lain.
POCO sama sekali tidak menyiratkan tidak ada metode - meskipun sebagian besar contoh yang dilihatnya menggunakan banyak fitur pengikatan otomatis MVC yang terutama berkaitan dengan properti dan mengabaikan metode.
Memiliki kegigihan yang tertanam dalam objek model Anda melanggar pemisahan kekhawatiran dan membuatnya sangat sulit untuk melakukan hal-hal seperti unit menguji objek tanpa berdiri di database. Ini bukan fungsi dari objek model tetapi fungsi jika kelas yang berbeda seperti repositori.
sumber
Hanya dua pendekatan yang berbeda masing-masing dengan kelebihannya masing-masing.
/programming/1519669/data-access-layer-or-having-object-with-crud-methods
sumber
Saya telah menggunakan Metode Ekstensi untuk hal-hal seperti ini akhir-akhir ini.
POCO berisi logika yang hanya masuk akal untuk objek itu sendiri. Logika bisnis atau objek yang terkoordinasi masuk ke ekstensi BL. Akses data dapat masuk ke lapisan akses data atau ekstensi akses data.
Ini memberi Anda sangat bagus
myObject.PriceInCart()
danmyObject.Save()
sambil menjaga kelas Anda fokus pada data. Tentu saja untuk metode statis Anda harus memilikiMyAppDA.Create()
bukanMyApp.Create()
.sumber