Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual Studio C#-分层_C#_N Tier Architecture - Fatal编程技术网

Visual Studio C#-分层

Visual Studio C#-分层,c#,n-tier-architecture,C#,N Tier Architecture,我正在学习软件开发中的不同层次,例如表示层、逻辑层等等 所以我有一个RaceTrackSimulator项目,它是一个Windows窗体应用程序。我想将所有类(逻辑)与GUI(表示)分开,我是这样做的: 但现在的问题是,我不知道如何允许类访问和修改GUI的组件,如文本框和标签。我认为这只是一个简单的名称空间问题,但这没有意义,因为在每个类中它都表示: namespace RaceTrackSimulator.BusinessLogic 我如何解决这样的问题 谢谢 在不查看实际代码的情况下,可

我正在学习软件开发中的不同层次,例如表示层、逻辑层等等

所以我有一个RaceTrackSimulator项目,它是一个Windows窗体应用程序。我想将所有类(逻辑)与GUI(表示)分开,我是这样做的:

但现在的问题是,我不知道如何允许类访问和修改GUI的组件,如文本框和标签。我认为这只是一个简单的名称空间问题,但这没有意义,因为在每个类中它都表示:

namespace RaceTrackSimulator.BusinessLogic
我如何解决这样的问题


谢谢

在不查看实际代码的情况下,可能会出现一些问题。与表单相比,名称空间与3个类不同,因为它们位于不同的文件夹中


还要确保在表单设计器的“属性”选项卡中将组件可见性级别设置为“公共”。一旦它们是公共的,您应该能够在您创建的3个类中的任何一个中访问它们。

您刚刚在单独的文件夹中分离了业务层类,而实际上并不完全符合单独层的条件。您应该将所有这些类移动到一个单独的项目(例如,类库项目)中,并将该类库的dll用于表示层表单应用程序

您也可以选择将业务层编写为WCF服务并部署它们。反过来,您的客户机/表示层将使用服务,然后访问业务层;这是一个很好的原因,那么对于所有不同的客户端(UI或其他),您不必专门提供dll

在您的特定情况下,问题可能是名称空间不同,在这种情况下,请确保导入了正确的名称空间。

是否放置了

using RaceTrackSimulator.BusinessLogic;

在引用对象的文件顶部?

代码在名称空间中的位置与此无关。你做得很好。您所需要做的就是提供一种从业务逻辑类访问组件的方法。根据您的需求,有多种方法可以做到这一点。您可以在表单中提供post(对象状态)方法,并实例化向表单对象传递引用的逻辑类。然后,您的业务逻辑可以简单地将它喜欢的任何内容发布回表单,然后由表单根据它从逻辑层接收的数据/消息处理UI逻辑。或者,您可以使您的组件对逻辑层更公开。或者提供一个接口,允许直接访问组件


此外,在上面的示例中,您所称的业务逻辑并不是真正的逻辑。从外观上看,这是业务模型类。

您的意思是不能从表单访问类,还是不能从类访问表单?如果您只是将表示逻辑的代码复制到一个单独的文件中,但仍然让它修改GUI组件,那么您还没有将业务逻辑与表示逻辑分离!