銆銆浼犵粺鎶ヨ〃緋葷粺錛岄氬父鏄拡瀵規煇涓晢涓氶鍩熶嬌鐢紝鍏朵嬌鐢ㄧ殑鎶ヨ〃鏍煎紡寰寰鍦ㄨ璁℃椂鐢辮璁′漢鍛樺凡緇忓畾鍋氭垚妯$増鐨勫艦寮忓瓨鍌ㄥ湪妯$増搴撲腑錛岀敤鎴蜂嬌鐢ㄦ椂鐩存帴浠庢ā鐗堝簱璇誨彇錛屽鐞嗘柟寮忎篃浠呴檺浜庤棰嗗煙鍐咃紱铏界劧鍦ㄤ竴瀹氱▼搴︿笂璇ヨВ鍐蟲柟娉曞甫鏉ヤ簡涓瀹氱鐞嗕笂鐨勪究瀹滐紝鍙浜庣幇浠d紒涓氱敤鎴鋒潵璇達紝鎶ヨ〃鏍煎紡鍗曚竴宸茬粡灞闄愪簡鎶ヨ〃鍙兘浣滀負璁拌處綈挎潵浣跨敤錛屼嬌寰楁姤琛ㄧ殑鍙鎬у樊錛屽悗鏈熺淮鎶よ壈闅撅紝闅句互閫傚簲鐢熶駭榪囩▼鐨勫鏍鋒у拰鍙樺寲鎬э紝鏃犳硶婊¤凍澶у瀷浼佷笟涓嶆柇鎵╁厖鐨勯傚簲鎬с佹櫤鑳藉瀷鐨勮姹傦紝鐗瑰埆鏄綋涓氬姟棰嗗煙鍙樺寲鏃訛紝鍘熸湁鐨勬姤琛ㄧ郴緇熷線寰寰堥毦鏀寔鏂頒笟鍔℃暟鎹殑綆$悊鍒嗘瀽錛岃榪涜澶ч噺鐨勯噸鏂板紑鍙戝伐浣溿?/span>
銆銆鍦ㄦ湰閫氱敤鎶ヨ〃鐨勮璁′腑錛屽皢鎶ヨ〃妗嗘灦涓庢姤琛ㄦ暟鎹垎紱誨紑錛岀敤鎴峰嵆鑳芥牴鎹嚜宸辯殑闇瑕侀殢鎰忕粯鍒惰〃鏍鹼紝鍙堣兘鎸夌収涓氬姟瑕佹眰鑷富鐨勯夋嫨鏁版嵁鏉ユ簮銆備竴鏃︽鏋跺拰鏁版嵁鏉ユ簮瀹氫箟瀹屾瘯錛岀郴緇熷彲浠ヨ嚜鍔ㄧ敓鎴愭墍闇瑕佺殑鎶ヨ〃銆備負浜嗙粡嫻庣殑杈懼埌鏂逛究浣跨敤鐨勭洰鐨勶紝蹇呴』鍚告敹鍏堣繘鐨勮蔣浠跺紑鍙戞濇兂錛岄噰鐢ㄤ紭縐鐨勮蔣浠跺紑鍙戞柟娉曚互鎻愰珮杞歡璐ㄩ噺鍜岃蔣浠剁殑閲嶇敤鎬э紝鍏朵腑鎻愰珮杞歡鐨勯噸鐢ㄦф槸鍑忓皯寮鍙戞垚鏈殑鍏抽敭銆?/span>
銆銆鏈枃涓昏浠嬬粛MVC璁捐妯″紡鍦ㄩ氱敤鎶ヨ〃緋葷粺寮鍙戜腑鐨勫簲鐢紝緇欏嚭浜嗗叿浣撻棶棰樼浉搴旂殑瑙e喅鍔炴硶錛屾彁楂樹簡杞歡鐨勯氱敤鎬у拰鎵╁睍鎬с?/span>
2 璁捐妯″紡
銆銆璁捐妯″紡鏄璁¢潰鍚戝璞¤蔣浠剁殑榪囩▼涓褰曠殑鐭ヨ瘑鍜岀粡楠岋紝鐢ㄤ竴緋誨垪綾葷粨鏋勫拰瀵硅薄鏉ュ叿浣撴弿榪板叾鍚箟銆傝璁℃ā寮忕殑鐩殑灝辨槸澶嶇敤榪欎簺闈㈠悜瀵硅薄璁捐鐨勮В鍐蟲柟妗堬紝鏍規嵁鍏蜂綋搴旂敤瀹屾垚鍏蜂綋鐨勮璁′互鍙婁究浜庤繖浜涙娊璞¤В鍐蟲柟妗堢殑縐瘡鍜屼氦嫻併備笌涓嶄嬌鐢ㄨ璁℃ā寮忕殑杞歡緋葷粺鐩告瘮錛屼竴涓ぇ閲忎嬌鐢ㄨ璁℃ā寮忕殑杞歡緋葷粺鐨勫璞″緩妯℃洿鍔犲悎鐞嗭紝瀵硅薄闂寸殑鑰﹀悎搴︽洿灝忥紝鏁堢巼銆佸彲闈犳с佸彲鍗囩駭鎬с佸茍鍙戞с佸鉤琛屾у拰鍒嗗竷鎬ф洿楂橈紝鏇磋兘鑾峰緱楂樺眰嬈$殑璁捐澶嶇敤鍜屼唬鐮佸鐢ㄣ?/span>
銆銆璁捐妯″紡姒傚康鏈鍏堟潵鑷簬鍩庡競寤虹瓚涓撳瀵瑰緩絳戞ā寮忕殑瀹氫箟鈥滄瘡涓涓ā寮忔弿榪頒簡鍦ㄤ漢浠懆鍥翠笉鏂弽澶嶅彂鐢熺殑闂錛屼互鍙婅闂鐨勮В鍐蟲柟妗堢殑鏍稿績銆傝繖鏍鳳紝浣犲氨鑳戒竴嬈″張涓嬈$殑浣跨敤璇ユ柟妗堣屼笉蹇呭仛閲嶅鍔沖姩鈥濄傝繖縐嶅緩絳戜笂鐨勬ā寮忔濇兂鍦ㄩ潰鍚戝璞$殑璁捐妯″紡涓悓鏍烽傜敤錛屾ā寮忕殑鏍稿績灝卞湪浜庢彁渚涗簡鐩稿叧闂鐨勮В鍐蟲柟妗堛傝璁℃ā寮忕‘瀹氫簡鎵鍖呭惈鐨勭被鍜屽疄渚嬶紝瀹冧滑鐨勮鑹層佸崗浣滄柟寮忎互鍙婅亴璐e垎閰嶃傚畠閫氳繃鍒葷敾閮ㄤ歡闈欐佸拰鍔ㄦ佺粨鏋勫強鍏朵箣闂寸殑鍚堜綔鍏崇郴錛屾垚鍔熷湴搴旂敤浜庤В鍐沖晢涓氭暟鎹鐞嗐佺數瀛愰氫俊銆佸浘褰㈢敤鎴風晫闈€佹暟鎹簱銆佸垎甯冨紡閫氫俊杞歡絳夎蔣浠舵瀯閫犱腑鐨勯棶棰樸?/span>
銆銆涓鑸岃█錛岃璁℃ā寮忔湁4涓绱狅細鈶犳ā寮忓悕縐幫細鐢ㄦ潵鎻忚堪闂銆佽В鍐蟲柟妗堝拰鏁堟灉銆傗憽闂錛氭弿榪板彲浠ュ湪浠涔堟椂鍊欎嬌鐢ㄨ璁℃ā寮忋傗憿瑙e喅鏂規錛氭弿榪頒簡璁捐妯″紡鐨勭粍鎴愰儴鍒嗭紝瀹冧滑涔嬮棿鐨勭浉浜掑叧緋誨強鍚勮嚜鐨勮亴璐e拰鍗忎綔鏂瑰紡銆傗懀鏁堟灉錛氭弿榪頒簡妯″紡搴旂敤鐨勬晥鏋滃強浣跨敤妯″紡搴旇鏉冭 鐨勯棶棰樸備竴涓璁℃ā寮忓懡鍚嶆娊璞$‘瀹氫簡涓涓氱敤璁捐緇撴瀯鐨勪富瑕佹柟闈紝榪欎簺璁捐緇撴瀯鑳界敤鏉ユ瀯閫犲彲閲嶇敤鐨勯潰鍚戝璞¤璁°?/span>
銆銆鎴戜滑鍦ㄦ姤琛ㄧ郴緇熶腑涓昏浣跨敤浜嗘ā鍨?瑙嗗浘-鎺у埗鍣ㄨ璁℃ā寮?MVC)銆佽瀵熻咃紙Observer錛夈侀傞厤鍣ㄦā寮忥紙Adapter錛変互鍙婃ˉ鎺?Bridge)榪欏嚑縐嶈璁℃ā寮忋?/span>
3 璁捐妯″紡鐨勫簲鐢?/strong>
3.1 妯″瀷-瑙嗗浘-鎺у埗鍣紙MVC錛?/strong>
銆銆鎶ヨ〃緋葷粺涓負浜嗘柟渚跨敤鎴峰鏁版嵁鐨勫垎鏋愬拰浣跨敤錛屽悓涓涓氬姟鏁版嵁甯稿父闇瑕佸縐嶈鍥懼憟鐜幫紝鍗充竴涓〃鏍煎璞″拰涓涓煴鐘跺浘瀵硅薄鍙嬌鐢ㄤ笉鍚岀殑琛ㄧず褰㈠紡鎻忚堪鍚屼竴涓簲鐢ㄦ暟鎹璞$殑娑堟伅銆傝〃鏍煎璞″拰鏌辯姸瀵硅薄騫朵笉鐭ラ亾瀵規柟鐨勫瓨鍦紝榪欐牱浣跨敤鎴峰彲浠ユ牴鎹渶瑕佸崟鐙鐢ㄨ〃鏍兼垨鏌辯姸鍥撅紱褰撶敤鎴鋒敼鍙樻瘮琛ㄦ牸涓殑淇℃伅鏃訛紝鏌辯姸鍥捐兘绔嬪嵆鍙嶆槧榪欎竴鍙樺寲錛岃繖涓琛屼負鎰忓懗鐫琛ㄦ牸鍜屾煴鐘跺浘閮戒緷璧栦簬鏁版嵁瀵硅薄銆傛棭鏈熺殑鍥懼艦鍖栫▼搴忚璁″父甯稿洿緇曠潃浜嬩歡椹卞姩鐨勭敤鎴風晫闈㈡潵緇勭粐錛岃繖鏍風殑鐩存帴鍚庢灉灝辨槸鏁版嵁澶勭悊銆佺▼搴忓姛鑳戒笌鏄劇ず浠g爜瀹屽叏綰犵粨鍦ㄤ竴璧楓傚ぇ鍨嬬殑鍥懼艦鍖栫▼搴忎腑涓涓暟鎹氬父瀵瑰簲澶氱琛ㄧず涓庡鐞嗘柟寮忥紝鎶婄壒瀹氱晫闈㈢粦瀹氬埌搴旂敤紼嬪簭涓婁弗閲嶉檷浣庝簡紼嬪簭鐨勭伒媧繪э紝浣垮緱涓涓緢灝忕殑鏀瑰姩涔熺壍鎵埌澶ч噺鐨勪唬鐮侊紝澧炲姞浜嗙▼搴忓紑鍙戜笌緇存姢鐨勫伐浣滈噺銆?0涓栫邯70騫翠唬錛孧VC妯″紡鍦╯mall talk 80鐨凣UI璁捐涓鎻愬嚭錛屽茍涓旀弿榪頒簡涓嶅悓閮ㄥ垎鐨勫璞′箣闂寸殑閫氫俊鏂瑰紡錛屼嬌瀹冧滑涓嶅繀鍗峰叆褰兼鐨勬暟鎹ā鍨嬪紑鍙戞柟娉曚腑錛屼嬌紼嬪簭緇撴瀯鍙樺緱娓呮櫚鑰岀伒媧匯?/span>
銆銆MVC妯″紡鍖呮嫭涓変釜閮ㄥ垎錛氭ā鍨嬶紙Model錛夈佽鍥撅紙View錛夊拰鎺у埗鍣紙Controller錛?鍒嗗埆瀵瑰簲浜庡唴閮ㄦ暟鎹佹暟鎹〃紺哄拰杈撳叆杈撳嚭鎺у埗閮ㄥ垎銆傛ā鍨嬫槸涓庨棶棰樼浉鍏蟲暟鎹殑閫昏緫鎶借薄錛屼唬琛ㄥ璞$殑鍐呭湪灞炴э紝鏄暣涓ā鍨嬬殑鏍稿績銆傚畠閲囩敤闈㈠悜瀵硅薄鐨勬柟娉曪紝灝嗛棶棰橀鍩熶腑鐨勫璞℃娊璞′負搴旂敤紼嬪簭瀵硅薄錛屽湪榪欎簺鎶借薄鐨勫璞′腑灝佽浜嗗璞$殑灞炴у拰榪欎簺瀵硅薄鎵闅愬惈鐨勯昏緫銆傝鍥炬槸妯″瀷鐨勫鍦ㄨ〃鐜幫紝涓涓ā鍨嬪彲浠ュ搴斾竴涓垨鑰呭涓鍥撅紝濡傚浘褰㈢敤鎴風晫闈㈣鍥俱佸懡浠よ瑙嗗浘銆丄PI瑙嗗浘錛涙垨鎸変嬌鐢ㄨ呭垎綾伙細鏂扮敤鎴瘋鍥俱佺啛緇冪敤鎴瘋鍥劇瓑銆傝鍥懼叿鏈変笌澶栫晫浜や簰鐨勫姛鑳斤紝鏄簲鐢ㄧ郴緇熶笌澶栫晫鐨勬帴鍙o細涓鏂歸潰瀹冧負澶栫晫鎻愪緵杈撳叆鎵嬫錛屽茍瑙﹀彂搴旂敤閫昏緫榪愯錛涘彟涓鏂歸潰錛屽畠鍙堝皢閫昏緫榪愯鐨勭粨鏋滀互鏌愮褰㈠紡鏄劇ず緇欏鐣屻傛帶鍒跺櫒鏄ā鍨嬩笌瑙嗗浘鐨勮仈緋葷航甯︼紝鎺у埗鍣ㄦ彁鍙栭氳繃瑙嗗浘浼犺緭榪涙潵鐨勫閮ㄤ俊鎭紝騫跺皢鐢ㄦ埛涓嶸iew鐨勪氦浜掕漿鎹負鍩轟簬搴旂敤紼嬪簭琛屼負鐨勬爣鍑嗕笟鍔′簨浠訛紝鍐嶅皢鏍囧噯涓氬姟浜嬩歡瑙f瀽涓篗odel搴旀墽琛岀殑鍔ㄤ綔錛堝寘鎷縺媧諱笟鍔¢昏緫鎴栨敼鍙楳odel鐨勭姸鎬侊級銆傚悓鏃訛紝妯″瀷鐨勬洿鏂頒笌淇敼涔熷皢閫氳繃鎺у埗鍣ㄦ潵閫氱煡瑙嗗浘錛屼粠鑰屼繚鎸佸悇涓鍥句笌妯″瀷鐨勪竴鑷存с?/span>
銆銆瀹炵幇MVC妯″紡鏃墮潰瀵圭殑涓昏闂鏄疢odel鍜孷iew鐨勫叧緋伙紝鍦ㄨ璁℃ā寮忎腑鐨凮bserver妯″紡寰堝ソ鐨勬弿榪頒簡濡備綍寤虹珛榪欑鍏崇郴銆傝繖涓妯″紡涓叧閿殑瀵硅薄鏄洰鏍囷紙subject錛夊拰瑙傚療鑰?observer)銆備竴涓洰鏍囧彲浠ユ湁澶氫釜渚濊禆瀹冪殑瑙傚療鑰咃紱涓鏃︾洰鏍囧彂鐢熷彉鍖栵紝鎵鏈変緷璧栧畠鐨勮瀵熻呴兘寰楀埌閫氱煡錛屽茍鍋氬嚭鍝嶅簲錛屽嵆姣忎釜瑙傚療鑰呴兘灝嗘煡璇㈢洰鏍囪繘琛屾洿鏂幫紝浠ヤ繚璇佸拰鐩爣鐨勭姸鎬佸悓姝ャ傝繖縐嶆ā寮忓厑璁告垜浠嫭绔嬬殑鏀瑰彉鐩爣鍜岃瀵熻咃紱鐢ㄦ埛鍙互鍗曠嫭澶嶇敤鐩爣瀵硅薄鑰屾棤闇鍚屾椂澶嶇敤鍏惰瀵熻咃紝鍙嶄箣浜︾劧銆傝繖縐嶆ā寮忓彲浠ュ湪涓嶆敼鍔ㄧ洰鏍囧拰鍏朵粬瑙傚療鑰呯殑鍓嶆彁涓嬪鍔犺瀵熻呫?/span>
銆銆鍦ㄦ姤琛ㄧ郴緇熶腑錛岀洰鏍囧嵆涓轟笟鍔℃暟鎹紝瑙傚療鑰呭畾涔変負鍦ㄧ敤鎴風晫闈笂鐨勬樉紺鴻鍥俱傛樉紺鴻鍥炬槸鐢卞叾鐩稿叧鐨勪笟鍔℃暟鎹喅瀹氾紝褰撲笟鍔℃暟鎹彂鐢熷彉鍖栨椂錛岃鍥句篃灝嗗彂鐢熷彉鍖栥傚悓涓涓氬姟鏁版嵁浼氭湁澶氱鏄劇ず瑙嗗浘錛涚浉鍚岀被鍨嬬殑瑙嗗浘涔熷彲浠ヨ〃杈句笉鍚岀殑涓氬姟鏁版嵁銆傝屼笖鍙互鏍規嵁闇瑕佸湪浠繪剰鏃跺埢澧炲姞鍜屽垹闄ゆ樉紺鴻鍥撅紝澶уぇ鎻愰珮浜嗘姤琛ㄧ郴緇熺殑閫氱敤鎬с?/span>
銆銆褰撴姤琛ㄧ郴緇熶笟鍔℃暟鎹彉鍖栨椂錛屽畠瑕侀氱煡渚濊禆瀹冪殑鎵鏈夎鍥懼彂鐢熺浉搴旂殑鍙樺寲錛岃繖鏍峰氨闇瑕佸湪涓氬姟鏁版嵁瀵硅薄閲岃褰曚緷璧栧畠鐨勮鍥撅紝鎴栨槸澧炲姞涓涓叧鑱旀煡鎵炬満鍒躲傝繖涓ょ鏂規硶鍦ㄦ暟鎹拰瑙嗗浘闂翠緷璧栧叧緋繪瘮杈冨皯鏃跺彲浠ラ珮鏁堢殑瑙e喅闂錛屼絾褰撳畠浠箣闂寸殑鍏崇郴鐗瑰埆澶嶆潅鏃訛紝鎴戜滑灝遍渶瑕佷竴涓笓闂ㄧ殑瀵硅薄鏉ョ淮鎶よ繖浜涘叧緋伙紝榪欓噷鎴戜滑縐頒箣涓烘洿鏀圭鐞嗗櫒錛圕hangeManager錛夛紝瀹冪殑鐩殑鏄敖閲忓噺灝戣鍥懼弽鏄犳暟鎹彉鍖栨墍闇鐨勫伐浣滈噺銆備緥濡傦紝濡傛灉涓涓搷浣滄秹鍙婂埌瀵瑰嚑涓浉浜掍緷璧栫殑鐩爣榪涜鏀瑰姩錛屽氨蹇呴』淇濊瘉浠呭湪鎵鏈夌殑鐩爣閮藉凡緇忔洿鏀瑰畬姣曞悗錛屾墠涓嬈℃х殑閫氱煡瀹冧滑鐨勮瀵熻咃紝鑰屼笉鏄瘡涓洰鏍囬兘閫氱煡瑙傚療鑰呫傚彟澶栵紝瑙傚療鑰呭茍涓嶆槸瀵規墍鏈夌殑浜嬩歡閮芥劅鍏磋叮錛屽彲浠ユ墿灞曠洰鏍囩殑娉ㄥ唽鎺ュ彛錛岃涓瀵熻呮敞鍐屼負浠呭鐗瑰畾浜嬩歡鎰熷叴瓚o紝浠ユ彁楂樻洿鏂扮殑鏁堢巼銆傚綋涓涓簨浠跺彂鐢熸椂錛岀洰鏍囦粎閫氱煡閭d簺宸叉敞鍐屼負瀵硅浜嬩歡鎰熷叴瓚g殑瑙傚療鑰呫?/span>
銆銆Observer妯″紡鍦ㄦ姤琛ㄧ郴緇熶腑鐨勫眰嬈$粨鏋勫鍥?鎵紺猴紝鍏朵腑DataEntry涓轟笟鍔℃暟鎹娊璞★紝瀹冪殑鍏蜂綋瀹炵幇鐢盋oncreteDataEntry鏉ュ畬鎴愶紱UserView鏄樉紺鴻鍥劇殑鎶借薄錛屽叿浣撲嬌鐢ㄧ殑瑙嗗浘鐢盋oncreteUserView瀹炵幇錛涙洿鏀圭鐞嗗櫒錛圕hangeManage錛夌殑瀹炵幇鏈変袱縐嶏細SimpleChangeManage鍜孌AGChangeManage 錛屽畠浠垎鍒鐞嗗崟涓鐩爣鐨勭洰鏍団旇瀵熻呭叧緋誨拰澶氱洰鏍囩浉浜掑叧鑱旂殑鐩爣鈥旇瀵熻呭叧緋匯?/span>
鍥? 鎶ヨ〃緋葷粺涓璒bserver妯″紡灞傛緇撴瀯鍥?/p>
鍏朵腑涓氬姟鏁版嵁鐨勭被瀹氫箟濡備笅錛?br />
銆銆class DataEntry{
銆銆public :
銆銆virtual ~DataEntry();
銆銆virtual void Attach(UserView *pView ); //澧炲姞瑙嗗浘
銆銆virtual void Detach(UserView *pView); //鍒犻櫎瑙嗗浘
銆銆virtual void Notify(UserView *pSender); //閫氱煡
銆銆protected:
銆銆DataEntry ();
銆銆private:
銆銆List<UserView*> *UserViewList; //璁板綍瑙嗗浘
銆銆}
銆銆鏄劇ず瑙嗗浘鐨勫畾涔変負錛?br />銆銆class UserView{
銆銆public:
銆銆DataEntry getDataEntry(); /*鑾峰彇涓氬姟鏁版嵁瀹炰綋鐨勭姸鎬侊紝鐩稿綋浜庢ā寮忎腑鐨凣etState()鍜屻銆SetState()*/
銆銆virtual void Notify (UserView *pView);
銆銆virtual void OnDraw(UserView *pView);
銆銆//璁捐涓鴻櫄鍑芥暟浠ヤ緵閲嶈澆
銆銆protected:
銆銆List<DataEntry*> *DataEntryList;
銆銆//璁板綍涓氬姟鏁版嵁瀹炰綋
銆銆}
鍦ㄨ繖閲岀畝瑕佽鏄庝竴涓婲otify錛堬級鐨勫疄鐜幫細
銆銆void Notify:: DataEntry (UserView *pSender){
銆銆ASSERT(pSender==NULL||*UserViewList.IsEmpty()); //鍒ゆ柇瑙嗗浘鍒楄〃鏄惁涓虹┖
銆銆POSITION pos = GetFirstViewPosition ();
銆銆While (pos! = NULL)
銆銆{UserView* pView = GetNextView (pos);
銆銆ASSERT_VAILD (pView);
銆銆if (pView != pUserView)
銆銆pView->Notity ();}
3.2 閫傞厤鍣ㄦā寮忥紙Adapter錛?/span>
銆銆鍦ㄨ澶氬ぇ鍨嬩紒涓氬強鏌愪簺琛屼笟鐨勫眬鍩熺綉鎴栧箍鍩熺綉鍐咃紝鐢變簬鍘嗗彶鍜屾妧鏈彂灞曠殑鍘熷洜瀛樺湪鐫澶氱鏁版嵁搴撳悓鏃跺湪榪愯鐨勬儏鍐碉紝姣斿鏌愬ぇ鍨嬩紒涓氥佹煇鍦板尯鐨勭數鍔涘崟浣嶆垨鐢典俊鍏徃絳夛紝鍙兘姝e悓鏃跺湪浣跨敤鐫澶氱鏁版嵁搴擄紙Oracle, DB2, SQL Server, Sybase 鎴朓nformix絳夛級銆傚湪榪欐牱澶氱殑鏁版嵁搴撳茍瀛樼殑鐜涓嬶紝瑕佹眰鑳戒換鎰忚闂埌榪欎簺鏁版嵁搴擄紝瀹炵幇澶氱鏁版嵁搴撻棿鐨勬暟鎹漿鍖栥佽祫婧愬叡浜佹暟鎹竴鑷存у拰瀹屾暣鎬ф垚涓虹郴緇熷紑鍙戝拰搴旂敤涓竴涓挨涓虹獊鍑虹殑闂銆?/span>
銆銆鏋勫緩閫氱敤鐨勬暟鎹簱璁塊棶涓昏鏄疄鐜板鏁版嵁婧愯闂殑搴曞眰鎿嶄綔鐨勫皝瑁咃紝鑰屼粎浠呯粰鍑烘暟鎹鍙栧璞℃垨鏁版嵁闆嗗璞$瓑渚涘晢涓氶昏緫灞傝皟鐢紝鍥犳閲囩敤Adapter妯″紡錛屾牴鎹笉鍚岀殑鏁版嵁鎻愪緵鑰呬駭鐢熺浉搴旂殑鏁版嵁搴撹繛鎺ャ佹暟鎹簱鍛戒護絳夋暟鎹簱瀵硅薄鏉ュ疄鐜板浣庡眰鎿嶄綔鐨勫皝瑁咃紝閫氳繃鏆撮湶鎵ц鏁版嵁闆嗗璞$瓑涓婂眰鎿嶄綔浠ヤ緵鍏朵粬閫昏緫灞傝皟鐢ㄣ?/span>
銆銆瀵規暟鎹簱鐨勮闂熀紜鏄熀浜庣粨鏋勫寲鏌ヨ璇█錛圫QL錛夛紝鍦ㄥ叿浣撳鏁版嵁搴撶殑璁塊棶涓紝鏄氳繃SQL璇彞鏉ュ疄鐜扮殑銆傞噰鐢ㄨ繖縐嶈璁℃ā寮忓鏁版嵁搴撹繘琛岃闂殑鏂規硶鏄竴縐嶉氱敤璁塊棶鎶鏈紝鍗沖簲鐢ㄧ▼搴忓彲鐢ㄧ浉鍚岀殑婧愪唬鐮佽闂笉鍚岀被鍨嬬殑鏁版嵁搴擄紝濡係ybase, Oracle絳夈?/span>
銆銆Adapter妯″紡鏄皢涓涓被鐨勬帴鍙h漿鎹㈡垚瀹㈡埛甯屾湜鐨勫彟澶栦竴涓熷彛銆侫dapter妯″紡浣垮緱鍘熸湰鐢變簬鎺ュ彛涓嶅吋瀹硅屼笉鑳戒竴璧峰伐浣滅殑閭d簺綾誨彲浠ヤ竴璧峰伐浣滐紝瀹冨張縐頒負鈥淲rapper鈥濆寘瑁呭櫒銆傚綋瑕佷嬌鐢ㄤ竴涓凡緇忓瓨鍦ㄧ殑綾伙紝鑰屽畠鐨勬帴鍙d笉絎﹀悎闇瑕侊紝鎴栨槸鍒涘緩涓涓彲浠ュ鐢ㄧ殑綾伙紝璇ョ被鍙互涓庡叾瀹冧笉鐩稿叧鐨勭被鎴栦笉鍙瑙佺殑綾誨崗鍚屽伐浣溿?/span>
Adapter妯″紡鐨勫熀鏈粨鏋勫浘濡傚浘2鎵紺猴細
鍥? Adapter妯″紡鐨勫熀鏈粨鏋勫浘
銆銆Adapter妯″紡搴旂敤鍦ㄦ姤琛ㄧ郴緇熶腑錛屾ā寮忎腑Target鍗充負搴旂敤紼嬪簭涓暟鎹闂被錛屽畠璐熻矗榪涜鏁版嵁搴撶殑榪炴帴銆佽繘琛屾暟鎹簱鎿嶄綔絳夌瓑錛涙ā寮忎腑鐨凙daptee涓哄疄闄呭瓨鍦ㄧ殑鍚勭鏁版嵁搴擄紱鍦ㄨ繘琛岀郴緇熷疄鐜版椂鐨勪富瑕佸伐浣滄槸瀵逛笉鍚岀殑鏁版嵁搴撶紪鍐欑浉搴旂殑鏁版嵁婧愰┍鍔ㄧ▼搴忥紝鍗崇紪鍐橝dapter銆?/p>
銆銆搴旂敤紼嬪簭瀵規暟鎹簱鐨勮闂富瑕佹槸閫夋嫨涓涓暟鎹簮騫惰繛鎺ュ畠銆佹彁浜QL璇彞浠ュ強媯绱㈢粨鏋滐紝闄ゆ浠ュ榪樺彲浠ョ‘瀹氬茍璋冩暣椹卞姩紼嬪簭鐨勬ц兘銆佹祻瑙堟暟鎹簱緙栫洰絳夌瓑錛涘簲鐢ㄧ▼搴忎腑鏁版嵁璁塊棶綾婚氳繃鏁版嵁婧愰┍鍔ㄧ▼搴忚闂笉鍚屾暟鎹祫婧愪腑鐨勬暟鎹紝姣忎釜涓嶅悓鐨勬暟鎹祫婧愮被鍨嬬敱涓涓暟鎹簮椹卞姩紼嬪簭鏀寔銆?/span>
銆銆鏁版嵁婧愰┍鍔ㄧ▼搴忔槸澶勭悊鏁版嵁璁塊棶綾誨璞$殑鍑芥暟璋冪敤錛屾彁浜QL璇鋒眰鍒頒竴涓寚瀹氱殑鏁版嵁鍏冿紝騫舵妸緇撴灉榪斿洖鍒板簲鐢ㄧ▼搴忥紱濡傛灉鏈夊繀瑕侊紝鏁版嵁婧愰┍鍔ㄧ▼搴忎慨鏀逛竴涓簲鐢ㄧ▼搴忚姹傦紝浠ヤ嬌璇鋒眰涓庣浉鍏崇殑DBMS鏀寔鐨勮娉曚竴鑷淬傛瘡涓┍鍔ㄧ▼搴忛兘閽堝鐗瑰畾鐨凞BMS錛涗緥濡傦紝涓涓狾racle椹卞姩紼嬪簭涓嶈兘鐩存帴璁塊棶Informix DBMS涓殑鏁版嵁銆傛暟鎹簮椹卞姩紼嬪簭灞曠ず鍩虹DBMS鐨勮兘鍔涳紝浠栦滑涓嶈兘瀹炵幇DBMS涓嶆敮鎸佺殑鑳藉姏銆傚畠榪涜鏁版嵁婧愯繛鎺ャ佹鏌ュ簲鐢ㄧ▼搴忎腑鐨勫嚱鏁伴敊璇佸垵濮嬪寲浜嬪姟鍜屾妸SQL璇彞鎻愪氦緇欐墽琛岀殑鏁版嵁婧愩傛暟鎹簮椹卞姩紼嬪簭蹇呴』鎶婂簲鐢ㄧ▼搴忕殑 SQL淇敼鎴愰拡瀵圭浉搴擠BMS鐨凷QL錛屽茍鎶婃暟鎹彂閫佸埌鏁版嵁婧愶紝鎴栦粠鏁版嵁婧愭绱㈡暟鎹紝鍖呮嫭鏍規嵁搴旂敤紼嬪簭鐨勬寚瀹氭潵杞崲鏁版嵁綾誨瀷錛屾渶鍚庢柇寮涓庢暟鎹簮鐨勮繛鎺ャ?/p>
銆銆褰撴暟鎹簮椹卞姩紼嬪簭鐨勬暟閲忓鍔狅紝騫朵笖澶勭悊鐨勪簨鐗╅愭笎澶嶆潅鏃訛紝浠呬粎鐢ㄥ簲鐢ㄧ▼搴忕殑鏁版嵁璁塊棶綾繪潵榪涜椹卞姩紼嬪簭鐨勭鐞嗗凡澶уぇ澧炲姞浜嗙郴緇熺殑璐熸媴錛屾垜浠彲浠ユ彁渚涗竴涓┍鍔ㄧ▼搴忕鐞嗗櫒鏉ョ鐞嗘暟鎹簮椹卞姩紼嬪簭銆傛鏃跺簲鐢ㄧ▼搴忔槸琚繛鎺ュ埌椹卞姩紼嬪簭綆$悊鍣紝鑰屼笉鏄┍鍔ㄧ▼搴忋傚畠浣跨敤搴旂敤紼嬪簭浼犻掔殑榪炴帴鍙ユ焺鎼滅儲鐩爣椹卞姩紼嬪簭涓殑鍑芥暟鍦板潃錛屽茍閫氳繃鍦板潃璋冪敤閭d釜鍑芥暟銆傞┍鍔ㄧ▼搴忕鐞嗗櫒澶氭暟鍙槸鎶婂嚱鏁拌皟鐢ㄤ粠搴旂敤紼嬪簭浼犻佺粰姝g‘鐨勯┍鍔ㄧ▼搴忋傞┍鍔ㄧ▼搴忕鐞嗗櫒鏈緇堢殑浣滅敤鏄姞杞藉拰鍗歌澆鏁版嵁婧愰┍鍔ㄧ▼搴忥紝搴旂敤紼嬪簭鍙姞杞藉拰鍗歌澆椹卞姩紼嬪簭綆$悊鍣ㄣ傚綋瀹冭浣跨敤涓涓壒孌婄殑椹卞姩紼嬪簭鏃訛紝瀹冭皟鐢ㄩ┍鍔ㄧ▼搴忕鐞嗗櫒涓殑榪炴帴鍑芥暟錛屽茍鎸囨槑涓涓壒孌婃暟鎹簮鎴栭┍鍔ㄧ▼搴忓悕銆備嬌鐢ㄨ鍚嶇О錛岄┍鍔ㄧ▼搴忕鐞嗗櫒涓洪┍鍔ㄧ▼搴忔枃浠跺悕鏌ヨ鏁版嵁婧愪俊鎭紝姣斿SQLSRVR.DLL錛岀劧鍚庡畠鍔犺澆椹卞姩紼嬪簭錛屼繚瀛橀┍鍔ㄧ▼搴忎腑姣忎釜鍑芥暟鐨勫湴鍧錛屽茍璋冪敤椹卞姩紼嬪簭涓殑榪炴帴鍑芥暟錛岀劧鍚庡垵濮嬪寲瀹冭嚜宸憋紝騫惰繛鎺ュ埌鏁版嵁婧愩傚綋搴旂敤紼嬪簭浣跨敤椹卞姩紼嬪簭鍋氬畬宸ヤ綔鍚庯紝瀹冭皟鐢ㄩ┍鍔ㄧ▼搴忕鐞嗗櫒涓殑SQLDisconnect銆傞┍鍔ㄧ▼搴忕鐞嗗叾涓皟鐢ㄩ┍鍔ㄧ▼搴忎腑鐨勬鍑芥暟錛屾柇寮涓庢暟鎹簮鐨勮繛鎺ャ傜劧鑰岋紝椹卞姩紼嬪簭綆$悊鍣ㄩ噸鏂拌繛鎺ュ畠鏃訛紝鎶婇┍鍔ㄧ▼搴忎繚鐣欏湪鍐呭瓨涓傚彧鏈夊綋搴旂敤紼嬪簭閲婃斁椹卞姩紼嬪簭浣跨敤鐨勮繛鎺ワ紝鎴栬呬嬌鐢ㄤ笉鍚岀殑椹卞姩紼嬪簭榪炴帴錛屽茍涓旀病鏈夊櫒瀹冭繛鎺ヤ嬌鐢ㄦ椹卞姩紼嬪簭鏃訛紝瀹冩墠鍗歌澆椹卞姩紼嬪簭銆?/p>
3.3 妗ユ帴妯″紡(Bridge)
銆銆Bridge璁捐妯″紡鏃跺璞$粨鏋勬ā寮忕殑涓縐嶏紝瀹冨皢鎶借薄閮ㄥ垎涓庡疄鐜伴儴鍒嗗垎紱伙紝浣垮畠浠兘澶熺嫭绔嬪疄鐜般傚綋鍦ㄤ竴涓▼搴忎腑錛屾煇涓涓娊璞″彲浠ョ敱寰堝瀹炵幇鏂規硶鐨勬椂鍊欙紝鎴戜滑閫氬父鏄嬌鐢ㄩ潰鍚戝璞′腑緇ф壙鐨勬柟娉曟潵瀹炵幇騫跺崗璋冭繖浜涙柟娉曘備絾鏄繖縐嶇戶鎵挎満鍒舵湁浠ヤ笅涓嶈凍鐨勫湴鏂癸紝鑰屼嬌鐢˙ridge璁捐妯″紡閮借兘浣胯繖浜涗笉瓚沖緱鍒板緢濂藉湴瑙e喅銆?/span>
銆銆緇ф壙鏈哄埗浣垮鎴蜂唬鐮佸湪瀹炵幇鍔熻兘鐨勬椂鍊欐秹鍙婂埌鐗瑰畾鐨勭浉搴斿鉤鍙幫紝涓庡鉤鍙頒駭鐢熺浉鍏蟲э紝瀵逛唬鐮佺殑縐繪浜х敓寰堝ぇ鐨勫洶闅撅紝浣嗘槸Bridge璁捐妯″紡灝嗘娊璞″拰瀹炵幇閮ㄥ垎鏀懼湪鐙珛鐨勪笉鍚屽眰嬈$殑綾葷粨鏋勪腑錛屽皢鎶借薄涓笌緋葷粺騫沖彴鐩稿叧閮ㄥ垎鍒嗙寮鏉ワ紝鍚屾椂涔熼檷浣庝簡瀹炵幇閮ㄥ垎瀵圭紪璇戠殑渚濊禆鎬э紝褰撴敼鍙樹竴涓疄鐜扮被鏃訛紝騫朵笉闇瑕侀噸鏂扮紪璇戞娊璞¢儴鍒嗗拰瀹冪殑瀹㈡埛紼嬪簭銆?/span>
銆銆鎴戜滑鐨勬姤琛ㄧ郴緇熸槸涓涓氱敤緋葷粺錛屾垜浠笇鏈涜繖涓郴緇熻兘澶熸敮鎸佸紿楀彛緋葷粺銆傝櫧鐒朵笉鍚岀殑紿楀彛緋葷粺鏈変笉鍏煎鐨勭▼搴忚璁℃帴鍙o紝浣嗘槸鎵鏈夌殑紿楀彛緋葷粺鎬葷殑鏉ヨ榪樻槸鍦ㄥ仛鍚屼竴浠朵簨鎯咃紝鎴戜滑鍙互瀵逛笉鍚岀殑紿楀彛緋葷粺鍋氫竴涓粺涓鐨勬娊璞★紝鍦ㄥ鍚勭獥鍙g郴緇熺殑瀹炵幇鍋氫竴浜涜皟鏁達紝浣夸箣絎﹀悎鍏叡鎺ュ彛銆?/span>
銆銆鎴戜滑棣栧厛瀹氫箟涓涓猈indows鎶借薄綾伙紝瀹冨皝瑁呬簡闇瑕佸悇紿楀彛緋葷粺閮借鍋氱殑涓浜涗簨鎯咃紝騫朵笖鑳借法瓚婁笉鍚岀殑紿楀彛緋葷粺瀹炵幇銆傚湪榪欎釜鎶借薄綾繪彁渚涗簡鏀寔澶у鏁扮獥鍙g郴緇熺殑鏂逛究鎺ュ彛錛屽叾鍏蜂綋鐨勫瓙綾繪敮鎸佺敤鎴風敤鍒扮殑涓嶅悓縐嶇被鐨勭獥鍙o紝鑰屽涓嶅悓紿楀彛緋葷粺鐨勫疄鐜板垯鐢盬indowImp綾誨眰嬈¢殣钘忋俉indowImp鏄竴涓皝瑁呬簡紿楀彛緋葷粺鐩稿叧浠g爜鐨勫璞$殑鎶借薄綾伙紝涓轟簡浣挎姤琛ㄧ郴緇熻繍琛屼簬涓涓壒瀹氱殑紿楀彛緋葷粺錛屾垜浠敤璇ュ瓙緋葷粺鐨勪竴涓猈indowImp瀛愮被璁劇疆Window瀵硅薄銆傝繖鏍鳳紝閬垮厤浜嗗紿楀彛緋葷粺鐨勭洿鎺ヤ緷璧栵紝榪欐牱鍙互璁¦indows綾諱繚鎸佺浉瀵硅緝灝忚屼笖杈冪ǔ瀹氾紝鍚屾椂榪樿兘鏂逛究鐨勬墿灞曞疄鐜板眰嬈$粨鏋勪互鏀寔鏂扮殑紿楀彛緋葷粺銆?/span>
銆銆Window鍜學indowImp灞傛緇撴瀯涔嬮棿鐨勫叧緋繪湁涓嬪浘鎵紺猴紝鍏朵腑Windows_X鍗充負鍙互鎵╁睍鐨勭獥鍙g郴緇熸帴鍙c?/span>
鍥? Window鍜學indowImp灞傛緇撴瀯
4 緇撹
銆銆搴旂敤璁捐妯″紡鍙互浣跨湅浼煎鏉傜殑緋葷粺璁捐鍜屽疄鐜扮畝鍗曞寲錛岃璁″嚭鏉ョ殑緋葷粺鍏鋒湁鐏墊椿銆佸仴澹拰鍙鐢ㄦу己絳夌壒鐐癸紝鑰屼笖榪樺彲浠ユ柟渚垮紑鍙戜漢鍛樼殑娌熼氬拰浜ゆ祦錛屼繚璇佽蔣浠跺紑鍙戞枃妗g殑鍑嗙‘鎬у拰鏄撹鎬э紝渚夸簬浠g爜寮鍙戝伐浣溿傚湪鎶ヨ〃緋葷粺涓紩鍏ヨ璁℃ā寮忥紝涓嶄粎鍔犳繁浜嗗闈㈠悜瀵硅薄鎬濇兂鐨勮璇嗭紝鑰屼笖浣垮緱緋葷粺鐨勮璁¢棿鎺ユ槑浜嗭紝鎻愰珮浜嗚蔣浠剁郴緇熺殑鍙淮鎶ゆу拰浼哥緝鎬с?/span>
銆銆鏂囩珷灝辮璁℃ā寮忓湪閫氱敤鎶ヨ〃緋葷粺涓殑浣跨敤榪涜浜嗕竴瀹氱殑鐮旂┒鍜屾帰璁ㄣ備富瑕佸氨閫氱敤鎶ヨ〃緋葷粺涓嚑涓叧閿殑閫氱敤闂緇欏嚭浜嗙浉鍏崇殑璁捐妯″紡瑙e喅鏂規銆傝閫氱敤鎶ヨ〃鐨勮璁′負瑙e喅闆嗗洟鎬т紒涓氥佹斂搴滅粺璁$殑鎶ヨ〃姹囨誨垎鏋愩侀綆楃紪鍒躲佸悎騫舵姤琛ㄧ殑瑙e喅鏂規錛涘畠榪樺彲浠ュ紩鍏ュ埌鍒嗛攢綆$悊涓紝浠ユ壙鎷匘RP緋葷粺涓復鏃舵с侀潪緇撴瀯鍖栨暟鎹殑緇熻浠誨姟錛涙牴鎹粺璁$鐞嗗璞$殑涓嶅悓錛屽畠榪樿兘鎴愪負緗戜笂浜轟簨緇熻銆佽祫浜х鐞嗙郴緇熺殑浜屾寮鍙戝鉤鍙般?/span>