在解决方案中有3个项目,形成如下结构:
GUI< - 实施< - DataAcess
我在GUI visualBic
中有一个类,它在用户交互后填充其属性。
我遇到的问题是将这些属性传递给DataAcess
项目。
我可以做的是在实现中使用dataccess
,因为实现是一个级别的...但是在实现中不能使用GUI,因为实现是一个级别下来......
当在实现中尝试填充数据库时,由于我在实现项目中没有GUI visualBic
类,我无法这样做......
我无法创建实例,或在Implementation项目中添加GUI的引用,因为这会创建循环依赖
问题是如何在实现项目中的GUI项目中使用类而不会导致循环依赖?
我可以将GUI visualBic
类移动到Implementation项目,但GUI visualBic
类使用的只是GUI(dll)的东西,并且那些东西不能存在于实现项目中
答案 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