基于SQL的Web程序快速開發(fā)方案 探討_第1頁
基于SQL的Web程序快速開發(fā)方案 探討_第2頁
基于SQL的Web程序快速開發(fā)方案 探討_第3頁
基于SQL的Web程序快速開發(fā)方案 探討_第4頁
基于SQL的Web程序快速開發(fā)方案 探討_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基于SQL的Web程序快速開發(fā)方案 探討李 軍2005-09-09 keep it simple by patterns2原則與目的 Principle & ObjectiveKISSKeep it simple, stupid!AgileQuick, Change , Reuse!LessLess is More!MaintainabilityEasy to maintenance3原則與目的 Principle & Objective Pareto principle 80/204outline 實(shí)例構(gòu)想引子介紹選擇其他Java5Demo1一個帶各種查詢(日期,人名)排序(

2、按自選的排序內(nèi)容正序倒序)條件的列數(shù)不定的顯示表格6Demo2一個帶各種查詢(日期,人名)排序(按自選的排序內(nèi)容正序倒序)條件的含有rowspan的復(fù)雜顯示表格7Demo3一個帶各種查詢排序條件的具有單獨(dú)刪除和批量刪除功能的表格8提問Question需要編寫多少行代碼來完成各個頁面?How many lines need to code?9答案Answer0 line 1 line2 lines3 linesn linesNeed some timeJust now!10outline實(shí)例 構(gòu)想引子介紹選擇其他Java11構(gòu)想final fancy整個開發(fā)流程80%以上的功能代碼自動生成。完成

3、設(shè)計(jì)即完成代碼。12outline實(shí)例構(gòu)想 引子介紹選擇其他Java13引子 Preface典型模式應(yīng)用14Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same w

4、ay twice. A Pattern Language: Towns, Buildings, Construction,Christopher Alexander, et al, Oxford University Press, 1977Pattern15“A pattern is a named nugget of instructive information that captures the essential structure and insight of a successful family of proven solutions to a recurring problem

5、 that arises within a certain context and system of forces.”Pattern16模式是一個很寬泛的詞,并不局限于GOF的20多種Design Patterns.這個世界上存在成千上萬種模式。Pattern17PatternDemo中用到的Patterns包括: Regular Expression Design Pattern Kylix/Delphi Language Pattern Simple Defination Pattern By Myself18outline實(shí)例構(gòu)想引子 介紹選擇其他Java19Essential Ele

6、mentPageControlRowSetParamsParseSql ( use Regular expression engine )Database tables & Auxiliary develop pageAdapter ( only used in Kylix Websnap)DbControlFactory & Builder . Design PatternsSelf-define params in Sql Only Business Logic Part20Concerning display頁面上的邏輯無非就是取值顯示或者一些簡單的顯示邏輯具體如何實(shí)現(xiàn)與

7、所用的語言有關(guān) Only Display Logic Part (not include javascript)21Public api principle盡可能做到:易于使用數(shù)量精簡盡可能用重載,而不用太多參數(shù)。22Sql Format introduceQuery : 支持對應(yīng)參數(shù)的替換 支持對應(yīng)參數(shù)無值時刪除 發(fā)現(xiàn)未知參數(shù)時刪除Update or Insert: 支持對應(yīng)參數(shù)的替換 對應(yīng)參數(shù)無值時拋出異常 發(fā)現(xiàn)未知參數(shù)時拋出異常23Sql Format examplesselect * from table1 t where =:select * from tab

8、le1 t where like %:select * from table1 t where not in (:)select * from table1 t where not in (:)select * from table1 t where not in (:) and ( t2.id :t2.id ) order by :myorder :mydescselect * from table1 t where between to_date(:,yyyy-

9、mm-dd) and to_date(:,yyyy-mm-dd)Delete from table1 t1 where t1.id in (:t1.id)對于 where 后面的 條件 標(biāo)記符號是冒號, 形式是:xx.yy形式,對于 order by, desc,asc 則 :xx 無需冒號即可。從html 傳入的參數(shù)中相應(yīng)的名字格式要對應(yīng)成 xx.yy ,這樣可以實(shí)現(xiàn)自動替換,無需編寫代碼。24ParseSql function GetQuerySql(sql:string;queryparams:TSingleParams):string; /sql必須是特殊格式的sql.傳入

10、的參數(shù)必須支持多值。function GetExecUpdateSql(sql:string;queryparams:TSingleParams):string; / 策略與querysql 大不相同,所以另寫。function GetParsedSql(sql:string;queryparams:TSingleParams):string; / 自動判斷屬于哪類sql并解析。僅3個對外的API.使用一個 Delphi/Kylix均支持的簡單 regex engine. 此引擎功能較簡單,主要用于教學(xué)范例,僅支持標(biāo)準(zhǔn)的 BNF(Backus-Naur Form),無任何擴(kuò)展。為方便使用,稍做

