### C# WinForm 中三层架构实现详解
#### 一、三层架构概述
三层架构是一种常见的软件设计模式,它将应用程序分为三个逻辑上独立的部分:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。这种架构能够提高系统的灵活性、可维护性和扩展性。
- **表示层**:主要负责与用户的交互,通常包含用户界面(如 WinForms 或 Web 页面)。
- **业务逻辑层**:包含应用的核心逻辑,例如业务规则和流程处理。
- **数据访问层**:处理与数据库相关的操作,包括数据的读取、写入等。
#### 二、WinForm 应用中的三层架构实现
本篇文章将通过一个简单的例子来介绍如何在 C# WinForms 应用程序中实现三层架构,该例子使用 MS Access 数据库作为数据存储,并实现了一个小型可复用的组件来管理客户数据。该组件提供了添加、更新和查找客户数据的功能。
#### 三、表示层(GUI 层)
表示层是用户与系统交互的主要界面。在这个例子中,表示层使用 WinForms 控件实现。用户可以通过文本框输入客户信息,并通过按钮触发添加、更新或查找操作。
```csharp
private void cmdAdd_Click(object sender, System.EventArgs e)
{
try
{
cus = new BOCustomer();
cus.cusID = txtID.Text.ToString();
cus.LName = txtLName.Text.ToString();
cus.FName = txtFName.Text.ToString();
cus.Tel = txtTel.Text.ToString();
cus.Address = txtAddress.Text.ToString();
cus.Add();
}
catch (Exception err)
{
MessageBox.Show(err.Message.ToString());
}
}
```
上述代码展示了当用户点击“添加”按钮时,表示层是如何获取用户输入的数据并通过调用业务逻辑层的方法来添加新客户的。
#### 四、业务逻辑层(Business Logic Layer)
业务逻辑层包含了所有业务规则和逻辑处理,它不关心具体的数据来源或展示方式,只关注业务流程本身。在这个例子中,业务逻辑层由 `BOCustomer` 类实现,该类封装了客户数据的操作。
```csharp
public class BOCustomer
{
private string cusID;
private string LName;
private string FName;
private string Tel;
private string Address;
public void Add()
{
// 实现添加客户的逻辑
DACustomer da = new DACustomer();
da.Add(this);
}
public DataSet Find(string cusID)
{
// 实现根据 ID 查找客户的逻辑
DACustomer da = new DACustomer();
return da.Find(cusID);
}
public void Update()
{
// 实现更新客户的逻辑
DACustomer da = new DACustomer();
da.Update(this);
}
}
```
如上所示,`BOCustomer` 类包含了添加、查找和更新客户数据的方法。这些方法内部调用了数据访问层的方法来完成具体的数据库操作。
#### 五、数据访问层(Data Access Layer)
数据访问层负责与数据库进行交互,执行实际的 CRUD 操作。在这个例子中,使用 MS Access 数据库,并通过 ADO.NET 进行数据访问。
```csharp
public class DACustomer
{
public void Add(BOCustomer customer)
{
// 使用 ADO.NET 编写添加客户的 SQL 语句
// 执行 SQL 语句插入数据
}
public DataSet Find(string cusID)
{
// 使用 ADO.NET 编写查找客户的 SQL 语句
// 执行 SQL 语句并返回结果集
return new DataSet();
}
public void Update(BOCustomer customer)
{
// 使用 ADO.NET 编写更新客户的 SQL 语句
// 执行 SQL 语句更新数据
}
}
```
数据访问层中的 `DACustomer` 类实现了对客户数据的具体操作,包括添加、查找和更新。
#### 六、总结
通过将应用程序分解为三个逻辑层,可以显著提高软件的可维护性和可扩展性。每一层都有明确的责任和边界,使得开发更加模块化和易于管理。此外,三层架构还支持不同的技术栈,如表示层可以是 Web 或桌面应用程序,数据访问层可以针对不同的数据库类型(如 MS Access 或 Oracle),而业务逻辑层则保持不变。这种设计思路不仅适用于当前的项目,对于未来可能遇到的新需求也能更好地应对。