(MVC)共享库中的控制器?

时间:2009-08-02 05:54:31

标签: model-view-controller design-patterns

在MVC中,控制器属于应用程序,还是可以进入共享库?例如:

//this is a shared library
LibShared

//these are two apps
appA ->LibShared
appB ->LibShared

每个应用程序是否应该实现自己的MVC并使用任何共享库作为应用程序逻辑模型的一部分或者只是另一个库引用(实用程序)?

此外,是否存在MVC控制器卡在共享库中的情况?我认为控制器需要位于特定应用程序中的特定视图。控制器必须进入那个应用程序?

或者控制器可以是通用的(即共享库)吗?这是不是意味着他们不再是控制器?

5 个答案:

答案 0 :(得分:1)

我认为任何代码都可以去任何地方,是什么会促使我们将某些东西放在共享库中或者将其与应用程序保存在一起?

我会考虑两件事:

1)。变化率是多少?当我们整体更改应用程序时,这可能会发生变化。 2)。还有什么需要使用吗?如果是这样,当我重新发布新版本时,另一个客户端会立即

通常情况下,控制器会与应用程序紧密关联,因此对任何其他应用程序都没有太大兴趣,并且随着应用程序的更改,应用程序可能会发生变化。因此,使用应用程序打包是有道理的。

现在,如果控制器在某种程度上更通用,也许是配置驱动,那么共享库是有意义的。

答案 1 :(得分:1)

如果您有要求(即立即重复使用),我建议您只将控制器分离到自己的模块/包/库(此处称为模块)中。如果目前没有这样的要求那么我会将决定推迟到需要的时候,在你的情况下听起来你将不必要地过度工程。理论上应该可以稍后重构到单独的模块而不会有太大的障碍,但是要小心耦合,分离到不同的模块不会减少耦合,仔细查看控制器定向到一个样式的依赖性观点。

答案 2 :(得分:1)

您的问题的一个问题答案

是的,您可以将控制器移动到单独的图书馆而不会出现单行代码更改。

答案 3 :(得分:0)

控制器不一定需要在同一操作系统中。您可以在Windows中查看视图,在Unix中使用Controller,在Sparc中使用模型。记住MVC只是一种模式,你可以做一些更健壮,更容易修改的方法。

您的控制器可以是共享库。您的控制器是否应该了解您的观点?不必要。这取决于您如何处理模块之间的通信。在良好的MVC实现上,模块只是交换消息或事件。因此,View向Controller发送事件,Controller决定做什么并发回消息。控制器的响应可能类似于“显示窗口X”。请注意,View窗口可以解释“Window X”,如果View是一个Web模块,那么View只需放置正确的aspx页面。如果您有其他视图恰好是Web应用程序,则呈现表单X。

答案 4 :(得分:0)

至少在CakePHP以及Mike McShaffry在他的Game Coding Complete书中解释的架构中,控制器确实属于该应用程序。

但是,在这两种情况下,体系结构都是应用程序从框架继承模型,视图和控制器的基本功能。

例如:

// "super" controller of all applications using this framework
class Controller
// uses basic libraries that allows the inheriting applications to work minimally

class AppController extends Controller
// mainly uses the parent class's methods but can also substitute to using
// additional libraries

这里的框架是指封装了库使用的系统。在CakePHP中,这种封装依次是通过在尊重模型,视图和控制器中使用库来完成的。因此,这些组件都不会附加到库中。

然而,在Mike McShaffry的架构中,只有控制器和视图使用库。因此,模型保持解耦,因此可以非常方便地应用于不同的应用程序。