1

以下是我的想法: 使用 MVC 的目的是分离关注点和 gui 逻辑的可测试性。视图应该能够与不同的模型一起工作,模型应该能够与不同的视图一起工作。

我认为控制器类出于模拟/测试的原因必须实现一个接口,并且视图应该通过这个接口调用控制器方法。但是如果我们这样做,那么在控制器中处理视图元素(文本框、网格等)就变得很困难。因此,控制器必须以某种方式知道这些元素。

1.你通过界面暴露这些gui元素吗?将控制器类定义为部分类,以便控制器可以直接处理 gui 元素(那么接口呢)?你做什么来解决这个问题?

2. 基本上,控制器应该实现多个接口吗?一个用于视图,另一个用于模型层,以使视图/模型能够通过控制器与不同的模型/视图一起工作?

3. 模型层也应该实现模拟/测试接口?

我们如何才能最好地实现我们的测试、松散耦合、SoC 的目的?请分享您的经验/想法。

4

2 回答 2

1

我相信视图应该实现一个接口并传递给控制器​​,通常是通过构造函数。这样,控制器可以使用视图界面的字段来获取视图使用的控件的值。它也可以使用您选择的任何模型。这将为您提供所需的模型和视图之间的松散耦合。

通过通过构造函数传入模型的存储库,可以对模型执行相同的操作。然后,存储库方法可以返回模型类必须实现的接口。

然后,您可以让控制器实现一个接口并在运行时使用 IoC 容器获取适当的控制器(这将自动为控制器提供适当的视图和模型存储库。这将使您的控制器能够轻松更换以替换当前视图/模型组合用于不同的视图。但是,总的来说,我发现这是不必要的,因为我对每种类型的视图(视图界面)只有一个控制器。

于 2008-09-28T12:52:43.990 回答
1

如果 gui 有数百个元素,那么通过界面公开 gui 元素可能是一项漫长的任务。但我看不到另一种选择:部分分类会使 gui 逻辑更难测试,并且也会破坏 MVC 基础。因此要处理的元素可以作为方法中的参数传递。这可以减少编码量。

于 2008-09-28T13:09:15.293 回答