成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

利用IExtendProvider簡化Entity和UI數(shù)據(jù)交換

開發(fā) 開發(fā)工具
不管是用DataRow用字典還是用Entity都免不了和UI的數(shù)據(jù)交換,比較傳統(tǒng)且經(jīng)典的做法是在UI上添加2個方法:UpdateData和UpdateUI。本文將談?wù)劺肐ExtendProvider簡化Entity和UI數(shù)據(jù)交換

大家知道UpdateData就是將從UI的各個控件的屬性中讀取數(shù)據(jù),在賦值到實體的屬性中;UpdateUI就是反過來,從實體的屬性中讀取數(shù)據(jù),再賦值給UI的各個控件的屬性。

先舉個例子:

  1. public void UpdateUI(TTicketSaleBill ticketSaleBill)  
  2. {  
  3.     ....  
  4. edit_CreatorId.StringValue  = ticketSaleBill.CreatorId;   
  5.     edit_CreateDateTime .DateTime  = ticketSaleBill.CreateDateTime ;   
  6.     edit_ModifierId.StringValue = ticketSaleBill.ModifierId ;   
  7.     edit_ModifyDateTime .DateTime  = ticketSaleBill.ModifyDateTime ;   
  8. }  
  9. public void UpdateData(TTicketSaleBill ticketSaleBill)  
  10. {  
  11. ....      
  12.     if(ticketSaleBill.PersistState == Fx.Common.Data.TPersistState.Added)  
  13.     {  
  14.  ticketSaleBill.CreatorId = this.Context.SecurityCtx.LoginUser.Id ;   
  15.  ticketSaleBill.CreateDateTime = DateTime.Now;   
  16.     }  
  17.     ticketSaleBill.ModifierId = this.Context.SecurityCtx.LoginUser.Id;  
  18.     ticketSaleBill.ModifyDateTime = DateTime.Now;     

如果實體的屬性數(shù)據(jù)比較少,這么寫沒什么問題。但是復(fù)雜的實體動則10幾個屬性,寫起來看了都怕。因此,有了一個叫做代碼生成器的東西,可以自動生成UI的代碼,省掉了一些體力勞動。但是,我們不是僅僅寫了一次就ok,有時還要修改。不小心改了一個名字忘了點重構(gòu)就直接吐血而亡。況且,那么一大堆的代碼在那里也不是一成不變,有時候改了類型還得加上強制轉(zhuǎn)換。有時為了方便,我們還會建立一個字典,將UI控件和實體的屬性對應(yīng)起來。

本人也屬于懶人,之前也搞過用字典映射,但始終覺得不夠人性化,就總琢磨著怎么給這個方法來個升華。畢竟UI都是這個東西再怎么生成,多少還是要用到IDE的可視化功能吧,如果能向設(shè)置屬性那樣,設(shè)置哪個屬性對應(yīng)哪個控件是否會好些?

不要太復(fù)雜,直接輸入實體屬性的名稱、控件屬性的名稱、是否允許空值、是否只讀對于數(shù)據(jù)交換來說就夠了吧。要實現(xiàn)這個必然要擴展原來那些標(biāo)準(zhǔn)控件,向devExpress那樣的第三方控件學(xué)習(xí),似乎沒那么干勁自己寫。于是就以ToolTip為榜樣,用IExtenderProvider來實現(xiàn)所需的功能。

首先定義一個MappingInfo來存儲上面說到的信息。再來就是定義一個對象(我的叫UIMapper),實現(xiàn)IExtenderProvider(這一步?jīng)]什么好說的了,關(guān)鍵是ProvidePropertyAttribute別設(shè)置錯誤,否則啥都擴展不出來)。提供2個方法,UpdateData和UpdateUI并針對DataRow和object的重載。然后就大功告成。在需要數(shù)據(jù)交換的地方之需要簡單調(diào)用UpdateData和UpdateUI即可。比如上面的那小段代碼就可以改為UIMapper1.UpdateData(ticketSaleBill)或這UIMapper1.UpdateUI(ticketSaleBill)。

IExtendProvider使用總結(jié):

<!--[if !supportLists]-->1、對于屬性的賦值。有時候我們可能需要要對UI控件更深一個層次的屬性賦值或取值,比如devExpress那些Edit常用的XXEdit1.Propertys.XXValue為了實現(xiàn)這個功能只好首先自己動手,按“.”分割字符串,然后利用反射逐級獲取對象的實例。而且在嵌套發(fā)生時,并不能確定是Property還是Field,為了應(yīng)對不同的情況BindingFlag最好設(shè)為BindingFlags.Static | BindingFlags.Instance | BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.GetProperty | BindingFlags.GetField,然后利用InvokeMember來執(zhí)行操作。

