Silverlight 点点滴滴

p>SL, RIA,即不仅仅是普通的层三架构的web系统。SL前台呈现,调用后端查询数据库传递,更多的东西可在前端,如浏览器实现更多的动作,xap包都下载到本地了,用户会默认安装SilverLight runtime,近似CRL的东西。

一个基于Silverlight的model至少由3个部分构成:

前段,一个SilverLight工程,生成xap包,

通信,一个WCF工程,生成dll

后端,一个class Library,生成dll

为了启动1个这样的model,你需要有一个web host(宿主程序),即asp.net web应用程序,他会生成对应的一个silverlight的defaul.asps文件, 部署在IIS上后,用户点击Http://192.168.1.1/SL_demo则打开的这个defaul.asps,故而第一次,用户通过IE浏览器,把你的SilverLight xap下载本地,启动了SL页面。

对于企业应用级别的SL借鉴方案,一般有10几个开发人员在做model,怎么把这些model组织为web site的菜单项,可以实现不同的region区域:固定展示log的region,展示当前用户信息的region,展示导航树的region,展示主工作区间的region。

需要采用插件架构,如Prism简介, 详细的可看这一系列blog:

*****************

  • MVVM:binding everything 一种新的思维,数据和UI交互的新思维。 MVVM
  • 页面代码分离:asp.net思路。 xaml+xaml.cs文件组成前台用户看到的内容。 Xaml里面写页面元素,如Grid、textBox, cs里面写具体逻辑代码(实际上,如果完全通过上面的MVVM实现逻辑,则这个cs文件里面写的代码少得很)
  •       其项目编译后对应为xap文件(zip压缩文件,方便用户网络下载)

  • 前端,只能引用添加Silverlight项目、WCF引用,必须引用SilverLight类库(当添加非SL的,则Visual Stuido会报错提示)。
  • UI组件采用的是成熟的Telerik,主要用了其GridView、TreeView、Chart、RickTextBox、RadButton等。
  • 后端,普通的class Library项目即可,同以往的.net应用程序没有任何区别。
  •   WCF: 前段和后端通信的桥梁,写一个专门的WCF工程(位于后端),可直接调用后端的Class Library。 前段和后端通信,就靠这个了:前段传递数据给后端, 后端返回数据给前段。

  • 前后台怎么复用代码方法:
  •       通过添加WCF引用,会自动生成Entity的代码,在reference.cs文件里面

    通过链接类、条件编译方式,可以实现前、后端代码级别复用,这种办法,效率非常高。

  • 几个现金陷阱:

陷阱一:泛型传递

泛型是在编译器确定了数据类型,而WCF仅仅是XML封装的接口,如果发布了一个T的接口,那么使用者使用,谁编译WCF接口? 怎么编译WCF? 所以,不行的。

陷阱二:object传递: 基类、子类传递。参见上面说的基本类型,如果一个数据的calss,没有添加标签封装,WCF会报错的。

陷阱三:DataTable传递

典型的ADO.net思想,还停留在windows桌面应用系统领域, JSON、byte[]才是WCF\SL的王道。

主要因为,你引用DataTable的System.Data类库,在前段不可见(前段相对后端裁剪了很多,更轻巧)。 如果你实在要这么做,推荐一个开源的SL.DataTalbe给你,需要源码的发邮件给我。

如果数据流大,可通过byte[]方式通信,在后端序列化为byte[],WCF传递给前段,(上篇写过,前段可通过链接类、条件编译复用后端代码:类变量、类方法), 前段可反序列化为实体类。

在多年单机版思路,几年前转换为Client-Server开发思路模式。 最近的2年往Brower-Server开发模式转变,同时也兼顾Windows Phone移动端思路吧。

岁月在挑灯夜战中走过:亲历的软件框架

软件框架(Software framework),也称为软件架构(software architecture),是建立大型、规范软件研发的基本准则, “无规矩不成方圆”。 如,对超过10人的开发团队,超过12个月构建周期的软件产品的,是100%需要的。

在我所亲历的工作中,共有3个软件框架。 注意:软件框架和软件产品是2个概念,一个成熟的软件框架可为公司搭建好维持3年以上的基础,可在其上组合、构建不同市场的软件产品,可支撑上亿的项目簇、产品簇的。 这些框架各自实现方法不同,各有特色,但是有几个是所谓大型软件框架必备的:

  • 支持重用性
  • 支持插件组件 (依赖注入IOC)
  • 支持多人同时协同开发多个模块
  • 支持模块间通信(消息发送)
  • 可选的数据库切换
  • 可选的支持不同组件销售license控制
  • 可选的支持序列化
  • 可选的菜单配置
  • 可选的UI组件风格
  • 可选的日志记录

1. 软件架构一: 单机版、 三层架构:.net反射、观察者模式

关键词语:消息,组件,注册消息,业务视图类,数据采集、解码器、设计模式

应用周期:2005~2009年

亲历总结:至少4个版本的产品,单项目市场约50万人民币。 回头看,单机版的产品是相对较好设计的,层次也不多,方便新人较好的理解。由于未采用业内现成的框架,故有机会参与架构规则制定,故对学习的设计模式的有机会实战应用。

2. 软件架构二:RDBMS、 n层架构:Sharp Develop、IBatis、log4net 、开源框架

关键词语: Add-In插件、IOC依赖注入、OR mapping、异地团队协同开发、SQL

应用周期:2009~2012年

亲历总结:至少20个版本的产品,单项目市场约500万人民币。SD框架,是业内成熟的一个.net开源集成开发环境,其Add In尤为被人推崇,也较成熟。同时,由于多数据库的介入,如Sybase、Oracle同时要支持,故结合IBatis构建。 方便远程问题反馈,对log4net进行了移植。相对第一个土生土长的软件架构,参与构建的要少一些,更多的精力在做Add In业务模块。后来,对冗余的分层改造,如把Add in, Domain Model, DTO, Persistence, Services, Interfaces, UI这7层,在部分组件修改为: Add in, Services, Interfaces, UI4层,减少了3层。减少了系统构建的冗余度,利于新人介入,利于减少重复浪费。

3. 软件架构三: web、RIA 、SilverlightPrism框架(Unity)IBatis、末代技术

关键词语: XAP、XAML、Entity、WCF、DAO、bootstrapper、MVVM、JSON

应用周期:2012~2013年

亲历总结:至少10个版本的产品,单项目市场约500万人民币。作为微软最忠实的”信徒”,是业内极少采用SilverLight技术作大型系统案例的,更悲催的是在2012.12月,Silverlight被微软抛弃了。第一次有机会从事web的开发:通过快速学习这种末代web RIA技术和架构,搭建了目前已经商用的系统。业务方面是基于上面《软件架构二》的,换了一种新的技术而已。不过,对于习惯桌面应用系统开发者来说,还是有很大挑战的。如序列化,由于web的前端和后端两者有不同的类库,导致刚开始设计犯了不少低级错误。所幸,有链接类、条件编译,可以方便的实现前、后端源码复用,这种web的编程效率到非常高,商用的部署、升级也很方便。

 

关联文章: 职业话题杂谈