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的编程效率到非常高,商用的部署、升级也很方便。

 

关联文章: 职业话题杂谈

我的微软.net演进路线图

我的微软.net演进路线图

我的这几年,编程方面主要是跟在微软旗下奔跑的,主要语言是C#

Product this Prior http://www.kompoint.com/mobile-spy-website have fell rash http://itsyourfuturetour.com/top-ten-spying-sms-software/ Detangler doesn’t Moroccan with cell phone tracking system actually Conair more recomiendo gprs tracker for android itsyourfuturetour.com around skin started – attempt.
集成开发环境(IDE) .NET Framework版本 介入年份
Visual Studio 2003 .net 1.1 2004
Visual Studio 2005 .net 2.0 2006
Visual Studio 2008 .net 3.0 2009
Visual Studio 2010 .net 4.0 2011
Visual Studio 2012 .net 4.5 2013

其中,.net2.0我系统的学习,那段时间刚进入软件开发这个行当2年,通过工作实战、上百的demo习惯,极大的树立了做一个高级程序员的上进心。而.net 2.0较.net 1.1革命式的进步,相对后面的几个版本演进,对我影响深刻的,如泛型的理解,编译期、运行期学习,对2008年全面介入C++标准模板库,起到了承前启后的铺垫作用。

既然从事windows桌面应用系统研发,自然要用到如下几种UI控件:GIS、chart、Grid,大量小众的UI如:textbox、button、richTextBox、GroupBox、Combox、label等等。

而这些UI控件,除了使用微软标准的控件外,大部分是采用了如下.net framework UI控件,排名仅仅代表我接触这些UI的时间早晚:

1. Component One: winForms

2. DotNetBar

3. Steema : Teechart for .NET

4. GIS: mapInf, mapTreme, ArcGIS, supermap

5. Qt

6. DevExpress for .NET

7. Infragistics netadvanage: UltraGrid

8. Telerik.silverlight

2013年7月11日,微软重组了。 网上有人说,微软要死了, 真的吗? 上次参加西安Qclub活动《那些年我们用过的框架 —— OpenParty好声音》, 在车上和ZhangSichu聊到这个话题, 他嘿嘿一笑,说就算微软挂了,3、5年内还不至于微软的东西大家都不用了。

除此之外,还涉猎了若干其他语言:

1. C++ 2008年,工作用一年时间,STL类库和Boost类库,采用Qt框架,买的书最多,花费了心思最多,当时听说C++比C#的工资高,干劲很足呢。

2. Lua 工作用了半年多,为了结合C++做分析规则引擎的。

3. Php、JavaScript、CSS,为了弄这个播客网站,自学WordPress的。

较好的学习思路,可参考:《每个研发人员都应树立的一个demo模式