这是一篇早期讨论WPF和Silverlight 代码重用的文章
http://msdn.microsoft.com/en-us/magazine/cc895632.aspx。Silverlight是WPF的一个子集,包含了布局(Layout)管理,数据绑定(data binding),样式(style),媒体(media),动画(animation),图像(graphics),和模板(templates)。但是Silverlight 2 只是大约5兆的浏览器插件,因此只包含了核心CLR,一个微软 .NET Framework 3.5的特殊版本包括WPF,WCF客户端子集,XAML解析器(parser),以及一系列定制的Silverlight控件。但是在Silverlight里也有一些WPF所没有的API。比如WebClient以及Visual State Manager (VSM)。这二篇文章
http://msdn.microsoft.com/en-us/library/cc903925(VS.96).aspx 和
http://www.devx.com/RIA/Article/41097/7184给出了兼容性列表。
微软一直在向二者的兼容性努力。本来在基础上都用兼容的 .NET Framework和XAML。现在又增加了对UI控件的兼容。对Silverlight 2.0,微软发布toolkit (
http://www.codeplex.com/Silverlight/)。这个Toolkit会包含在Silverlight 3.0 的SDK里。相应的兼容控件会出现在WPF SDK中。
这是一个相关的视频链接:Jeff Wilcox on
Sharing Skills and Code with Silverlight and WPF。按Jeff的建议,程序员应该先开发Silverlight应用,再补充WPF的功能。WPF主要用在控制外设,与其他软件比如Office软件的交换上。感觉上Silverlight 3.0 和 .Net Framework 4.0 会使兼容性更好。
这篇最近的文章(
http://elegantcode.com/2009/03/26/ria-the-death-of-server-page-development/
分析了WPF和Silverlight的差异以及作者自己共享WPF 和Silverlight代码的经验。总结下来
1. Silverlight的性能不如WPF。但是Web程序的数量可能是WPF的二十倍。
2. 由于Silverlight的功能(比如安全性)很受限制,所以有些功能像本地需要大量数据访问,同步或缓存的应用,只有WPF才能承担。
3. 通过采用Prism (
http://www.codeplex.com/CompositeWPF) 和 CSLA.NET
http://www.lhotka.net/Default.aspx技术可以消除许多底层差异,从而使代码重用率达到85% 到90% !
Java走到这一步大概至少需要五年。JAVA程序员的唯一选择是Adobe的Flex和AIR。但是要重新学习新的语言与类库,还有其IDE不知道会不会有VisualStudio那么好用。
不过可以肯定的是ASP.NET应该不会用了。