在当初搭建项目架构时.考虑到把数据访问和UI分离利用Silverlight RIA Services Class Library类库来搭建底层数据访问. 同时页面显示数据格式较多. 有一部分采用绑定方式.所以用到MVVM[Module-View-ViewModule]框架比较容易,这样既是把MVVM框架和Ria Service数据访问混合到一块.项目结构:
说明项目结构:
HROA_Services:Silverlight RIA Services Class Library类库 [Ria数据访问]
HROA_Controls:Silverlight项目中常用自定义控件.
HROA_Entitys:MVVM中Module层
HROA_UI:MVVM中View层
HROA_ViewModules:MVVM中ViewModule层.
HROA_UI.Web:sliverlight UI承载.
既然实际需求中UI[MVVM中View]层数据显示样式偏多.UI应该可定制的.MVVM框架正是从WPF的MVP[Model-View-Presenter]模式演变而来.数据绑定和ViewModule相结合突出简单实用 容易操作. 同时把UI与业务逻辑进行分离出来. ViewModule中保存着UI的特有属性和调用接口.并由一个ViewModule视图同属性进行绑定. 形成松散的耦合. 个人直观理解:
其实MVVM基于事件绑定机制,在View层中只要完成绑定即可,View会自动更新Model,Model再通知Control,这样就可大量减少View 层中的Control代码. 回想一个WebForm开发View层中需要编写大量控制页面代码.移植和可重用性很低,导致做了很多重复性工作,MVVM恰恰在一定程度上简化这样混乱结构.
在项目走到三分之一时.碰到系统核心业务操作. DomainService基于原始四个增删改查数据操作方法已经是力不从心. 其实在项目刚开始时就一直想分析一下DomainService中多种数据操作.前门一章WCF Ria Service 理解制图版本【待续】中简单写了类库结构.今天具体分析DomainService中细节.
A:创建DomainService.
通过创建向导创建时.Enable editing默认不选中.直接创建DomainService则只自动生成1个查询方法.选中后则自动添加增删改查4个方法. 分析这4个自动生成方法:
各个方法返回值定义方式如上.DomainService不仅可以生成如上常用4个方法 也支持用户自定义方法.定义格式如下:
当然在DomainService 也支持Reslove和Invoke方法.定义语法如下:
在技术群里曾有人多次跟我提起 为什么我自定义一个方法返回值为一个Boolean值. 在调用时也用Boolean接受 总是报异常?.例如DomainService自定义:
2 {
3 return " chenkai " .Equals( chenkaige ); // 设定返回结果为False
4 }
UI正确调用方式:
string getresult getresinvoke.Value.ToString();
接受类型应该为InvokeOperation<bool>,在DomainServer中自定义方法islogin并没有带标识属性UseCustomerMethod.但你可以显性的指定它为用户自定义方法.前面提到增删改查4个方法标识 有个在命名上有个特点:
当在4个方法中带了各自标识例如 更新方法前带了[Update]. 既是标识该方法为更新方法.同时该方法命名可以自定义 .如下:
void UpdateUserBaseInfor(Sl_Users getuser)
{
this .ObjectContext.Sl_Users.AttachAsModified(currentSl_Users, .ChangeSet.Getoriginal(currentSl_Users));
5 }