中国@代码生成技术@国产
第一節(jié):
大家好:
我們今天講的還是代碼生成,我們知道的有codedom是微軟生成自己框架代碼的一個類,可以說是自己生成
自己了.不過我說的生成是根據(jù)一定的規(guī)則來生成一定的代碼.
? 我們的DotNetAuto已經(jīng)是升到了b/s框架了,可是還是不完善的,現(xiàn)在最主要的問題是:可空,model層定義
,dal的定義,表現(xiàn)層的代碼實現(xiàn).我們今天晚上來探討一下.
?? 可空,在數(shù)據(jù)庫中,因為有一些值不是所必須要的,按照這一定的原則,給定了一些空值,但是這些空值在
我們程序員的開發(fā)過程中,出現(xiàn)了許多不必要的麻煩,首先,在從數(shù)據(jù)庫傳值給model的時候,
當值類型為string的時候:? DBNULL可以用null表示, 但是在.net 2.0以前int ,datetime的表示就是比較
的麻煩了. 我估計,以前人們?yōu)榱吮硎具@些空值,是這樣做的-1表示int的空值,1900-1-1表示datetime的空
值, 當然這在一定的條件下是可以的,但是總體來說卻是不怎么明朗的.在.net2.0后 system.nullable<>
泛型得到了較好的使用 System.Nullable<int> 中是可以用null表示數(shù)據(jù)庫可中的DBNULL的
,system.nullable<datetime>也是一樣的...可以用null表示空值,
? 從model到數(shù)據(jù)庫的過程中,null也是不能直接用為dbnull的,所以我們采用的方法 是先判斷是否空再傳
值,
system.nullable<int> icardid;
if(icard.id.hasvalue)
{
?command.paramater["@cardid"].value=icard.value;
}
else
{
?command.paramater["@cardid"].value=DBNULL.VALUE
}
____________________________________________________
int icard;
command.paramater[i].value=icard
_____________________________________________________
反過來,就是要判斷所讀的字段來構(gòu)造 這個system.nullable<int>的
測試:
?datareader getint32(i)可不可以讀空值呀 如果可以直接生成null的值
??? 不可以的,不過可以先用isdbnull(i)來檢測一下:
int? i=dr.isdbnull(i)?dr.getint32(i):null;
讓我們用datatable datarow則為
dr[0] != DBNULL?convert.toint32(dr[i]): null;
_____________________________________________________
icard = sdr.getint32(i);
icard = convert.toint32(dr[i]);
_____________________________________________________
這就是model-數(shù)據(jù)庫 技術(shù)的全部
第二節(jié) 界面的深入:
?? 第二部分是model與前臺界面的關(guān)聯(lián):
??? model->前臺:?
????? 當string != null \? int? .hasvalue \ datetime? .hasvalue?
??????????? textbox.text = string; textbox.text int.tostring(); |datetime.toshorttime();
先判斷model不為空 再進行綁定??
dropdownlist -
先判斷model不為空 (判斷其中的值不為空-即為有可選項)?? 再進行綁定
?
*******************************************************************************************?
?
?password,password text,textarea, select-dropdownlisp,listbox, input-
buton,hidden,checkbox (2, 3, 4)radiobutton
=========================================================================================
前臺-->model
textbox -- password --? strName = txtName.Text ; intCard = int.parse(txtCard.text);
dropdownlist?? strName = dropdownlist.selectvalue ;intCard = int.parse
(dropdownlist.selectvalue);
這樣的意思是可空的string -varchar會被賦與 空字符值 int 保留空值dbnull
radiobutton checkbox 是這樣的了 呵呵
這一節(jié)就到這里吧 ,大家自己回去好好想一想.
=========================================================================================
??
大家好 這一節(jié)分析 , ①界面的生成-②驗證控件- *javascript?*綁定數(shù)據(jù)庫的默認值
? 我們最常用的有
?
?
? <asp:textbox{text種類} id="txtname"{名稱} runat="server" MaxLenth="20"{長度} readonly=true{主鍵} Width=45{}
? value="" textMode="textbox"{類型}></asp:textbox>
?
?? <lxf:inputdate id="txtbegin" runat="server" width=34></lxf:inputdate>
?? <asp:dropdownlist id="ddlcatage" runat="server" >
?<listitme select=true> assd</listitme>
?? </asp:dropdownlist>
?? <asp:label id="label1" runat="server"></asp;label>
?? <asp:button id="button1" />
?我也沒有想法了.....
?
?
?第三節(jié): 混合類 model+idal的優(yōu)化+存儲過程
在我們看到的這些類中,有一些是已經(jīng)用過的BASE類 , 另外一些是用的自定義的連接數(shù)據(jù)庫的,連接方法, 這些雖然已經(jīng)用類實現(xiàn) ,但是缺乏優(yōu)化,
字段 的前綴: 怎么說呢 , 在匈牙利命名法中 前綴是很重要的..但在.net的時代里,前綴i,n,str不是太重要的手段表示字段了,我想這個可以優(yōu)化一下的.
清晰的簡單的架構(gòu)是比較易實現(xiàn)的, 所以這一版本中 可以實現(xiàn) ,偽存儲過程的字符串, (petshop4)中的表達方式.
paramater可以存放:ipara... upara .. 用sqldatareader返回insert的插入后的值,update 錯誤值
模塊化的設計
insert - update -deletebypk - deletebyids- selectbypk-selectall-selectbycatagory-selectallbywhere-selectbypage(X,Y)-
getcount();
**************************
getcount_bywhere(string);
selectbywhere(string,X,Y)
***************************
administrator
public bool IsExist();
public bool ChangePwd(old,new);
public bool Login(name,password);
public
user
***************************
假刪 -bDelete? &&&&&&&&&&&&&&&&&&&&&?? ISDELETED = 0
NEWS
增加 public int addcount();???? &&&&&&&&&&&&&&&&&&&&&?? Count = Count+1
得到外鍵: public 從外鍵中到得集合 &&&&&&&&&&&&&&&&&&&&& ID &&&&&&&&&&&&&&&&&&&&& Name
[一對多]
?
model 從有外鍵的列中得到類...
生成器中的model有存儲過程對生成器的需求分析:
model要求全部的列作為生成的對象,并且包括含外鍵對應的表 (目前為必須設定)
存儲過程對生成器的要求:除了執(zhí)行model的u i d,外,另外的生成可以自行支配生成器的列選擇器.
?
視圖---- 外連接 --- 生成
這一部分的生成 , 有待與用用戶控件的方式生成:
技術(shù)點:用戶控件,事件,DOM
(今天是2006-11-20 23:20:43 手冷呀)
代碼有向生成方面技術(shù):
? 雖然從直觀上可以用最簡單,最笨的方式生成所希望的代碼,但這個過程絕對不是我們所期待的... 而且我們
會絕不會在只生成這方面停滯, 必然會向重構(gòu)\代碼分析\這一系列的方向展開....
模型:
petshop三層建模, 從發(fā)展的角度去看,單說建模的技術(shù)就是一種技術(shù)性很強的東東.
代碼:
? 統(tǒng)一命名規(guī)則..? 就是我們自己所采用的風格..
?
從模型??? -? >???? 代碼
? dom 可以實現(xiàn) 建模技術(shù):? ---writer類--工廠模式
? 另類的生成 xml+xslt? 總體來說是一種基于高層上的建模技術(shù),效率不可知,但對于底層的掌握不好
通過簡單命令行實現(xiàn)??? 解釋器模式---- 設計模式
從代碼? -?? >??? 模型?? ->代碼? 這也可以看成是一種重構(gòu)的過程
? 可以用編譯器實現(xiàn) -- 編譯原理? --技術(shù)正則表達式
**前天分析的編程高手, 一方面是自己獨到的見解,別人可能要花上很長的一短時間才能看的明白
?第二方面,是能力的一個方面,就是粒度比較的大,這里并不是說他的整體上是雜亂無章的,而是說
他的結(jié)構(gòu)是相當?shù)挠行?另一方面是指他的代碼段從量上說是大的,從含蓋的內(nèi)容上可以是一個不是
太明晰的結(jié)構(gòu)性的東西,但是卻十分有效.(先不知道自己的想法是不是正確 , 我感覺是未來人類的
一種思維方式,7->14之類的東東.. 單位的復雜粒度變大,細節(jié)上的東東,用成型算法)
在一定程度上的定型: 世界處于一種深度的遞歸狀態(tài),自己的思想也是這樣的,遞歸的過程,是量變
引起質(zhì)變的過程, 所以說要把握一個度,一個從量變到質(zhì)變的度,不可以太快的進行下一個的遞歸,
就像是人們必須生產(chǎn)高級汽車后才生產(chǎn)離心飛行器的初版, 我是一個遞歸很快的人...所以說就忘
記了細化一些東東,對原有東西的充分吸收.? 放慢遞歸速度,加快積累速度.
??
2006-11-21 22:38:10
定死里面的東東 里面的const變量
rdr : sqldatareader
command.paramter["@XX"]里面的東東,都是column的原形
param
params
//感覺在程序里改一個方法名 getIpara_order 很是容易,, 但現(xiàn)生成是有麻煩的,因為它需要一個
//規(guī)則支持,, 而現(xiàn)在沒有的原因造成的..
GetIParameters()? : 獲取參數(shù)
SQL_INSERT:插入的sql
SqlIParameter
//=>:????????? 生成的模型
strSQL
sda:sqldataadpter
私有字段:db.column.tolower
屬性:大寫第一個db.column
頁面定義的類: obj
類的命名:____________________
參數(shù)主鍵的定義______
TextBox前綴:txt
DropDownList:ddl
星期三 2006-11-22 23:51:55
今天生成了一部代碼生成簡版的(單表).
已經(jīng)完成的功能有,類主體的生成,insert update delete select all,select by pk,
基本界面控件,界面與類的互交等三大功能
... 功能還有待完善 需要大量的測試,
就是要做大量的網(wǎng)頁后才可以進一步升級, 除了目前測試是最主要的矛盾外,
系統(tǒng)還有不少的缺陷: 控件類:日期,多選,單選的功能?? 在測試中完善.............
系統(tǒng)方法實現(xiàn)太少,? 在測試中完善.............
系統(tǒng)不支持多表,視圖,存儲過程,?? 在下一版本中完善.............
星期五 2006-11-24 23:28:07
今天測試:
buglist :
Datatime ->DataTime?? 馬虎 -------庫的原因
MaxLength 記憶不準確MaxLength
沒有control 腦力不足
m_content??? .???? ; ----- 不細心? --欠考慮
obj.M_datetime.Value.ToShortDateString ..欠考慮
this.m_id = rdr.GetInt32(0);? 重復? 沒考慮..
?'AND' 附近有語法錯誤。? 程序有問題 bug --考慮-關(guān)聯(lián) - , 的長度是,但是 and 是5
命名空間 考慮
通用類
命名空間 :可有 可無? 可以通過配置參數(shù)確定 ------有待實現(xiàn) >>>>>> 類名
命名法則:從頁面取值,, 不自動生成...
通用方法 - 私有字段,共有屬性, 通用類生成表genTable 提議靜態(tài)?
約定? 命名空間==string.Empty 就不生成.....
下一階段的目標是:
1.改造select all的屬性, 綁定到泛型上? ,列分析清楚
2. 嘗試構(gòu)造多表model ---
3. 進行數(shù)據(jù)庫的已有存儲過程的掉用 實現(xiàn)方法可配制化,同時可以動態(tài)增加方法.先不要
考慮:反序列等保持狀態(tài)的問題.
* 自定義控件的數(shù)據(jù)庫操作 .. 難點.(后期擴展)2006-11-25 2:49:47
over
2006-11-25 22:41:32
發(fā)現(xiàn):用datareader 的時候 return 值 與 output值不能同時返回回來......
2006-11-26 11:26:33
睡的真舒服..
要考慮的東西,
① petshop的order是如何插入item的
② 生成的數(shù)據(jù)集是怎么處理 方法類型的 select insert delete等.
一句話 ,第一步總是用能行的辦法實現(xiàn)....
其實在第幾步之前 我想應該是前多實現(xiàn)幾種死的常用方法,實現(xiàn)可配置....再進行第二步的實現(xiàn)
看了一會petshop說實話.和他其實是有一定的差別 從建模方式上差距就很大.
2006-11-28 22:17:47
過了兩天 ... 開始測試了 ..
...少 public ....
測了不少的BUG呀.. ... 嗚嗚
想著快卻總是出問題嘍.
..從整體的角度講, 自動機有必要生成一些框架結(jié)構(gòu)性的東西,比如App_Code文件夾等等,這就要求有項
目的考慮方式了.
現(xiàn)在有兩個問題需要考慮 ①就是要建立整體性的方案,如何組織文件管理,是否已經(jīng)有必要開始建立一個
新的項目開進行代碼的生成.如果是那樣的話 ,又應該如何去管理這些文件?
②就一些細節(jié)而言,如adminM.aspx是否有必要進行模式化的生成,生成的話 需要考慮模型的生成原子粒度
與采用何用方式生成,就目前而言,小粒度,復雜的模塊,采用逐語句生成,但是對于網(wǎng)頁頁面卻不一定的
試用.采用粒度較大一點的替換,將會提升一定的效率,.....呵呵....有點道理吧......粒度更大的時候
就采用塊塊集成的東東(我都不知道是什么了).
?? 這樣的話,就涉及到組織程序框架的問題了,,我打算采用以前的那種方式,總體來說是十分有效的:建立
模塊庫,是不能隨便改動的..里面有我自己定義的框架模型,程序是基于框架模型再跑動的.....我想就是一個不錯的主意,,? 有點Xslt的味道了,當然可以用他的框架生成,只是自己的東西隨意性比較的大,最好是先按自己的思想一步步發(fā)展到和xslt同等程度的思考...
??這時的我回想起了我的codeback程序2005年的時候吧 , 就是采用的這種思想去做的,當時做的還可以,只是到后來考慮到了各種數(shù)據(jù)的表達形式的時候,就有點不想弄了感覺了..(2006-11-29 1:9:55)
呵呵,真是有所期待呀, 我想著過不了多久,我的自動機將再進一個新的版本,這個版本就叫V1.1吧,聽起來有點熟悉的感覺的,今天就到這里吧。
任務:
①完善生成的后臺頁面代碼
②開始進行構(gòu)建模板庫
③開始進行項目組織管理(這個到后期的時候 整個系統(tǒng)將改用,Add-in技術(shù)實現(xiàn)以技術(shù)更多的功能)
2006-11-29 1:16:07
[放慢遞歸速度,加快積累速度]
轉(zhuǎn)載于:https://www.cnblogs.com/lxf120/archive/2006/11/29/576298.html
總結(jié)
以上是生活随笔為你收集整理的中国@代码生成技术@国产的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大学生求职七项注意
- 下一篇: Asp.NET 的几个高级技巧