<!--[if !supportLists]-->2、利用反射+Converter能實現(xiàn)大部分類型的轉(zhuǎn)換,但不能針對所有的類型。目前的做法是增加QueryObjectValue的事件,用于在賦值時由用戶處理特殊的類型轉(zhuǎn)換。

<!--[if !supportLists]-->3、在賦值發(fā)生異常時同樣通過事件通知用戶,由用戶決定處理的方式。在UpdateUI或UpdateData調(diào)用結(jié)束之后,返回Dictionary<object, Exception>即控件和異常的字典。

<!--[if !supportLists]-->4、用IExtenderProvider實質(zhì)上也是用Dictionary來實現(xiàn)擴展,但其在設(shè)計時可以直觀進(jìn)行編輯,在運行時也可以簡單方便地進(jìn)行擴展。

<!--[if !supportLists]-->5、 雖然反射的速度要比直接賦值慢,但是在這種情況下還是可取的。特別是當(dāng)實體的屬性較多或者數(shù)據(jù)庫表字段較多的情況下,可以在設(shè)計時直接設(shè)置,減少了代碼量。

【編輯推薦】

  1. Java連接MySQL中文亂碼處理
  2. 在Java應(yīng)用程序中使用Jfreechart配置
  3. Java虛擬機內(nèi)部構(gòu)成淺析
  4. 淺談Java線程的生命周期
  5. 關(guān)于Java繼承的一些復(fù)習(xí)
責(zé)任編輯:彭凡 來源: cnblogs
相關(guān)推薦

2010-01-06 14:36:04

JSON插件

2009-11-09 17:17:31

WCF元數(shù)據(jù)交換

2010-01-15 10:19:42

數(shù)據(jù)交換技術(shù)

2023-07-19 19:45:12

EDI人工智能

2018-08-31 21:00:39

數(shù)據(jù)交換模型數(shù)據(jù)模型應(yīng)用程序

2019-11-22 08:40:19

ProtobufGo編程語言

2010-03-02 10:50:57

WCF元數(shù)據(jù)交換

2009-01-03 14:54:40

ibmdwXML

2011-08-19 13:45:14

iPhone應(yīng)用iPhone OS數(shù)據(jù)

2012-09-26 09:51:11

電子政務(wù)數(shù)據(jù)交換

2010-02-04 11:15:12

數(shù)據(jù)交換技術(shù)

2012-01-04 00:10:52

ibmdw

2009-01-19 09:28:42

JSONJavaScriptJSON結(jié)構(gòu)

2022-02-21 10:29:26

物聯(lián)網(wǎng)招聘IOT

2009-11-06 10:45:47

WCF服務(wù)元數(shù)據(jù)交換

2010-02-04 11:20:29

網(wǎng)絡(luò)數(shù)據(jù)交換技術(shù)

2010-02-04 11:32:01

數(shù)據(jù)交換技術(shù)

2009-11-06 10:25:34

WCF元數(shù)據(jù)交換

2011-08-25 16:53:42

Lua數(shù)據(jù) 交換

2010-01-08 13:40:26

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 黄色一级特级片 | 国产乱码精品一品二品 | 久久中文字幕一区 | 综合久久一区 | 日韩av在线不卡 | 国产亚洲精品精品国产亚洲综合 | 亚洲一区国产精品 | 国产一区在线视频 | 91精品久久久久久久久中文字幕 | 国产欧美日韩在线观看 | 亚洲视频免费在线观看 | 欧美成人精品一区二区男人看 | 午夜影院在线观看 | 亚洲精品国产综合区久久久久久久 | a级毛片国产| 国产久| 色精品| 九九九视频 | 日本三级电影免费 | 天天久久 | 日韩中文字幕在线视频 | 九九热这里 | 亚洲高清免费观看 | 中文字幕免费中文 | 97av视频| 日韩三区在线观看 | 在线视频亚洲 | 精品少妇一区二区三区在线播放 | 九九九色| 国产成人在线播放 | 一区二区三区四区五区在线视频 | 污书屋| 欧美中文 | 久久久久久久综合 | 热99| 国产视频2021 | 国产欧美综合在线 | 青青久久| 最近免费日本视频在线 | 国产高清在线观看 | 在线永久看片免费的视频 |