gpt4 book ai didi

c# - 关于我的第一个 3 层 Winform 应用程序中 BLL 和 DAL 的几个问题

转载 作者:行者123 更新时间:2023-11-30 20:05:56 24 4
gpt4 key购买 nike

我正在尝试创建 3 层 winform 应用程序。由于这是我第一次尝试 3 层设计,所以我遇到了一些问题。

应用程序将支持附加多个 sqlite 数据库文件。

所以我创建了这样的类

public class Database
{
public string Name { get; set; }
public string FilePath { get; set; }
public bool isAttached { get; private set; }
}

现在我想收集这些对象。

我应该创建另一个类似下面的 DatabaseList 的类,还是只创建一个列表就足够了

public class DatabaseList : List<Database>
{
...

对比

List<Database> myDatabases;

Form1.cs 中应该创建什么?

例如,我假设上面的集合应该在 BusinessLayer 而不是 Form1.cs 中创建,并且只有 BusinessLayer 类是在 Form1.cs 中创建的。这是正确的吗?

Attach Method放在哪里?

方法是这样的:

    public void AttachDB(Database db)
{
MySqliteHelper.Attach(db.Name, db.FilePath);
this.Add(db);
}

我是将方法放在 DatabaseList 类中(如果这是创建集合的方式)还是应该放在 BusinessLayer 中?

如何使 Attach 方法支持其他关系数据库,例如也驻留在单个文件中的 MS SQL Compact Edition

我正在考虑创建另一个具有与 MySqliteHelper 相同方法的通用数据库帮助程序类,而 AttachDB 方法将调用它。有点像

MyDBHelper.Attach(db.Name, db.FilePath);

或者这是像 Ninject 这样的 Dependency Injections 可以提供帮助的地方吗?我以前从未使用过它,我从 Ninject 记忆起的只是一个拥有不同武器的武士,所以在我看来这有点类似于我的具有不同特定数据库类的问题。

最佳答案

我将分几个部分来解决这个问题,因为它涵盖了很多方面。

什么是三层架构?

3 层(或 n 层,分层)架构基本上是接口(interface)不直接与数据库通信的任何设计,无论多么薄实际层是。您可以创建一个具有获取和保存数据功能的类,它仍然符合 3 层架构的要求。话虽如此,我下面要解释的可能是最常见的 3 层架构实现。

Layer 与 Tier:有什么区别?

要了解 3 层架构,首先要区分层和层。一个应用程序可以有很多物理层,但仍然只包含三个逻辑层。如果一张图片真的值一百万字,下图应该可以让您明白这一点。

enter image description here

在上图中,业务/中间层 由业务逻辑、业务对象和数据访问对象组成。该层的目的是为用户界面和数据库之间的中间人提供服务。

数据访问层 (DAL)

数据访问层由数据访问组件(见下文)和一个或多个数据访问对象组成。根据需要,数据访问对象通常设置为以下两种方式之一:

  1. 每个业务对象一个数据访问对象
  2. 一个数据访问对象由多个业务对象共享

听起来您要处理多个数据库,因此使用一对一选项可能更有意义。通过这种方式,您可以灵活地指定哪个数据库/连接对应于哪个业务对象。

enter image description here

数据访问组件

您的数据访问组件应该是一个非常通用的类,只包含连接数据库并与之交互所需的基本方法。在上图中,该组件由 dbConnection 类表示。

问题与解答

Form1.cs 中应该创建什么?

前端唯一处理的是业务对象和业务逻辑。有时它不是那么黑白分明,但这就是想法。

Attach方法放在哪里?

代替 Attach 方法,将连接字符串传递到您的数据访问组件。连接字符串可用于附加和/或连接到几乎任何数据库。

如何使 Attach 方法支持其他关系数据库,例如也驻留在单个文件中的 MS SQL Compact Edition?

见上文。

我应该创建另一个像下面的 DatabaseList 这样的类还是只创建一个列表就足够了?

老实说,这取决于您,并且不会影响 3 层架构的有效性。您知道您要满足的特定要求,所以如果有意义就去做。不过,请考虑您的数据访问对象将如何与此类交互,因为您需要公开用于对从列表中选择的任何数据库执行查询和非查询的方法。

关于c# - 关于我的第一个 3 层 Winform 应用程序中 BLL 和 DAL 的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10382853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com