C#使用三层架构开发Winform的详细案例

下面我会为你详细讲解使用C#三层架构开发Winform的完整攻略。

什么是三层架构

三层架构是一种常见的软件架构模式,将软件应用划分为三个不同的部分:表示层、业务逻辑层和数据访问层。这三层分别负责不同的功能,并通过一定的规则进行交互。

  • 表示层:用户与应用程序进行交互的接口。在Windows应用程序中,表示层一般指Winform或WPF界面。
  • 业务逻辑层:应用程序的核心部分,处理各种业务逻辑,包括数据验证、计算、状态管理等。
  • 数据访问层:负责与数据库进行交互,将业务逻辑层的请求映射为实际的数据库操作。

使用三层架构开发Winform应用的步骤

第一步:创建项目

首先,我们需要创建一个新的C# Winform项目。在Visual Studio中,使用File -> New -> Project,选择Windows Forms App(.NET Framework)模板,填写项目名称和存储位置,点击Create创建项目。

第二步:创建三个文件夹

创建三个文件夹,分别用来存放表示层、业务逻辑层和数据访问层的代码。在Visual Studio的Solution Explorer中,右键单击项目名称,选择Add -> New Folder,分别创建Winform、BLL和DAL三个文件夹。

第三步:创建实体类

实体类用来定义数据模型,对应数据库中的表结构。在BLL文件夹中,创建一个名为Model的类库项目,用来存放实体类。在该项目中,每个实体类均需创建一个与表结构对接的类。

public class User
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Password { get; set; }
    public int Age { get; set; }
}

第四步:创建数据访问层

数据访问层用来连接数据库,并对数据库进行操作。在DAL文件夹中,创建一个名为DAL的类库项目,在该项目中创建访问数据库的方法。

public class UserDAL
{
    private static string connectionString = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

    public static int AddUser(User user)
    {
        int result = 0;
        try
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                string sql = string.Format("insert into [User](Name, Password, Age) values('{0}', '{1}', {2})", user.Name, user.Password, user.Age);
                SqlCommand cmd = new SqlCommand(sql, conn);
                result = cmd.ExecuteNonQuery();
            }
        }
        catch (Exception)
        {
            throw;
        }
        return result;
    }

    public static List<User> GetAllUsers()
    {
        List<User> users = new List<User>();
        try
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                string sql = "select * from [User]";
                SqlCommand cmd = new SqlCommand(sql, conn);
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        User user = new User();
                        user.ID = reader.GetInt32(0);
                        user.Name = reader.GetString(1);
                        user.Password = reader.GetString(2);
                        user.Age = reader.GetInt32(3);
                        users.Add(user);
                    }
                }
            }
        }
        catch (Exception)
        {
            throw;
        }
        return users;
    }
}

第五步:创建业务逻辑层

业务逻辑层是应用程序的核心部分,负责对数据进行处理,并处理各种业务逻辑。在BLL文件夹中,创建一个名为BLL的类库项目,在该项目中创建对外暴露的业务逻辑方法。

public class UserBLL
{
    public static int AddUser(User user)
    {
        return UserDAL.AddUser(user);
    }

    public static List<User> GetAllUsers()
    {
        return UserDAL.GetAllUsers();
    }
}

第六步:创建表示层

表示层在Winform应用程序中指的是自定义的所有窗体和控件。在Winform文件夹中,创建一个名为MainForm的窗体,使用DataGridView控件来显示数据库中的数据。同时在该窗体中创建AddUser按钮,用来添加新用户。

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();

        LoadUserList();
    }

    private void LoadUserList()
    {
        List<User> users = UserBLL.GetAllUsers();
        dgvUserList.DataSource = users;
    }

    private void btnAddUser_Click(object sender, EventArgs e)
    {
        UserForm userForm = new UserForm();
        if (userForm.ShowDialog() == DialogResult.OK)
        {
            UserBLL.AddUser(userForm.User);
            LoadUserList();
        }
    }
}

示例说明一

如上所示,我们在MainForm窗体中创建了一个btnAddUser按钮,在点击该按钮后会弹出UserForm窗体,用来让用户输入新用户信息。在UserForm窗体中,我们创建了一个User属性和确定按钮,点击确定按钮后会将输入的信息保存到User属性中并关闭窗体。

public partial class UserForm : Form
{
    public User User { get; set; }

    public UserForm()
    {
        InitializeComponent();
        User = new User();
    }

    private void btnSave_Click(object sender, EventArgs e)
    {
        User.Name = txtName.Text.Trim();
        User.Password = txtPassword.Text.Trim();
        User.Age = int.Parse(txtAge.Text.Trim());
        DialogResult = DialogResult.OK;
    }
}

