依赖于其他项目类用法的项目
本文关键字:项目 用法 依赖于 其他 | 更新日期: 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链接