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移动端思路吧。

Silverlight again

     自2012年秋天撂下SL编码的担子,大半年时间没有动Silverlight代码了。最近由于公司负责A项目的同事LX生病住院了,临近验收。领导说:“养兵千日、用兵一时。你手快”。

故,就上了。

动手、学习、犯错,断断续续约花费了3天时间恢复手艺:具体开发的东西能忘嘛! 稍微生疏而已; 分析业务、分解问题的能力还大大增强了呢。 毕竟咱靠开发这门手艺吃饭哩。

最大的一个经验:广义的复用!

这句话非常恰当描述我此刻所要表达:“你不会,你的同事会;而你们关系又不差,那就等于你会了”。任何人,在一家公司干的时间久的人,台阶就高,身后可依靠的人、资源就越多,故越容易出活。 即:任何产出物,它的贡献属于虚拟的、广义上的团队的结果,而不单单是个人之力。

开发过程疑难项

帮助过我的同事列表

美化UI,样式

Frq

绑定菜单

WCF通信

Gjf

WCF规则

UI规则开发

gwb

zy

复杂SQL

Lj

业务沟通

Zmf

SilverLight:前台新建SilverLight的项目,后台新建普通C#类库,两者不可依赖引用。可通过WCF、链接源码方式实现前、后台通信、代码共享。下面用表格把这PHP、HTML5、SL编程的异同列出来。

 

PHP

HTML5

Silverlight

前台-页面呈现

HTML5

HTML5

微软的style

前台-逻辑算法

JavaScript

嵌入的PHP语言

JavaScript

JQuery

简化版C#类库

JQuery

前台-样式美化

CSS3

CSS3

微软自己的,原理类似CSS

前台-源码可见

100%

100%

0%

前台-插件

不需要

不需要

需要安装SilverLight5插件

前台-后台通信方式

PHP API函数

XMLHttpRequest

JSONP

WCF

前台-后台通信格式

JSON

原始格式

JSON

原始格式

JSON

原始格式

后台-逻辑算法

PHP

Node.js?

C#类库?

完整版C#类库

经验:

1 磨刀不误砍柴工:前三天,因为写SilverLight代码手生,没有动代码。 把需求文档、DB文档反反复复看了三遍,整理出规律,实践证明,后来“机器人开发2500”行代码,是因为前期理解帮了大忙。

2 抽象设计能力,复用,极大的复用UI元素、SQL片段。 能不重复写代码就不重复写代码。 业务是多样化的,程序逻辑上有通用之处,要花大力气挖掘出来,而不是一块一块的搬砖写代码。