惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 【当耐特】
Help Net Security
Help Net Security
P
Proofpoint News Feed
J
Java Code Geeks
爱范儿
爱范儿
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Full Disclosure
Google DeepMind News
Google DeepMind News
H
Help Net Security
G
Google Developers Blog
Jina AI
Jina AI
Vercel News
Vercel News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
Lohrmann on Cybersecurity
S
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
Security Archives - TechRepublic
Security Archives - TechRepublic
阮一峰的网络日志
阮一峰的网络日志
N
News and Events Feed by Topic
GbyAI
GbyAI
B
Blog
O
OpenAI News
博客园_首页
Cisco Talos Blog
Cisco Talos Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Hacker News: Ask HN
Hacker News: Ask HN
TaoSecurity Blog
TaoSecurity Blog
腾讯CDC
MongoDB | Blog
MongoDB | Blog
M
MIT News - Artificial intelligence
C
Cybersecurity and Infrastructure Security Agency CISA
Cyberwarzone
Cyberwarzone
Webroot Blog
Webroot Blog
Simon Willison's Weblog
Simon Willison's Weblog
Y
Y Combinator Blog
C
Cisco Blogs
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
AI
AI
W
WeLiveSecurity
aimingoo的专栏
aimingoo的专栏
The Register - Security
The Register - Security
Project Zero
Project Zero
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
Netflix TechBlog - Medium
Blog — PlanetScale
Blog — PlanetScale

博客园 - yo

Silverlight 缺陷 - yo - 博客园 SilverLight Controls WF 4.0 中 Persistence 异常 - yo SilverLight框架初探-View - yo - 博客园 SilverLight框架初探-RiaService SilverLight框架初探-ViewModel 与客户“调情” AG_E_PARSER_BAD_PROPERTY_VALUE 定义属于自己的Routing 数据契约的序列化 WCF客户端配置问题 关闭EXCEL进程 母版页中控件ID获取 - yo - 博客园 Reportviewer - Error: ASP.NET session has expired - yo SQL CLR C# DLL动态调用 Sharepoint List faults - yo 出错页面webpar的t删除 quickpart
SilverLight框架初探
yo · 2010-03-13 · via 博客园 - yo

SilverLight技术的出现也已经有很长一段时间了,但是却感觉还没有比较统一的框架模式(个人的技术水平有限)。

在研究它的架构模式过程中,刚开始是试想采用MVC模式来搭建系统架构,利用SilverLight与WebForm相结合的形式,但是框架做好了之后感觉不太好使,WebForm与SilverLight间的页面展现总是感觉不能跟其相应的页面逻辑代码实现分离;相反,Controller对于View的控制还增加了相应的工作量,所以放弃采用MVC模式。

后来尝试采用MVP模式,虽然能够实现页面的逻辑分离,但是Presenter却感觉显的比较臃肿,需要处理的关系较多,压力较大,所以只能继续寻找合适的框架模式。

终于找到了一种相对合适的框架模式:MVVM,即Model-View-ViewModel。这种模式跟MVP模式相似,只是对它进行了相应改进。View这里跟MVP中的View是一样的,负责页面展现;ViewModel是对应于View的页面模型,包含与View想对应的属性与行为;Model可以分为业务模型与实体模型。通过这种方式,我们可以实现页面与逻辑的分析,只有我们的Viewmodel不变,那么View既可以用WPF,也可以用SilverLight等来展现。如下图:

 

随着.net 4.0的推出及SilverLight技术与WCF的不断完善,也使我们可以更灵活的搭建相应框架。如上图,在Service Layer,我采用了Domain Service来处理Client与Service间的通信,Domain service也是一种WCF通信方式,只不过是对它进行了封装,使我们不用去关心具体的通信问题;Domain Model采用了Ado.net Entity Data来处理数据连接。下面是我做的一个框架模型:

这里分为Client与Server两部分:Client主要是负责页面展现及相应的页面模型;Server则负责业务逻辑处理

1.Client

Mvvm.Client:View,这里是我们要实现的UI展现,可以用SilverLight、WPF等;

Mvvm.Client.ViewModel: ViewModel,包含与View相对应的属性与行为;

2.Server

Mvvm.Server.Data: Entity Model,实体模型,我们可以添加一个Ado.net Entity Data Model来实现与数据库的通信;

Mvvm.Server.DataService: Data Service,数据服务,通过它进行相对应的数据操作;

Mvvm.Server.RiaService: Ria Service, 业务服务,通过它调用DataService的数据服务来操作Entity Model,并且实现与Client端ViewModel的通信;我们可以添加一个Domain Service来实现。同时,还有一个DtoModels文件夹,这里放置的是与View属性相对应的模型。Ria Service通过Data Service来操作Entity model,此时返回的是与数据库相对应的实体模型,所以需要转换为与View相对应的模型,我们将这些类放在DtoModels文件夹下,相互间的转换可以采用AutoMapper或Linq来实现。

Mvvm.Server.Web: web应用程序。

这就是我对于MVVM这种模式的理解,希望有兴趣的朋友一起探讨、学习。

参考资料:

http://forum.cornerstone.se/blogs/cornerstones_utvecklarblogg/archive/2009/11/30/silverlight-4-mvvm-with-commanding-and-wcf-ria-services.aspx