【问题标题】:project that depends of other project class usage依赖于其他项目类使用的项目
【发布时间】:2014-05-05 17:38:08
【问题描述】:

在一个解决方案中有 3 个项目,形成如下结构:

GUI

我在 GUI visualBic 中有一个类,它会在用户交互后填充其属性。

我的问题是将这些属性传递给DataAcess 项目。 我能做的是在实现内部使用dataccess,因为实现是上一层...但不能在实现中使用GUI,因为实现是下一层...

尝试在实现中填充数据库时,由于我在实现项目中没有 GUI visualBic 类,所以我无法这样做... 我无法创建实例,或在实施项目中添加 GUI 的引用,因为这会创建循环依赖

问题是如何在实现项目中使用 GUI 项目中的类而不导致循环依赖?

我可以将 GUI visualBic 类移动到实施项目中,但 GUI visualBic 类使用一些只是 GUI (dll) 的东西,而这些东西不能存在于实施项目中

【问题讨论】:

    标签: c# .net class dependencies dependency-properties


    【解决方案1】:

    答案是你不能。如果您需要在实现中使用一个类型,那么它必须在实现中定义,或者在实现和 GUI 都引用的单独项目中定义。然后,您可以将 visualBic 类中的数据映射到另一个类,并将其传递给实施。

    【讨论】:

    • 有没有办法将信息从 GUI 传递到实施?
    • 如果没有,那我为什么建议在我上面的回答中以特定的方式做呢?
    • 您为什么要寻找一种奇特的方式来做到这一点?只需做全世界成千上万的开发人员已经在做的事情,以及这里不止一个人已经告诉你要做的事情。这并不难。
    【解决方案2】:

    显然visualBic 类不是要传递给实现的类!正如您所指出的,它具有特定于 UI 的字段/逻辑,因此不适合生活在“实施”项目中,因为它必须让该项目中的类知道它。

    您的问题的答案是您永远不希望从“实施”中引用 GUI,因为这将两者紧密结合在一起,完全违背了将它们分开的目的(即使在技术上是可能的) .

    相反,您需要一个可以存在于“实现”中的新对象,您的 GUI 会填写该对象并将其传递给相应的函数。

    我的visualBic:(在 GUI 程序集中)

    public class visualBic
    {
       public String Name {get; set;}
       ... Bunch of other, potentially GUI stuff
    }
    

    BicDTO:(在实现程序集中)

    public class BicDTO
    {
        public String Name {get; set;}
    }
    

    翻译函数:(在 GUI 程序集中)

    public void SendImplementationData(visualBic data)
    {
       BicDTO implementationObject = new BicDTO();
       implementationObject.Name = data.Name;
       implementationRef.SendData(implementationObject);
    }
    

    显然,这是高度概括的,但它应该明白这一点。如果我能澄清其他任何事情,请告诉我!

    【讨论】:

    • 有没有办法在实现中创建一个继承自 GUI 或其他东西的类...我也在考虑克隆对象...
    • 您能否发布示例代码以查看它的外观?如何用 GUI 对象填充实现对象?
    • 更新了示例代码。请让我知道你的想法!
    • 我想我明白了...我需要在 GUI 中创建引用实现的对象,并创建一个将 GUI 数据发送到实现的方法,然后在实现中我会调用 SendImplementationData 是正确的?
    • 简而言之,我必须创建一个与 GUI 类具有相同属性的类,然后该对象存在于实现中,但我已经复制了所有值...
    【解决方案3】:

    我建议使用Data Transfer Objects 在您的层/项目之间传递数据、属性等。创建一个单独的 DTO 项目并将您的 DTO 保留在那里。您可以在所有其他项目中引用它们。

    您可以在 UI 层中创建 DTO,填充它,然后将其传递给您的实施层以应用规则/更改值,然后再次将其传递给您的数据访问层以实现持久性等。

    另一个DTO link

    【讨论】:

      猜你喜欢
      • 2016-01-13
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      相关资源
      最近更新 更多