掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流
看到這標(biāo)題的朋友可能搞不懂到底在搞什么,不過(guò)不要緊有興趣的朋友可以先了解一下IVsSingleFileGenerator到底是用來(lái)做什么用的《實(shí)現(xiàn)自定義的VsSingleFileGenerator 》;在vs.net里提供一個(gè)IVsSingleFileGenerator接口可以方便地為項(xiàng)目文件生成附屬文件,如剛才那文章提到的根據(jù)XML文件自動(dòng)生成一個(gè)附屬的C#代碼文件;當(dāng)然這個(gè)IVsSingleFileGenerator并不只是針對(duì)XML文件,可以是隨便為任何項(xiàng)目文件生成附屬文件你只要在文件屬性中設(shè)置相關(guān)Custom Tools就可以了.

創(chuàng)新互聯(lián)是專(zhuān)業(yè)的潘集網(wǎng)站建設(shè)公司,潘集接單;提供成都做網(wǎng)站、網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行潘集網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
為什么在這里我提出在代碼文件的基礎(chǔ)上再生相關(guān)的代碼附屬文件呢,為什么不直接在原代碼文件寫(xiě)完整就可以了;原因很簡(jiǎn)單因?yàn)槭謱?xiě)代碼是沒(méi)有電腦來(lái)得快,最主要一個(gè)原因是基于XML的IVsSingleFileGenerator在某方面不好所以才采用基于代碼文件的方式作為代碼描述模板.用XML描述在現(xiàn)情況碰到的問(wèn)題,在我的數(shù)據(jù)持久層里是采用XML結(jié)合IVsSingleFileGenerator來(lái)生成相關(guān)實(shí)體類(lèi)的.
內(nèi)容大概如下:
|
VsSingleFileGenerator有個(gè)不好的地方就是當(dāng)主文件修改后會(huì)重新生成附屬文件,這樣就導(dǎo)致你無(wú)法修改代碼文件.如果想為某些屬性成員添加Attribute來(lái)處理一些功能基本是沒(méi)辦法的.
如添加成員數(shù)據(jù)驗(yàn)證:
[NotNull] |
即使能解決VsSingleFileGenerator生成附屬文件沖突問(wèn)題;但也要面對(duì)另一個(gè)問(wèn)題,就如何擴(kuò)展XML來(lái)處理這些擴(kuò)展呢,添加X(jué)MLSchema擴(kuò)展描述規(guī)則,重寫(xiě)VsSingleFileGenerator代碼生成部份;這樣下來(lái)沒(méi)多久我估計(jì)自己會(huì)瘋了....
實(shí)際情況添加不同Attribute來(lái)擴(kuò)展輔助功能是很常見(jiàn)的事情,就一個(gè)驗(yàn)證來(lái)說(shuō)根據(jù)實(shí)際情況就有很多情況,類(lèi)構(gòu)造方式也不一樣.就針對(duì)這些情況來(lái)擴(kuò)展XMLSchema和重寫(xiě)VsSingleFileGenerator帶來(lái)的工作量就不用說(shuō)了,還有一個(gè)問(wèn)題就是XML并不能提供類(lèi)型編譯的保證這樣對(duì)XML的質(zhì)量是很難保證.
經(jīng)過(guò)了一段時(shí)間的思考發(fā)現(xiàn)為什么不直接用代碼作為原模板呢,這樣就能得到IDE的支持,強(qiáng)在編譯器的支持下保證類(lèi)型輸入規(guī)則的有效性.以下是本人實(shí)現(xiàn)的簡(jiǎn)單生成模型:
[Table] |
生成的相關(guān)代碼
[Table] set{mUserName=value;EntityState.FieldChange("UserName");} }set{mBirthDate=value;EntityState.FieldChange("BirthDate");} } set{mRegion=value;EntityState.FieldChange("Region");} }set{mRemark=value;EntityState.FieldChange("Remark");} } |
這樣的話(huà)即使我們?nèi)绾谓o屬性添加Attribute都不會(huì)帶來(lái)代碼上的修改,VsSingleFileGenerator只對(duì)屬性作一個(gè)模板生成其他內(nèi)容搬過(guò)來(lái)就可以了:)
WPS的排版真是沒(méi)有WORD的好...估計(jì)我不會(huì)用.

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流