Untuk pertanyaan 1 dan 2 ikuti jawaban Matius.
Saya telah menghabiskan banyak waktu untuk mencari tahu cara terbaik untuk menyusun DAL aplikasi desktop. Dan cara terbaik sangat tergantung pada kebutuhan aplikasi. Dalam salah satu aplikasi saya, saya memiliki kelas DA untuk setiap tabel database, yang mendaftarkan diri dengan kelas DataProvider pusat (yaitu singleton) dan menangani CRUD. Setiap kelas DA kemudian dapat memutuskan apakah ingin men-cache semua data tabel dalam RAM atau tidak (kinerja!) Dan / atau apakah itu perlu memiliki kemampuan untuk memicu pembaruan klien otomatis di klien lain yang berjalan di komputer lain (pikirkan multi-pengguna konkurensi). Ini membuatnya sangat mudah untuk menambahkan kelas DAL baru, karena yang harus mereka lakukan hanyalah menyesuaikan dengan antarmuka registrasi.
Tidak setiap DAL membutuhkan fungsionalitas seperti ini, tetapi saya mengetahui bahwa pendekatan itu sendiri (yaitu penyedia data tunggal dan kelas DAL sederhana dengan pendaftaran statis) membuat hidup saya jauh lebih mudah ketika saya mulai menambahkan kelas baru.
Saya pasti tidak akan merekomendasikan membangun CRUD ke kelas tingkat yang lebih tinggi, kecuali jika ini adalah aplikasi yang sangat sederhana. DAL adalah abstraksi dari penyimpanan data. Jika Anda memutuskan untuk mengubah penyimpanan data Anda di beberapa titik di masa depan (bahkan jika itu hanya menggunakan MySQL, bukan MS SQL), Anda akan sangat berterima kasih untuk itu. Plus: objek BLL harus disusun oleh hubungan logika bisnis mereka. Objek DAL disusun berdasarkan jenis wadah penyimpanan yang diwakilinya. Perbedaannya bisa dramatis.
Apakah TIDAK membuat Anda statis kelas DAL. Apa yang Anda peroleh dalam kecepatan pengkodean Anda akan kehilangan berkali-kali dalam testabilitas dan fleksibilitas.