依赖于其他项目类用法的项目

本文关键字:项目 用法 依赖于 其他 | 更新日期: 2023-09-27 17:54:00

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

GUI & lt; -实施& lt; DataAcess

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

我的问题是将这些属性传递给DataAcess项目。我能做的是在执行中使用dataccess,因为执行是一个级别…但是不能在实现中使用GUI,因为实现是下一级…

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

问题是我如何在GUI项目中使用一个类在实现项目中不引起循环依赖?

我可以将GUI visualBic类移动到实现项目,但是GUI visualBic类使用一些只有GUI (dll)的东西,并且这些东西不能生活在实现项目

依赖于其他项目类用法的项目

显然visualBic类不是要传递给实现的类!正如你所指出的,它具有UI特定的字段/逻辑,因此不适合生活在"实现"项目中,因为它必须为该项目中的类了解它。

你的问题的答案是你永远不希望从"实现"到GUI的引用,因为这两者紧密地耦合在一起,完全违背了将它们分开的目的(即使在技术上是可能的)。

相反,您需要一个可以存在于"实现"中的新对象,您的GUI填充并传递给适当的函数。

我的visualBic:(在GUI程序集)

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

BicDTO: (In Implementation assembly)

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);
}

显然这是高度一般化的,但它应该能让你明白这一点。如果我还需要澄清什么,请告诉我!

答案是你不能。如果需要在Implementation中使用类型,则必须在Implementation中定义该类型,或者在Implementation和GUI引用的单独项目中定义该类型。然后将数据从visualBic类映射到另一个类,并将其传递给Implementation。

我建议使用数据传输对象在图层/项目之间传递数据,属性等。创建一个单独的DTO项目,并将DTO保存在那里。您可以在所有其他项目中引用它们。

你可以在你的UI层创建DTO,填充它,然后传递给你的实现层应用规则/改变值,然后再次传递给你的数据访问层持久化,等等。

另一个DTO链接