【问题标题】:How Can I Keep The 'GUI' Layer Out Of The 'Business Logic' Layer?如何将“GUI”层保留在“业务逻辑”层之外?
【发布时间】:2010-10-21 03:22:11
【问题描述】:

我目前有一个项目是“业务对象”项目,我们的目标是明确区分 GUI 和业务对象。但是,我的项目引用了 System.Windows.Forms,这对每个人来说都是一个很大的危险信号,表明我的项目设计不佳。

我的问题是我正在使用名为“Active Query Builder”的第 3 方控件。它实际上是 GUI 中的“控件”,System.Windows.Forms.Control;但它永远不会显示在任何地方,添加到任何 Form 的 Controls 集合中。它提供了业务对象的大部分核心功能。

无论如何,如果没有对 System.Windows.Forms 的引用 - 我无法使用第 3 方控件,并且 BO 已严重损坏。但有人告诉我,我不能引用 System.Windows.Forms,因为这是不好的编码习惯。

我完全不知道该怎么做。

有更多设计模式类型经验的人可以提供解决方案吗?

【问题讨论】:

    标签: .net design-patterns business-objects


    【解决方案1】:

    所以你有一个引用 WindowsForms 的库,但不直接使用任何东西?您的 BO 项目没有弄乱任何表格?

    我认为你很好,参考是一个危险信号,上面写着等等我为什么要这样做。但是只要该层在逻辑上仍然是分开的,那么恕我直言,你可以。

    您可以做的一件事是将其抽象到另一个项目中,该项目将处理与查询构建器的交互。因此,您的 BO 项目将与知道如何使用此控件的 Query Builder 项目一起使用。

    【讨论】:

    • 如果你知道的话,我很想知道为什么我在这方面得到了 -1。我很想听听您的意见。
    【解决方案2】:

    我在这里可能错了,但 System.Windows.Forms 只是 .NET Framework 的一部分,实际上并不构成 GUI。它可能有许多有用的功能,您可能会使用这些功能但不会显示任何内容。我认为谁说不应该使用这个可能是误解了这个原则。

    如果您正在开发 n 层应用程序,通常操作 GUI-业务逻辑-数据存储分离,但 GUI 严格来说是呈现给用户以允许交互的用户界面,而不是促进交互的框架。

    【讨论】:

      【解决方案3】:

      我只是对 Active Query Builder 有点熟悉,但这不是用于创建 SQL 查询的 GUI 组件吗?我完全不知道这种组件是如何属于业务对象的。

      【讨论】:

      • 我也不熟悉它,但如果它允许在设计时构建查询,然后需要在运行时执行组件,那么它被包含并使用表单是有意义的。
      • 除了 GUI 控件之外,它还提供了生成 SQL 的能力,并且通常可以做一些很酷的事情。本质上,我有一堆“标准”,想要返回匹配的数据或获取这些匹配所需的 SQL。 AQB 控件是其中的核心 - 但我们在此基础上做了很多工作,并希望其他 BO 也能使用该功能。
      • (我不确定这是否证明它存在于 BO 中 - 也许它根本不应该存在)
      【解决方案4】:

      您可以为控件创建一个包装类,该类使用您需要的方法实现接口。您的业​​务对象可以依赖于该接口,该接口可以由任何东西实现(在这种情况下,它是一个控件)。

      这确实引起了一些担忧,即这个“控件”具有与 UI 无关的功能;只是感觉不对。

      【讨论】:

        猜你喜欢
        • 2010-12-18
        • 2016-08-12
        • 2011-12-03
        • 2011-11-26
        • 2017-04-29
        • 2014-09-04
        • 1970-01-01
        • 2018-04-17
        • 2013-02-18
        相关资源
        最近更新 更多