示例说明二

另外一个示例在DAL层,我们在操作数据库时使用了ConfigurationManager类读取配置文件中的数据库连接字符串,而将真实的数据库连接字符串存放在配置文件中可以方便地修改和维护。

private static string connectionString = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

总结

以上就是使用C#三层架构开发Winform应用的详细攻略。这种架构模式能够优化代码结构,实现业务逻辑与数据访问分离,增加代码的可读性和可维护性。相信通过实现以上步骤,你也可以很好地实现一个Winform应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用三层架构开发Winform的详细案例 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • Vs2022环境下安装低版本.net framework的实现步骤

    下面是详细的“Vs2022环境下安装低版本.net framework的实现步骤”的攻略。 环境准备 首先,我们需要准备好以下一些环境: Visual Studio 2022 低版本的 .NET Framework 安装包(例如 .NET Framework 3.5) 安装低版本的 .NET Framework 在 Windows 系统中,打开“控制面板”,…

    C# 2023年6月3日
    00
  • c#对象反序列化与对象序列化示例详解

    介绍 首先我们需要明确一下对象序列化与反序列化的概念,对象序列化就是将对象转化为可以存储或传输的格式。相反,反序列化表示将存储格式或传输格式转化为对象。 C#语言提供了一个方便的API,可以使用这个API轻松地将对象序列化和反序列化。这个API被称为“System.Runtime.Serialization”。 C#对象序列化示例 接下来我们将演示如何使用C…

    C# 2023年5月31日
    00
  • asp .net core静态文件资源的深入讲解

    ASP.NET Core静态文件资源的深入讲解 在ASP.NET Core应用程序中,静态文件资源是非常重要的方面。静态文件资源包括CSS、JavaScript、图像和其他文件,它们通常不需要经过服务器端处理,可以直接从磁盘或CDN中提供给客户端。在本攻略中,我们将深入讲解如何在ASP.NET Core应用程序中使用静态文件资源,并提供两个示例说明。 准备工…

    C# 2023年5月17日
    00
  • C#实现彻底删除文件的方法

    C#实现彻底删除文件有多种方法,下面将为大家介绍两种实现的方法及示例。 方法一:使用File类的Delete方法 使用File类的Delete方法可以实现彻底删除文件,该方法可以接收文件路径作为参数,会删除目标文件而不会将其放入回收站。 下面是一个删除文件的示例代码: using System; using System.IO; namespace Dele…

    C# 2023年6月1日
    00
  • 如何使用C#程序给PDF文件添加编辑域

    下面是使用C#程序给PDF文件添加编辑域的完整攻略: 准备工作 在开始添加编辑域之前,我们需要准备一些工作。首先,我们需要下载和安装iTextSharp,这是一个开源的PDF编辑库。其次,我们需要安装Adobe Acrobat DC,这是一个非常流行的PDF编辑器,我们后续需要用它来验证PDF文件中添加的编辑域是否有效。 添加编辑域 一旦我们准备好了工作,我…

    C# 2023年6月1日
    00
  • C#自定义鼠标拖拽Drag&Drop效果之基本原理及基本实现代码

    C#自定义鼠标拖拽Drag&Drop效果之基本原理 前言 在很多应用程序中,我们都需要使用拖拽效果来实现某些功能,比如拖拽文件到应用程序窗口中打开等。在C#中,我们可以利用Drag&Drop技术自定义鼠标拖拽的效果,本文将会详细讲解Drag&Drop技术的基本原理及基本实现方法。 基本原理 Drag&Drop技术,即拖放技术,…

    C# 2023年6月6日
    00
  • JS实现图片放大缩小的方法

    实现图片放大缩小的方法主要可以通过JS来实现。下面是JS实现图片放大缩小的方法的完整攻略: 一、为需要放大缩小的图片添加标签属性 首先在需要进行放大缩小的图片中添加data-zoom属性。例如: <img src="https://example.com/example.jpg" data-zoom="https://ex…

    C# 2023年6月8日
    00
  • C#中Dictionary排序方式的实现

    下面我将为您详细讲解如何在C#中使用Dictionary进行排序。 1. Dictionary排序的基本原理 C#中的Dictionary是一种键值对集合,其中TKey为键类型,TValue为值类型。在默认情况下,Dictionary按照键的默认顺序进行排序,并且不支持按照值排序。但是,我们可以通过以下两种方式来实现Dictionary的排序: 自定义比较器…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部