11、了修改。 25PageControlPageControl 是頁面總控制類,封裝了眾多對象,如數(shù)據(jù)庫操作類等,所有的對數(shù)據(jù)的相關(guān)操作都通過它的API來完成,無需聲明和訪問其他對象。RowSet 是一個帶標(biāo)題的行集,對應(yīng)Sql語句查詢出的結(jié)果集。SingleParams 是一個多行且每行變長的字符串?dāng)?shù)組,可以通過下標(biāo)和每一行的名稱同時訪問。每一行對應(yīng)一個名稱的多個值。Adapter 用于頁面顯示,傳遞顯示數(shù)據(jù)。目的是為了解決:參數(shù),數(shù)據(jù)庫操作,結(jié)果集, 顯示26簡單介紹已經(jīng)實(shí)現(xiàn)的部分內(nèi)容:相關(guān)的API 已經(jīng)應(yīng)用在考務(wù)取消預(yù)約,預(yù)約日志查看/cgi-bin/eos/common/view/view

12、.cgi/log /cgi-bin/eos/common/view/view.cgi/Demo1/cgi-bin/eos/common/view/view.cgi/Demo2/cgi-bin/eos/common/view/view.cgi/Demo3等程序中提高了開發(fā)速度。27Demo 1 的代碼實(shí)例:僅需設(shè)置一個變量:pagec:TPageControl;Pagec := TDemoFactory.Create(self,Adapter1);Pagec.GetAllQuery(request);Sql := select xx ,xx2 from yy,yy2 where .;Pagec.

13、SetDisplayRowSet(sql);28Demo 2 的代碼實(shí)例:僅需設(shè)置一個變量:pagec:TPageControl;一行代碼:Pagec := TDemoFactory.Create(self,response).get(123);29Demo 3 的代碼實(shí)例:代碼:Pagec :=PageControl.Create(self,adapter1);Pagec.getallquery(request);beginsql:= delete from tbl_course c where c.coruseid in (:c.courseid) pagec.execupdate(sql

14、);End;Sql := select xxx from tbl_course where c.academyid=(:c.academyid) order by :myorder :mydesc;Pagec.SetDisplayRowSet(sql);30預(yù)想中的擴(kuò)展: Sql和程序信息存儲在 數(shù)據(jù)庫表中 ,例如 sqlid, sqlname, content, type,programid, program info 等其中sql type 包括 (rowset,singlevalue,selectOptions,.)寫一個程序和sql的開發(fā)頁面。 PageBuilder 從 數(shù)據(jù)庫中讀取

15、,調(diào)用pagecontrol31預(yù)想中的擴(kuò)展和應(yīng)用: 通過 Factory 和Builder Pattern,PageControl 的繼承,添加toxml方法等 來實(shí)現(xiàn)同時對 TNDP 的 xml 格式同時支持。 存貯到數(shù)據(jù)庫表后可以作為 HtmlReport 和 XmlReport的補(bǔ)充和擴(kuò)張。32Business LogicAll Business logic only exists in Sql sentences Html elements names Sql stored in tables, easy to maintenance.Easy to test names for v

16、alidity33outline實(shí)例構(gòu)想引子介紹 選擇其他Java34Other choice處于某種考慮,不愿使用這套最終解決方案。(例如兼容舊有程序等)使用其中的基本數(shù)據(jù)結(jié)構(gòu),API及相關(guān)思路仍然能減少80%以上的代碼。實(shí)例介紹 : 入學(xué)測試單科成績錄入(沒有使用自動替換參數(shù)的特性,自己拼sql,使用相關(guān)API ,將2個rowset進(jìn)行列方向的合并)35outline實(shí)例構(gòu)想引子介紹選擇 其他Java36其他組件 ( Other Component)Authentication Menu Search Engine (like lucene .)AJAXComponent Design S

17、tyle : easy to reuse , change , friendly & full documents Plug and play , I hope so.37Html Design approximates ProgramThink it over, Practice,Practice,Practice! Then got it.For example:Self define sign (e.g. html element name) , component and pattern.Syntax Check. (check specific patterns : like

18、 a button with name submit, or other patterns )Unites database & Sql Design.Input Validation attached Note:invalid HTML element names or IDs will not cause problems in standard HTML, but they will probably cause problems if you attempt to address that element with JavaScript.38本質(zhì)基于Sql的Web開發(fā)一般只有以

19、下幾個要素傳入?yún)?shù)數(shù)據(jù)庫操作結(jié)果集顯示39移植上述思想可以輕松移植到任何的開發(fā)Web的語言上。如果該種語言找不到合適的正則表達(dá)式引擎,可以自己寫一個,只需支持最簡單的標(biāo)準(zhǔn)BNF(Backus-Name Form)即可。這樣就可以解決絕大多數(shù)的sql的解析。40outline實(shí)例構(gòu)想引子介紹選擇其他 Java41Choose java to developNeed Reason ?No.42Really need Answer?Google delphi 40,400,000 Google kylix3,970,000 Google java368,000,000 40,400,000+3,97

20、0,000 / 368,000,000 = 0.12 = 12 / 10043Choose java to develop Regular expression Utility in SDK System independent Full documents and examples Jdbc drivers Have so many features!44Choose a Database Modeling Tool Database independent Support most popular databasesStrongly advise PowerDesigner45Choose a

溫馨提示

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

評論

0/150

提交評論