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

yizhihongxing

下面我会为你详细讲解使用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日

相关文章

  • C#串口通信模块使用方法示例

    下面就详细讲解一下“C#串口通信模块使用方法示例”的完整攻略。 1. 简介 C#串口通信模块是一个用于实现PC机与设备之间高效通信的模块。它的主要作用是简化串口通信过程,使得我们可以更加方便、稳定地与硬件设备进行通信,并且可进行快读写、繁忙等控制。接下来,我将教大家如何使用C#串口通信模块。 2. 示例说明 2.1. 实例1:C#串口通信模块的基本用法 下面…

    C# 2023年6月7日
    00
  • ASP.NET Core程序发布到Linux生产环境详解

    ASP.NET Core程序发布到Linux生产环境详解 在本攻略中,我们将详细介绍如何将ASP.NET Core程序发布到Linux生产环境中。我们将介绍两种不同的发布方式,并提供两个示例说明。 准备工作 在将ASP.NET Core程序发布到Linux生产环境之前,需要进行以下准备工作: 安装Linux操作系统。 安装.Net Core运行时。 安装Ng…

    C# 2023年5月16日
    00
  • C#实现将记事本中的代码编译成可执行文件的方法

    下面是“C#实现将记事本中的代码编译成可执行文件的方法”的完整攻略,包含两条实例说明。 步骤一:编写源代码 首先需要编写C#源代码,可使用记事本或任意一种文本编辑器。下面是一个简单的示例: using System; namespace HelloWorld { class Program { static void Main(string[] args) …

    C# 2023年6月1日
    00
  • C#中查找Dictionary中重复值的方法

    要查找C#中Dictionary中的重复值,我们可以通过以下几个步骤实现: 首先,我们需要使用一个新的Dictionary来保存原始Dictionary的反向映射,即将原字典的键值对中的值作为反向字典的键,原字典的键作为反向字典的值。这样,我们就可以快速地查找是否存在重复的值。 接下来,我们需要使用LINQ查询来搜索反向字典,找到重复的值。我们可以使用Gro…

    C# 2023年6月8日
    00
  • C#如何自动选择出系统中最合适的IP地址

    为了选择系统中最合适的IP地址,我们可以使用C#编写程序使用以下步骤: 获取所有可用的网络接口信息 在C#中,我们可以使用NetworkInterface.GetAllNetworkInterfaces()方法获取当前系统中所有的网络接口信息,该方法会返回一个NetworkInterface类型的数组。 以下是一个获取网络接口信息的示例代码: using S…

    C# 2023年6月7日
    00
  • C#高效反射调用方法类实例详解

    C#高效反射调用方法类实例详解 反射是C#中非常强大的特性之一,它允许程序在运行时动态地分析、查询和修改程序元素。其中包括类、方法、属性、字段等等。使用反射可以实现很多高级的功能,比如动态加载程序集、动态调用方法、获取和修改类的状态等等。 本文将详细讲解如何使用C#高效地进行反射调用方法类实例的操作。主要涵盖以下内容: 反射基础 在使用反射之前,我们需要先了…

    C# 2023年6月1日
    00
  • C#微信公众号开发之自定义菜单

    C#微信公众号开发之自定义菜单 简介 微信公众号是微信平台提供给开发者的一款应用型产品,它提供给企业或个人一个与互联网用户交互的应用平台。 微信公众号开发的菜单,提供给用户一个便捷来访问公众号的方式,菜单可以是文字、图文等形式。在这篇文章中,我们将介绍如何使用C#实现微信公众号的自定义菜单。 实现步骤 1. 注册成为微信开发者 在微信公众号开发之前,我们需要…

    C# 2023年6月1日
    00
  • C#中把DataTable、Dataset转Json数据

    转化 DataTable 或者 Dataset 为 Json 数据可以借助于第三方库,比如 Newtonsoft.Json 库。以下是具体的示例攻略: 1. 使用 Newtonsoft.Json 转换单个 DataTable 在 Visual Studio 等 IDE 中,在项目中添加 Newtonsoft.Json 库,或者通过 NuGet 安装 给 Da…

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