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

时间:2014-03-27 00:27:12

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

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

GUI< - 实施< - DataAcess

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

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

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

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

我可以将GUI visualBic类移动到Implementation项目,但GUI visualBic类使用的只是GUI(dll)的东西,并且那些东西不能存在于实现项目中

3 个答案:

答案 0 :(得分:1)

答案是你做不到。如果需要在实现中使用类型,则必须在实现中定义,或者在实现和GUI引用的单独项目中定义。然后,您可以将visualBic类中的数据映射到此其他类,并将其传递给实现。

答案 1 :(得分:1)

显然,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);
}

显然这是高度概括的,但它应该得到重点。如果我能澄清其他任何内容,请告诉我!

答案 2 :(得分:1)

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

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

另一个DTO link