【问题标题】:Where to put domain objects in 3 tier c# winforms applicationc# winforms 应用程序在哪里放置域对象在 3 层
【发布时间】:2023-03-19 17:40:01
【问题描述】:

我正在编写一个 C# 应用程序,我想遵循 3 层编程架构。我一直在基于this article 编写我的应用程序。

我有一些问题希望有人能帮助我:

  • 我将域对象放在哪里(例如 Person 类,我将 getter 和 setter 以及构造函数以及它的所有属性(年龄、姓名、..)放在哪里。我把这些放在BLL 文件夹还是其他地方?

  • 我是否应该将所有从 DAL 层调用函数的 BLL 函数放在一个控制器中,或者放在所有特定业务类(例如人员、订单等)中?

  • 在调用 DAL 函数之前,我需要在每个 BLL 函数中创建一个 DAL 对象,还是使用单例模式,一次只创建一个 DAL 类对象?

我的类的截图(Program.cs 是主类):

class structure

【问题讨论】:

  • 与大多数事情一样,这取决于。例如,随着应用程序大小的增长,您的Person 对象将开始在每一层中看起来有很大不同。视图中可能有一个 PersonViewModel 来保存显示所需的数据,BL 中的 Person 实体,因为它需要根据业务逻辑进行操作,也许还有一个 PersonDTO 来表示与对持久性最有用。
  • 从 BL 中的 Person 实体开始,并记住它是用于业务逻辑操作的。当您了解需要为查看或持久性目的操作数据时,请创建特定于这些目的的单独对象,并以对您的应用程序有意义的方式在它们之间进行映射。

标签: c# winforms 3-tier


【解决方案1】:
  1. 我会说域对象将进入 DAL 文件夹,因为这些对象会将数据存储在对象实例中。
  2. 我不建议将所有 BLL 功能放在一个控制器下。即使对于“单机、单项目”而言,3 层架构的原因之一是具有代码隔离,以便易于理解和维护。
  3. 单例模式意味着同一个对象将与所有 BLL 函数共享。如果 DAL 的主要目标是拥有一个单一的存储交互(例如数据库),那么拥有多个 DAL 对象将意味着多个数据库连接,这意味着资源利用率问题。即使在多线程情况下,您也可以将数据库连接池大小增加到一个常数,并确保与线程共享池。重要的是,您不要从数据库请求不必要的资源。

【讨论】:

    【解决方案2】:

    有多种解决方案是可能的,但例如核心平台表明,“更多抽象给抽象之神”是一种趋势。我猜是因为他们发现在他们的开发过程中以这种方式管理它更容易(跨平台,开源)。

    因此,尽可能抽象地进行操作,并检查它是否适合您。

    我在一个程序集中拥有实体、服务接口。我存储在实体中的“业务”代码(可能在实例方法中,可能在静态方法中,可能在静态扩展中 - 它们之间没有太大区别)。 POCO 不代表“不能包含方法”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多