我对这个问题的负面反应感到非常惊讶,因为这是一个相当有趣的问题。我预计这是因为大多数人认为MVC仅在Web环境中具有任何意义,但MVC也完全适用于CLI程序。它只是呈现了一种不同的视角媒介。事实上,我认为它是一种最高级的MVC设计,能够插入CLI,GUI或Web“视图”,而无需对控制器和模型进行任何更改。
MVC 所说的只是,给定一个应用程序,你尽可能抽象视图部分 - 应用程序的呈现,用户看到和与之交互的内容 - 从应用程序的真实内部逻辑中抽象出来。执行此操作的方法是创建控制器,将视图及其中存在的任何控件“粘附”到后端的逻辑上。简而言之,控制器将用户输入转换为方法调用,并将返回值转换回对用户有用的东西。模式的模型部分有些争议。有人说,发送到视图进行显示的每个单独的对象图都是一个“模型”。其他人则认为,位于后端的整个有状态对象图就是“模型”,控制器形成了一个观察玻璃,让视图挑选、检查和修改模型的特定部分。问题实际上是,是否有许多模型不断来回流动,或者一个大模型需要以用户可以理解的方式公开。
若要在 CLI(或任何类型的应用)中获取 MVC,请拥有明确定义为视图/表示的代码部分。它永远不应该有任何类似于业务逻辑的东西。您的控制器应该是知道如何响应用户输入并且可以将内容发送回去以供查看的对象,尽管没有任何关于这些内容将如何显示或输入将采用的确切形式的任何假设。模型,不管怎样,基本上是用户关心的实际数据或“东西”,它应该忘记显示它的视图或控制器。嗯......控制它。