利用Silverlight4开发专业商业应用
立即解锁
发布时间: 2025-08-13 02:53:17 阅读量: 18 订阅数: 25 

# 利用 Silverlight 4 开发专业商业应用
## 1. 适用人群
若想学习使用 Silverlight 构建商业应用,需要满足以下条件:
- 熟悉 Visual Studio 的操作。
- 对 C# 及其特性(如泛型和 LINQ)有一定了解,若有 Visual Basic 或 Java 等类似语言的经验也可。
- 能够熟练设计和查询数据库。
- 具备良好的面向对象设计(OOD)知识。
虽然有商业应用开发经验会更有优势,但并非必需。当遇到特别复杂和详细的概念时,可能需要参考其他资料。例如,设计商业应用时,对设计模式(如《设计模式》中描述的那些)的理解很重要,但在 Silverlight 应用设计中全面涵盖这些内容则需要专门的书籍。
## 2. Silverlight 概述
### 2.1 什么是 Silverlight
Silverlight 是微软推出的基于 Web 的平台,可用于构建丰富的互联网应用程序(RIAs)。它在构建商业应用方面具有巨大潜力,尽管相对年轻,但发展迅速,目前已到版本 4。从版本 2 到 3 以及从版本 3 到 4 都仅间隔九个月,这显示了微软对其投入的大量精力和承诺,使其成为核心开发平台之一。社区对该技术的支持也非常积极,随着越来越多的公司选择它,其未来发展前景广阔。
### 2.2 Silverlight 简史
Silverlight 发展历程如下:
| 版本 | 发布时间间隔 | 说明 |
| ---- | ---- | ---- |
| 2 - 3 | 九个月 | 展现出快速的发展态势 |
| 3 - 4 | 九个月 | 持续快速迭代 |
### 2.3 Silverlight 能为商业应用带来什么
- **丰富的用户体验**:可以创建具有吸引力和交互性的用户界面。
- **跨平台兼容性**:能在多种操作系统和浏览器上运行。
- **强大的多媒体支持**:方便集成音频、视频等多媒体元素。
### 2.4 何时不应该使用 Silverlight
- **对浏览器兼容性要求极高**:某些旧浏览器可能不支持 Silverlight。
- **应用需要极低的延迟**:Silverlight 可能无法满足这种严格的性能要求。
### 2.5 与其他微软平台的比较
与 Windows Forms 和 ASP.NET 相比,Silverlight 的优势在于其跨平台性和丰富的用户体验。Windows Forms 主要用于桌面应用开发,而 ASP.NET 侧重于 Web 应用的服务器端开发。
### 2.6 与 Adobe Flash/Flex 的比较
Silverlight 和 Adobe Flash/Flex 都可用于构建富媒体 Web 应用,但 Silverlight 与微软的其他技术集成更好,并且在商业应用开发方面具有独特的优势,如与 WCF RIA 服务的集成。
## 3. 商业应用概述
商业应用开发涉及多个方面,从应用的结构设计到功能实现。在 Silverlight 中开发商业应用,需要考虑如何合理组织代码、如何与服务器进行数据交互以及如何确保应用的安全性等问题。
mermaid 流程图如下:
```mermaid
graph LR
A[商业应用开发] --> B[结构设计]
A --> C[功能实现]
B --> D[代码组织]
C --> E[数据交互]
C --> F[安全性保障]
```
## 4. 所需工具
### 4.1 主要工具列表
- **Visual Studio**:强大的集成开发环境,用于编写代码和调试应用。
- **Expression Blend 4 和 SketchFlow**:有助于设计用户界面和创建原型。
- **Silverlight 4 Tools**:提供 Silverlight 开发所需的工具和组件。
- **WCF RIA Services**:用于实现客户端与服务器之间的数据交互。
- **Silverlight Toolkit**:包含许多实用的控件和工具。
- **SQL Server 2008 Express Edition**:用于存储和管理数据。
- **Silverlight Spy(和 .NET Reflector)**:可用于调试和分析 Silverlight 应用。
### 4.2 创建 Silverlight 应用
可以创建多种类型的 Silverlight 应用,具体如下:
- **Silverlight Application**:普通的 Silverlight 应用。
- **Silverlight Navigation Application**:支持导航功能的应用。
- **Silverlight Business Application**:专门为商业应用设计的模板。
- **Silverlight Class Library**:用于创建可复用的类库。
- **WCF RIA Services Class Library**:用于封装 WCF RIA 服务的逻辑。
- **Silverlight Unit Test Application**:用于对 Silverlight 应用进行单元测试。
### 4.3 运行和探索默认的 Silverlight 商业应用项目
创建默认的 Silverlight 商业应用项目后,可以运行并探索其初始结构。项目结构主要包括 Web 应用项目结构和 Silverlight 应用项目结构。
mermaid 流程图如下:
```mermaid
graph LR
A[创建 Silverlight 应用] --> B[选择应用类型]
B --> C[Silverlight Application]
B --> D[Silverlight Navigation Application]
B --> E[Silverlight Business Application]
B --> F[Silverlight Class Library]
B --> G[WCF RIA Services Class Library]
B --> H[Silverlight Unit Test Application]
I[运行项目] --> J[探索项目结构]
J --> K[Web 应用项目结构]
J --> L[Silverlight 应用项目结构]
```
### 4.4 推荐的项目模板修改
在开发过程中,可以根据实际需求对项目模板进行修改,以提高开发效率和代码质量。
### 4.5 XAP 文件
XAP 文件是 Silverlight 应用的部署文件,包含了应用的所有代码和资源。在部署应用时,需要将 XAP 文件部署到服务器上。
## 5. XAML 简介
### 5.1 克服 XAML 的陡峭学习曲线
学习 XAML 可能具有一定的挑战性,但它对于创建 Silverlight 应用的用户界面至关重要。了解 XAML 的语法和特性,可以帮助开发者更高效地设计和实现用户界面。
### 5.2 为何学习 XAML
- **声明式编程**:XAML 允许以声明的方式定义用户界面,简化了界面设计过程。
- **与设计工具集成**:Expression Blend 等工具可以很好地支持 XAML,方便设计师和开发者协作。
### 5.3 XAML 语法、文档结构和特性
#### 核心 XAML 语法
- **对象声明**:使用标签来声明对象,例如 `<Button>` 声明一个按钮对象。
- **属性赋值**:通过属性名和属性值来设置对象的属性,如 `<Button Content="Click Me" />`。
#### 创建对象层次结构
可以通过嵌套标签来创建对象的层次结构,例如:
```xml
<StackPanel>
<Button Content="Button 1" />
<Button Content="Button 2" />
</StackPanel>
```
#### 命名空间
命名空间用于引用不同的类库和组件,例如:
```xml
xmlns:local="clr-namespace:MyNamespace"
```
#### 为控件分配属性值
可以使用多种方式为控件分配属性值,如直接赋值、使用资源和数据绑定等。
#### 附加属性
附加属性是一种特殊的属性,可以应用于不同类型的对象,例如:
```xml
<Grid>
<Button Grid.Row="0" Grid.Column="0" Content="Button" />
</Grid>
```
#### XAML 命名空间属性
用于指定 XAML 文档的命名空间和版本信息。
#### 设计时属性
可以在设计时设置一些属性,方便在设计工具中预览效果。
#### 标记扩展
标记扩展用于在 XAML 中实现一些特殊的功能,如数据绑定和资源引用。
#### 名称范围
名称范围用于确保对象名称的唯一性,避免命名冲突。
### 5.4 控件
#### 基础控件类
Silverlight 提供了许多基础控件类,如 `Button`、`TextBox` 和 `Label` 等。
#### 布局控件
布局控件用于管理子控件的布局,常见的布局控件有 `StackPanel`、`Grid` 和 `Canvas` 等。
| 布局控件 | 特点 |
| ---- | ---- |
| StackPanel | 按水平或垂直方向排列子控件 |
| Grid | 以网格形式排列子控件 |
| Canvas | 允许绝对定位子控件 |
#### XAML 与 Windows Forms 控件属性名称的比较
XAML 中的控件属性名称与 Windows Forms 可能有所不同,需要注意区分。
#### 分配事件处理程序
可以通过 XAML 或代码为控件分配事件处理程序,例如:
```xml
<Button Content="Click Me" Click="Button_Click" />
```
在代码中实现事件处理方法:
```csharp
private void Button_Click(object sender, RoutedEventArgs e)
{
// 处理按钮点击事件
}
```
#### 创建简单的用户界面
通过组合不同的控件和布局,可以创建简单的用户界面,例如:
```xml
<StackPanel>
<Label Content="Enter your name:" />
<TextBox x:Name="txtName" />
<Button Content="Submit" Click="SubmitButton_Click" />
</StackPanel>
```
### 5.5 资源和资源字典
资源和资源字典用于管理应用中的共享资源,如样式、模板和数据等。可以在 XAML 中定义资源,并在需要的地方引用它们。
### 5.6 样式
样式用于统一控件的外观和行为,可以定义在资源字典中,然后应用到控件上。例如:
```xml
<Style TargetType="Button">
<Setter Property="Foreground" Value="Blue" />
<Setter Property="FontSize" Value="16" />
</Style>
```
### 5.7 模板
模板用于自定义控件的外观,可以完全改变控件的默认样式。例如,自定义按钮的模板:
```xml
<ControlTemplate TargetType="Button">
<Border Background="Red">
<ContentPresenter />
</Border>
</ControlTemplate>
```
### 5.8 数据绑定
数据绑定是 XAML 的重要特性之一,用于将控件的属性与数据源绑定,实现数据的自动更新。
#### 绑定到对象
可以将控件的属性绑定到一个对象的属性,例如:
```xml
<TextBox Text="{Binding Name}" />
```
#### 绑定到集合
可以将控件(如 `ListBox`)绑定到一个集合,实现数据的列表显示,例如:
```xml
<ListBox ItemsSource="{Binding Items}" />
```
### 5.9 设计用户体验
#### 设计师/开发者工作流程
设计师和开发者可以通过 XAML 进行协作,设计师负责设计用户界面,开发者负责实现功能。
#### XAML 用户界面:不同的视角
XAML 提供了一种与传统编程不同的方式来设计用户界面,需要开发者从声明式编程的角度来思考。
mermaid 流程图如下:
```mermaid
graph LR
A[XAML 开发] --> B[语法学习]
A --> C[控件使用]
B --> D[核心语法]
B --> E[命名空间]
C --> F[基础控件]
C --> G[布局控件]
F --> H[按钮]
F --> I[文本框]
G --> J[StackPanel]
G --> K[Grid]
```
## 6. 导航框架
### 6.1 导航框架入门
导航框架用于实现 Silverlight 应用中不同视图之间的导航功能。
### 6.2 导航框架的组件
#### 框架控件
`Frame` 控件用于承载不同的页面,实现页面的导航。
```xml
<Frame x:Name="mainFrame" Source="/MainPage.xaml" />
```
#### 页面类
`Page` 类是导航框架中的基本页面单元,每个页面可以包含自己的用户界面和逻辑。
#### 导航服务对象
`NavigationService` 对象用于管理导航操作,例如导航到指定页面、返回上一页等。
#### 导航上下文对象
`NavigationContext` 对象用于在导航过程中传递参数和数据。
### 6.3 在视图之间导航
#### 视图 URI
每个视图都有一个唯一的 URI,可以通过 URI 来导航到指定的视图。
#### 框架控件上的导航方法
可以使用 `Frame` 控件的 `Navigate` 方法来导航到指定的视图,例如:
```csharp
mainFrame.Navigate(new Uri("/AnotherPage.xaml", UriKind.Relative));
```
#### 导航服务对象上的导航方法
也可以使用 `NavigationService` 对象的导航方法,例如:
```csharp
NavigationService.Navigate(new Uri("/AnotherPage.xaml", UriKind.Relative));
```
#### 使用超链接按钮控件
可以使用 `HyperlinkButton` 控件来实现导航,例如:
```xml
<HyperlinkButton Content="Go to Another Page" NavigateUri="/AnotherPage.xaml" />
```
#### 使用框架控件的 Source 属性
可以直接设置 `Frame` 控件的 `Source` 属性来导航到指定的视图。
### 6.4 在视图之间传递数据
#### 使用查询字符串参数传递数据
可以在导航 URI 中添加查询字符串参数来传递数据,例如:
```csharp
mainFrame.Navigate(new Uri("/AnotherPage.xaml?param1=value1", UriKind.Relative));
```
在目标页面中可以通过 `NavigationContext` 对象获取查询字符串参数。
#### 在视图之间传递复杂数据类型
可以通过自定义对象或集合来传递复杂数据类型,需要在导航前后进行数据的序列化和反序列化。
### 6.5 深度链接
深度链接允许用户通过特定的 URI 直接访问应用中的某个视图,方便分享和书签。
### 6.6 URI 映射以启用友好 URI
可以通过 URI 映射来将复杂的 URI 映射为友好的 URI,提高用户体验。
### 6.7 与浏览器历史记录集成
导航框架可以与浏览器的历史记录集成,支持后退和前进按钮的操作。
### 6.8 处理导航事件
可以处理导航事件,如导航开始、导航完成等,以便在导航过程中执行一些额外的操作。
### 6.9 缓存视图
为了提高性能,可以对视图进行缓存,避免重复加载。
### 6.10 视觉过渡效果
可以为导航过程添加视觉过渡效果,增强用户体验。
### 6.11 替代用户界面框架
除了导航框架,还有其他一些用户界面框架可供选择,如 MVVM 框架。
mermaid 流程图如下:
```mermaid
graph LR
A[导航框架] --> B[组件]
A --> C[导航操作]
B --> D[Frame 控件]
B --> E[Page 类]
C --> F[视图 URI]
C --> G[导航方法]
F --> H[相对 URI]
F --> I[绝对 URI]
G --> J[Frame.Navigate]
G --> K[NavigationService.Navigate]
```
## 7. 从服务器暴露数据:使用 WCF RIA 服务
### 7.1 什么是 WCF RIA 服务
WCF RIA 服务是一种用于实现客户端与服务器之间数据交互的技术,它简化了数据访问和业务逻辑的实现。
### 7.2 WCF RIA 服务代码生成器的工作原理
代码生成器会根据服务器端的业务逻辑和数据模型生成客户端可用的代码,方便客户端调用服务器端的服务。
### 7.3 如何使用 WCF RIA 服务
#### 链接 Silverlight 和 Web 项目
需要将 Silverlight 项目和 Web 项目进行链接,以便客户端可以访问服务器端的服务。
#### 创建域服务
在服务器端创建域服务类,定义数据访问和业务逻辑。
#### 在域服务上创建域操作
可以创建查询操作、插入/更新/删除操作和调用操作等。
#### 消费域服务
在客户端通过生成的代码来调用服务器端的域服务。
### 7.4 入门
创建一个简单的 WCF RIA 服务应用,包括服务器端和客户端的配置。
### 7.5 使用实体框架创建数据访问层
#### 配置数据库
配置数据库连接字符串和相关设置。
#### 关于实体框架
实体框架是一种数据访问技术,用于将数据库表映射为对象模型。
#### 创建实体模型
使用实体框架创建实体模型,定义数据结构和关系。
### 7.6 域服务
#### 理解域服务生命周期
了解域服务的创建、使用和销毁过程。
#### 创建域服务
在服务器端创建域服务类,实现具体的业务逻辑。
### 7.7 域操作
#### 查询操作
用于从服务器获取数据,例如:
```csharp
public IQueryable<Product> GetProducts()
{
return context.Products;
}
```
#### 插入/更新/删除操作
用于对服务器端的数据进行增删改操作,例如:
```csharp
public void InsertProduct(Product product)
{
context.Products.Add(product);
context.SaveChanges();
}
```
#### 调用操作
用于执行一些自定义的业务逻辑,例如:
```csharp
[Invoke]
public void DoSomething()
{
// 执行自定义逻辑
}
```
#### 自定义操作
可以根据实际需求创建自定义的域操作。
### 7.8 装饰实体
#### 元数据类
用于定义实体的元数据,如验证规则和显示名称。
#### 控制客户端实体生成
可以控制客户端生成的实体代码,只生成需要的属性和方法。
#### 验证
在服务器端和客户端都可以进行数据验证,确保数据的完整性。
#### 呈现
可以定义实体的呈现方式,如显示格式和排序规则。
#### 其他数据注解
可以使用其他数据注解来实现一些特殊的功能。
### 7.9 呈现模型类型
#### 创建呈现模型类
创建一个独立的呈现模型类,用于封装业务逻辑和数据。
#### 填充和暴露呈现模型类型
将服务器端的数据填充到呈现模型中,并暴露给客户端。
#### 更新呈现模型类型
在客户端对呈现模型进行更新,并将更新后的数据保存到服务器。
### 7.10 在各层之间共享代码/逻辑
可以将一些通用的代码和逻辑封装在一个单独的类库中,供服务器端和客户端共享。
### 7.11 检查 Silverlight 项目中生成的代码
可以查看生成的客户端代码,了解其结构和使用方法。
### 7.12 将逻辑封装在单独的 WCF RIA 服务类库中
将业务逻辑封装在一个单独的类库中,提高代码的可维护性和可复用性。
### 7.13 处理服务器错误
在客户端捕获和处理服务器端返回的错误信息。
### 7.14 处理数据并发冲突
#### 识别并发冲突的方法
可以使用时间戳、版本号等方法来识别并发冲突。
#### 配置实体模型以检查并发冲突
在实体模型中配置并发检查规则。
#### 测试解决方案
对并发冲突处理方案进行测试,确保其正确性。
#### 解决域服务中的冲突
在服务器端解决并发冲突,例如采用乐观并发或悲观并发策略。
### 7.15 事务
可以使用事务来确保数据操作的原子性和一致性。
### 7.16 WCF RIA 服务工具包
WCF RIA 服务工具包提供了一些额外的功能和工具,方便开发。
### 7.17 替代通信技术
除了 WCF RIA 服务,还有其他一些通信技术可供选择,如 WCF 服务、WCF 数据服务和 HTTP 请求等。
mermaid 流程图如下:
```mermaid
graph LR
A[WCF RIA 服务] --> B[创建服务]
A --> C[使用服务]
B --> D[链接项目]
B --> E[创建域服务]
C --> F[消费服务]
C --> G[处理错误]
F --> H[查询操作]
F --> I[插入/更新/删除操作]
G --> J[捕获错误]
G --> K[处理冲突]
```
0
0
复制全文
相关推荐










