Delphi MIS開(kāi)發(fā)架構(gòu)心得_第1頁(yè)
Delphi MIS開(kāi)發(fā)架構(gòu)心得_第2頁(yè)
Delphi MIS開(kāi)發(fā)架構(gòu)心得_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

DelphiMIS開(kāi)發(fā)架構(gòu)心得一關(guān)于開(kāi)發(fā)工具.數(shù)據(jù)庫(kù)比較流行的是Delphi+Sqlserver.Delphi的好處我就不多說(shuō)了.大家可以在網(wǎng)上找到很多.至于選擇Sqlserver的原因,一是對(duì)中小型企業(yè)來(lái)說(shuō),Sqlserver的性能也還可以,價(jià)格相對(duì)于oracle來(lái)說(shuō)要便宜很多.再就是Microsoft的東西在易用性方面的確下了不少功夫.幫助資料齊全,本地化的語(yǔ)言也做得好.再加上目前國(guó)內(nèi)的版權(quán)意識(shí)不是很高.所以選擇Sqlserver的人很多.其實(shí)開(kāi)源的firebirdsql,postgresql等等也還是很不錯(cuò)的,又不用花錢(qián),但在國(guó)內(nèi)用的人很少.二關(guān)于數(shù)據(jù)庫(kù)連接層.用Borland的BDE還是MS的ADO,到底哪個(gè)好.(新的dbexpress俺沒(méi)用過(guò),不敢發(fā)言).其實(shí)BDE和Ado都很優(yōu)秀.BDE因?yàn)椴皇莣indows的東西,要另外安裝,比較麻煩些.Ado則是高版本windows內(nèi)置的.目前來(lái)看,用ADO的人數(shù)遠(yuǎn)遠(yuǎn)大于用BDE的.但BDE有一個(gè)好處,它的更新可控制性要比ADO強(qiáng).它有一個(gè)UpdateSql組件,可以自定義更新的三種sql語(yǔ)句.這個(gè)優(yōu)點(diǎn)已經(jīng)被ADO.Net吸收了.三關(guān)于三層還是兩層的問(wèn)題.看了一下國(guó)內(nèi)和臺(tái)灣的幾家較有名氣的軟件公司.三層是大勢(shì)所趨.但目前做兩層的還是多數(shù).國(guó)內(nèi)神xxx的Erp軟件,臺(tái)灣統(tǒng)x的軟件用的是三層,同樣用的是delphi的開(kāi)發(fā)工具.東莞有家小軟件公司做的進(jìn)銷存也是三層.都用的borland的midas技術(shù).國(guó)內(nèi)的速xErp是個(gè)假三層的,怎么說(shuō)呢.它有個(gè)后臺(tái)”應(yīng)用程序服務(wù)器”在運(yùn)行,但只起到客戶端的連接監(jiān)控作用,商業(yè)邏輯仍然是放在數(shù)據(jù)庫(kù)后臺(tái)的.所以說(shuō)是假三層.四關(guān)于面向?qū)ο笈c關(guān)系數(shù)據(jù)庫(kù)的矛盾問(wèn)題.網(wǎng)上討論很多.牽涉到三層的設(shè)計(jì)問(wèn)題.牽涉到對(duì)象感知組件的問(wèn)題.國(guó)外也有很多討論.解決的方式大致有兩種,一種是不用或者少用數(shù)據(jù)感知控件,自己寫(xiě)代碼控制數(shù)據(jù)的變化控制與輸入輸出.這樣可以封裝實(shí)體類.以實(shí)體類或者實(shí)體類集合來(lái)工作,另外創(chuàng)建功能類,在功能類中寫(xiě)方法操縱實(shí)體類.不過(guò)這樣一來(lái)工作量很大的.需要有object/relational自動(dòng)映射工具幫助實(shí)現(xiàn).第二種是用數(shù)據(jù)感知控件.并且以dataset為中心.需要自己創(chuàng)建的實(shí)體類很少.商業(yè)邏輯還是要寫(xiě)sql語(yǔ)句,不管是放在什么地方.就是存儲(chǔ)過(guò)程也不過(guò)是預(yù)編譯的sql語(yǔ)句集合.這種方式比較大眾化,對(duì)部分程序員的要求可以放低些(不要誤會(huì)說(shuō)這種方式的水平低).而且可以配合midas技術(shù)使用.國(guó)內(nèi)神州數(shù)碼的erp就是用這樣做的.五.關(guān)于midas技術(shù)中的商業(yè)邏輯怎樣安排的問(wèn)題.臺(tái)灣李維的書(shū)也將midas,也講商業(yè)邏輯.但他好像沒(méi)有怎樣用midas實(shí)現(xiàn)商業(yè)邏輯(也許李維講了是本人沒(méi)有看到.).其實(shí)這個(gè)商業(yè)邏輯很簡(jiǎn)單,就在那個(gè)DataSetProvider的beforeapplyupdates和afterapplyupdates中自己寫(xiě)好了.在這里要檢查哪些值改變了,改變量是多少,針對(duì)這些改變量,我還要改變數(shù)據(jù)庫(kù)中其他那些表的哪些記錄的哪些字段值.舉個(gè)例子.以開(kāi)一張銷售出貨單來(lái)看.該張銷售單賣(mài)了A產(chǎn)品100個(gè),B產(chǎn)品50個(gè),那么要在庫(kù)存現(xiàn)存量中減去A產(chǎn)品100個(gè),B產(chǎn)品50個(gè),在財(cái)務(wù)的應(yīng)收帳里加上這個(gè)客戶本張單的欠款.具體要看你的數(shù)據(jù)庫(kù)設(shè)計(jì)和數(shù)據(jù)流程.通常的erp軟件里面商業(yè)邏輯很復(fù)雜,往往要改另外5,6個(gè)表以上,包括增,刪,改都有可能.通常在數(shù)據(jù)庫(kù)中寫(xiě)好storeproduce,然后在中間層調(diào)用.這種情況基本上不用寫(xiě)觸發(fā)器(trigger).對(duì)應(yīng)觸發(fā)功能是由應(yīng)用服務(wù)器完成的.但如果沒(méi)有用midas,是兩層結(jié)構(gòu).往往免不了寫(xiě)trigger.是否另外寫(xiě)storeproduct看情況需要.一般不推薦在客戶端寫(xiě)商業(yè)邏輯,一方面編程難度加大,這種方式對(duì)用戶的數(shù)據(jù)操作必須及時(shí)跟蹤.另外修改了商業(yè)邏輯必須重新編譯代碼.不像在數(shù)據(jù)庫(kù)端改了觸發(fā)器即時(shí)生效,而且通??蛻舳溯^多,而數(shù)據(jù)庫(kù)服務(wù)器只有一個(gè),不存在版本更新的分發(fā)問(wèn)題.六關(guān)于主從表,英文通常叫master/detail.做數(shù)據(jù)庫(kù)通常免不了要用主從表.BDE和ADO都支持主從表.A就更方便了.此處不談.不過(guò)要注意主從表的增加一定要放在同一個(gè)事務(wù)下主從表的構(gòu)成有兩種方式.一種是query組件,設(shè)置deltaildatast的datasource屬性,然后在detail表的sql語(yǔ)句中用where語(yǔ)句關(guān)聯(lián)主表.如select*fromdetailtablewheredetailtable.masterid=:id,id為主表主鍵.另外是用adodataset,從表select語(yǔ)句如常,但設(shè)置其datasource為對(duì)應(yīng)主表的datasource,,并設(shè)其masterfields屬性為主表的主鍵.注意在保存數(shù)據(jù)前主表beforepost事件中要開(kāi)啟事務(wù),取消主從關(guān)系,在afterpost事件中保存從表數(shù)據(jù),提交事務(wù),恢復(fù)主從關(guān)系.具體原因我還不清楚.七關(guān)于dataset中的lookupfield的問(wèn)題.一般好的數(shù)據(jù)庫(kù)設(shè)計(jì)要符合范式.就是盡量減少數(shù)據(jù)庫(kù)的冗余.想深入研究得學(xué)<數(shù)據(jù)庫(kù)原理>.舉個(gè)例子.一個(gè)銷售訂單.單據(jù)上有客戶編號(hào),客戶名稱,客戶地址.交易金額等等.上面列出字段都是要顯示和打印出來(lái)的.但實(shí)際上我們?cè)陉P(guān)系數(shù)據(jù)庫(kù)的訂單主表中跟客戶相關(guān)的就只保留一個(gè)客戶編號(hào)字段.其他字段如客戶名稱,客戶地址都不要在訂單表中保留.但是前面說(shuō)了我要顯示啊,怎么辦.有兩種方法.一種是在某出地方另外放一個(gè)讀取客戶表的dataset,然后在訂單主表saleordermaster中加幾個(gè)類型為fklookup的查找字段,設(shè)好他們的屬性指向customerdataset相關(guān)字段.這種方法比較常用.還有一種方法是數(shù)據(jù)庫(kù)的設(shè)計(jì)不變,但在saleordermaster這個(gè)dataset中使用連接語(yǔ)句比如select訂單主表.*,客戶表.*from訂單主表訂innerjoin客戶表客on訂.客戶id=客.客戶id.可以一次join幾個(gè)表,并不限于兩個(gè).對(duì)于這種join后的表,修改后保存有些特殊規(guī)定.一般只能修改其中一個(gè)物理表.此處我們修改的是訂單主表.對(duì)客戶的修改,屬于基本數(shù)據(jù),可以放在另外的地方.但怎樣讓程序知道我們要修改的是訂單主表而不是客戶表了.對(duì)BDE和ADO.處理方法不同.bde中可以設(shè)置saleordermaster這個(gè)dataset的updateobject組件(是updateSQL類型),在其中自己寫(xiě)更新語(yǔ)句,只更新訂單主表即可,客戶表忽略.對(duì)于Ado,一般因?yàn)橄鄬?duì)于客戶表,訂單主表是從表,客戶表是主表,ado有一定的只能,它會(huì)修改從表而保持主表不動(dòng).如果有問(wèn)題,則可以明確指出只修改訂單主表.用以下語(yǔ)句:perties[‘uniquetable’]=’訂單主表’指明即可.另外這種方式還有一點(diǎn)要注意.如果新增一條記錄,客戶表的客戶id是可以填,但客戶名稱和客戶地址它不會(huì)自動(dòng)去后臺(tái)數(shù)據(jù)庫(kù)自行查找再填充的,你必須在dataset的afternew事件中自己想辦法把他們填到當(dāng)前記錄的相應(yīng)字段中.可以自己定義一些函數(shù)專為此用.比如getcusterombyId()等等.八.關(guān)于sqlserver數(shù)據(jù)庫(kù)的identity問(wèn)題.我自己也曾困惑了很久.單純對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō).有個(gè)identity字段是比較方便的.但是結(jié)合起前端開(kāi)發(fā)工具來(lái)說(shuō).用不用,怎樣用,就要仔細(xì)斟酌了.我見(jiàn)過(guò)幾個(gè)軟件,臺(tái)灣統(tǒng)xERP,大陸速xERP,都是用的sqlserver.都不用identity字段.他們還是用整數(shù)做Primarykey,但不是identity.這種安排的一個(gè)重要原因是主從表的同步問(wèn)題.因?yàn)閕dentity的值做主鍵必須等存盤(pán)成功后才知道到底是多少.而從表保存時(shí)就需要知道主表的primarykey.我在第六部分說(shuō)的”斷開(kāi)主從關(guān)系”可能也與此相關(guān).在微軟的體

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論