Mengapa pola Repositori diperlukan di NHibernate?

13

Saya membaca aplikasi resmi berbasis NHibernate pertama Anda .

Meskipun tutorialnya bagus dan mudah diikuti, saya bertanya-tanya mengapa pola Repositori digunakan.

Dalam berbagai Add, Update, Removemetode dalam ProductRepositorypelaksanaan, kode ini hampir identik - mereka semua menggunakan transaksi, dan perbedaannya adalah di "daging" yaitu panggilan session.Saveint Addmetode, session.Deletedalam removemetode. ( Halaman tidak memiliki jangkar HTML, tetapi Anda dapat mencari kode yang relevan seperti halaman public void Remove,public void Add )

Kode itu hanya "terasa salah".

Mengapa penulis menggunakan pola Repositori - apakah hanya untuk demonstrasi menggunakan NHibernate atau apakah itu diperlukan atau karena alasan lain?

Ps. Latar belakang saya berasal dari Ruby on Rails menggunakan ActiveRecord jadi saya mencoba memahami bagaimana NHibernate bekerja / digunakan.

Zabba
sumber
1
Jika Anda lebih suka pola Rekaman ACtive maka Anda dapat menggunakan puri Rekaman Aktif untuk duduk di atas NHibernate castleproject.org/activerecord
Ben Robinson
3
Ini pertanyaan kritis. Ada beberapa perdebatan yang terjadi apakah akan menggunakannya atau tidak. Ayende menulis argumennya untuk tidak menggunakannya dalam Repository adalah Singleton baru

Jawaban:

10

Pola penyimpanan tidak diperlukan. Adapun semua pola lainnya adalah keputusan "Arsitektur" yang harus Anda buat terhadap kebutuhan bisnis Anda. Secara umum Pola repositori digunakan untuk mengimplementasikan "Entity Persistance Ingorance" yang berarti bahwa entitas Anda tidak tahu apa-apa tentang cara bertahan di perangkat penyimpanan Anda (Database, XML, TextFile, dll). Jika misalnya Anda memiliki Alamat entitas, itu tidak akan berisi logika persistensi (Anda tidak akan menemukan sesuatu seperti address. Simpan atau alamat. Di mana saja) tetapi Anda akan meneruskan entitas Anda ke metode repositori yang bertanggung jawab untuk tetap menggunakan perubahan

Massimiliano Peluso
sumber
Saya pikir ya dan tidak. Sesi NHibernate itu sendiri adalah semacam repositori generik. Jadi menambahkan repositori tambahan secara umum tidak lebih dari menambahkan fasad ke objek sesi.
sebenarnya jawaban saya mulai seperti "Pola penyimpanan tidak diperlukan ..." itu bisa saja berupa keputusan arsitektur terhadap kebutuhan bisnis itu saja
Saya setuju sepenuhnya tentang itu. Tapi saya kehilangan poin bahwa sesi itu sendiri adalah repositori, itu saja.
9

Keuntungan menggunakan pola repositori adalah dengan mengolok-olok lapisan akses data Anda, sehingga Anda dapat menguji kode lapisan bisnis Anda tanpa memanggil kode DAL. Ada keuntungan besar lainnya tetapi ini tampaknya sangat vital bagi saya.


sumber
2
Memberi +1 pola ActiveRecord membuatnya sangat sulit untuk mengisolasi DAL untuk mengejek, biasanya berakhir dengan tes unit yang membutuhkan database mereka sendiri (dalam hal ini uji unit menjadi tes integrasi).
MattDavey