Saya mencoba untuk bekerja sedikit dengan Kerangka Entity dan saya mendapat pertanyaan tentang pemisahan lapisan.
Saya biasanya menggunakan UI -> BLL -> DAL dan saya ingin tahu bagaimana cara menggunakan EF di sini.
DAL saya biasanya berupa sesuatu
GetPerson(id)
{
// some sql
return new Person(...)
}
BLL:
GetPerson(id)
{
Return personDL.GetPerson(id)
}
UI:
Person p = personBL.GetPerson(id)
Pertanyaan saya sekarang adalah: karena EF membuat model dan DAL saya, apakah ide yang baik untuk memasukkan EF ke dalam DAL saya sendiri atau hanya membuang-buang waktu?
Jika saya tidak perlu membungkus EF apakah saya akan tetap menempatkan Model.esmx saya di perpustakaan kelasnya sendiri atau akan lebih baik untuk menempatkannya di dalam BLL saya dan mengerjakannya di sana?
Saya tidak bisa melihat alasan untuk memasukkan EF ke dalam DAL saya sendiri tetapi saya ingin tahu apa yang dilakukan orang lain.
Jadi alih-alih memiliki yang di atas, saya akan meninggalkan DAL dan hanya melakukan:
BLL:
GetPerson(id)
{
using (TestEntities context = new TestEntities())
{
var result = from p in context.Persons.Where(p => p.Id = id)
select p;
}
}
Apa yang harus dilakukan?
sumber
Anda tidak perlu membungkus EDMX Anda dengan apa pun.
Jika Anda dapat melihat kemungkinan perlu mengubah dari EF ke beberapa pendekatan lain, Anda mungkin ingin memperluas objek bisnis Anda (mengambil keuntungan dari kelas parsial) untuk mengimplementasikan antarmuka yang didefinisikan dalam lapisan Objek Bisnis yang terpisah.
Kemudian dari kode Anda, Anda hanya akan berurusan dengan antarmuka tersebut dan bukan dengan kelas yang dihasilkan secara konkret. Mungkin diperlukan sedikit kode lem untuk menahannya; bahwa dengan EDMX dapat menjadi DAL Anda.
sumber
Ada dua pendekatan umum untuk layering: layering ketat dan layering santai.
Sebuah pendekatan berlapis ketat membatasi komponen dalam satu lapisan untuk berinteraksi hanya dengan rekan-rekan dan dengan lapisan tepat di bawah.
Aplikasi berlapis yang santai mengendurkan kendala sehingga komponen dapat berinteraksi dengan komponen dari lapisan bawah mana pun.
Menggunakan layering yang santai dapat meningkatkan efisiensi karena sistem tidak harus meneruskan panggilan sederhana dari satu layer ke yang berikutnya. Di sisi lain, menggunakan pelapisan yang santai tidak memberikan tingkat isolasi yang sama antara lapisan dan membuatnya lebih sulit untuk menukar lapisan yang lebih rendah tanpa mempengaruhi lapisan yang lebih tinggi.
Untuk solusi besar yang melibatkan banyak komponen perangkat lunak, adalah umum untuk memiliki sejumlah besar komponen pada tingkat abstraksi yang sama yang tidak kohesif. Dalam hal ini, setiap lapisan dapat diuraikan lebih lanjut menjadi satu atau lebih subsistem yang kohesif. Gambar 2 mengilustrasikan notasi Unified Modelling Language (UML) untuk mewakili lapisan yang terdiri dari beberapa subsistem.
kesimpulan: jika Anda tidak perlu lapisan tengah kehilangan itu; tidak semua aplikasi memerlukan pendekatan yang sama dan entah bagaimana menambahkan layer hanya untuk tujuan layering akan dikenakan penalti pada biaya dan perawatan yang rumit.
sumber