Rumah > Soal Jawab > teks badan
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.所以这样的方式有没有好一点的方式进行处理,不用写这么多的判断。
PHP中文网2017-04-17 17:41:01
Saya fikir adalah baik untuk memanggil lapisan Dao melalui pantulan tanpa mengulang nama dao dari hujung hadapan
Itu hanya idea.
黄舟2017-04-17 17:41:01
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).
迷茫2017-04-17 17:41:01
Isu struktur projek. Fikirkan tentang ciri-ciri java. Enkapsulasi. Polimorfisme warisan
迷茫2017-04-17 17:41:01
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
巴扎黑2017-04-17 17:41:01
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
PHPz2017-04-17 17:41:01
Saya masih ingat bahawa kedua-dua if else dan pernyataan kes suis boleh dibina semula menggunakan mod arahan
interface dao
{
crdu() ;
}
class ConcreteDao implements dao
{
crdu(){...} ;
}
class Service
{
private Dao dao ;
public void set(Dao dao){}
public void service(){dao.service();}
}
class ServiceControl
{
private HashMap<Integer , Dao> map ;
private Service service ;
public ServiceControl()
{
//读xml表初始化标识与dao的对应
}
public void service(int flag)
{
//根据flag来选择不同的dao注入到service中
Dao dao = map.get(flag) ;
service.set(dao) ;
service.service() ;
}
}
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