Mediar.Framework—业务的实现2(UI 与对象实体的通信)

   UI 与对象实体的通信

1 前面已经谈到UI通过对象属性的名称从对象中获取值,UI控件的值是在changed 事件后赋给对象。因为对象实体是已知的,UI控件的值对应的是对象的属性,所以根据对象中属性名称获取值是比较容易的。当然设置对象与获取对象的值,都在对象实体中有相应的方法。这个方法比较通用,现在有不少架构都这么写.下面两个方法都使用了反射对property进行读写.

 



2
新建,保存,刷新,取消

     在主窗口中应该可以看到 新建,保存,刷新,取消这几个BUTTONMediar.framework 把所有的对象看归纳成只有这几个操作,通过这几个操作来控制对象。这几个button的事件调用活动窗口中的相应方法,最后调用对应的对象中相关方法.

 

主窗体中   




 
所有的对象UI都继承一个基础窗体,下面的方法作为共用方法写在这个基础窗体中。mRootBizObject 为窗体中对应的对象实体。这里就讲的比较的粗枝大叶了,不然决对不是一个短短的文章可以写清楚的。

      

新建需要通过工厂中的 CreateBizObject方法,因为每个对象都需要包括一个工厂,就需要在新建的时候构造传入。对象新建可以在InitializeValues方法设对象default 值。

 

 

 

 

取消就把Original值覆盖到当前值.

    

 public void CancelEdit()

         
{

              CancelEditChildren();

              
if ((mIsDirty)) 

              
{

                   RestoreLastPersistedValues();

                   
this.OnBizObjectUpdatedEvent(new BizObjectUpdatedEventArgs(BizObjectUpdatedType.Changed));

              }


         }


 
protected override void RestoreLastPersistedValues()

        
{

            mDisplayID[AttributeValueVersion.Current] 
= mDisplayID[AttributeValueVersion.Original];

            mFirstName[AttributeValueVersion.Current] 
= mFirstName[AttributeValueVersion.Original];

            mLastName[AttributeValueVersion.Current] 
= mLastName[AttributeValueVersion.Original];

            mDescription[AttributeValueVersion.Current] 
= mDescription[AttributeValueVersion.Original];

            mCompanyName[AttributeValueVersion.Current] 
= mCompanyName[AttributeValueVersion.Original];

            mContactType[AttributeValueVersion.Current].UniqueID 
= mContactType[AttributeValueVersion.Original].UniqueID;

          
// mAddress[AttributeValueVersion.Current].UniqueID = mAddress[AttributeValueVersion.Original].UniqueID;

            mEmailAddress[AttributeValueVersion.Current] 
= mEmailAddress[AttributeValueVersion.Original];

            mWebSiteURL[AttributeValueVersion.Current] 
= mWebSiteURL[AttributeValueVersion.Original];

            mNotes[AttributeValueVersion.Current] 
= mNotes[AttributeValueVersion.Original];

 

            
base.RestoreLastPersistedValues();

        }


 

保存就把数据更新到数据库,然后再刷新当前的实体。也许有人要问:刚才保存的为什么要刷新呀?刷新目是把RecordVersion取出来,RecordVersiontimestamp类型,每更新一次数据库,该字段就是有一个新值。在更新数据库之前会和数据库中的值比较,这是防止两个人在同时修改一个对象时引发冲突。

    

 

Factory类中,就会调用数据层的更新方法。

  

 public void Update(ref DataSet ds, string AssemblyName)

        
{

            DataAccess da;

            da 
= GetDataAccess(AssemblyName);

            ds
= da.Update(ds,true);

        }

刷新就是从数据库重取数据,然后更新对象属性的值。

 

 

 

posted @ 2006-09-27 09:21  瑞德船长  阅读(1316)  评论(0编辑  收藏  举报