1.项目背景
一个controller,一个serivce,多个dao层
service里面更具用户的不同参数调用不同的dao进行实例化,时候在调用方法。
2.不要问为什么设计,那是因为一个模块对应37张表,用户根据下拉选择输入不同的表单(说白点,点击页面新增弹出下拉框,让用户选择填写那张表单,再来一句,各个表之间没有相同的字段),所以此模块肯定是一个controller,一个service,各个dao对应不同的表进行增删改查操作
3.所以在service层必然有一个语句需要判断实例化那个dao,用注入也行
if(flag == dao1){
}else if(flag == dao2){
}else if(flag == dao3){
}else if(flag == dao4){
}else if(flag == dao5){
}else if(flag == dao6){
}
........就要写25个(不管是switch还是if都避免不了)
4.所以这样的方式有没有好一点的方式进行处理,不用写这么多的判断。
Saya fikir adalah baik untuk memanggil lapisan Dao melalui pantulan tanpa mengulang nama dao dari hujung hadapan
Itu hanya idea.
Memandangkan soalan anda sudah mengandungi beberapa ayat afirmatif seperti "jangan tanya" dan "pasti", sukar untuk mengatakan apa-apa lagi. Anda boleh mencuba mod kilang atau mod pengurus untuk mendapatkan contoh dao yang sepadan berdasarkan nilai bendera (sebenarnya, anda hanya mengalihkan kod hodoh ini ke sudut gelap).
Polymorphism, atau mod dipacu jadual (rujuk Bab 18 Koleksi Kod)
Jelas sekali ia masalah reka bentuk, ia masih agak degil
Isu struktur projek. Fikirkan tentang ciri-ciri java. Enkapsulasi. Polimorfisme warisan
Memandangkan anda menyebut perkataan suntikan, saya menganggap bahawa anda menggunakan rangka kerja Spring, dan aplikasi SpringContext boleh mendapatkan semua kacang yang telah dimulakan oleh bekas Biasanya terdapat abstraksi lapisan akses data seperti BaseDao dalam rangka kerja , kemudian Anda boleh menggunakan baseDao=applicationContext.getBean("beanName") dan kemudian melakukan apa sahaja yang anda mahu
Saya akan membina peta
map.put("dao1",dao1);
map.put("dao2",dao2);
map.put("dao3",dao3);
Kemudian pilih kunci peta melalui parameter halaman dan dapatkan dao
Sudah tentu, jika anda menggunakan musim bunga, peta ini boleh dikonfigurasikan terus pada musim bunga xml
Saya masih ingat bahawa kedua-dua if else dan pernyataan kes suis boleh dibina semula menggunakan mod arahan
Kemudian lapisan kawalan boleh terus menggunakan servicecontrol Dengan cara ini, lapisan kawalan dipisahkan daripada dao, dan pengubahsuaian pada kedua-dua belah tidak menjejaskan satu sama lain dan diselaraskan melalui xml