$object_cin = new CIO( );
$object_cin->invoke( $_POST[ 'model' ] );
class CIO
{
private function invoke( $model )
{
switch( $model )
{
case 'user_try':
$model = new MUserTry();
$this->send( $model->invoke( 1 ) );
break;
case 'user_new':
$model = new MUserNew( new IUniversals() , new IText(), new IMessage() );
$this->send( $model->invoke() );
break;
case 'user_exist':
$model = new MUserExist( new IUniversals() , new IText(), new IMessage() );
$this->send( $model->invoke() );
break;
case 'tweet':
$model = new MTweet( new IUniversals() , new IText(), new IMessage() );
$this->send( $model->invoke() );
break;
default:
echo "Incorrect Ajax Type provided";
}
}
private function send( $string )
{
echo "|P|" . $string;
}
}
2 回答
当然它会增长,并且变得无法维持。
首先,泛型Control
类是什么?一个网站应该有多个控制器(我假设它在某种程度上与 MVC 相关,因为这就是术语“控制器”的来源),通常每个“页面”有 1 个控制器(粒度可能会改变,取决于架构模式) .
下一个问题是大switch
声明。每个case
' 都应该在控制器中有一个单独的方法。由于设计错误,您最终会重复部分代码。
您已经直接遇到了Fat Controller反模式。
控制器只是胶合逻辑。它将请求(GET、POST、WHATEVER)中的数据传递给任何知道如何处理它的模型,格式化模型返回的任何结果,并将其分配给要渲染的视图。
至少这是应该发生的。
开发人员经常用应用程序逻辑填充控制器,使模型仅是用于进行数据库访问的 CRUD 对象。这不是开发 MVC 应用程序的方法。模型应该是“领域专家”。除了存储应用程序正在使用的数据之外,它们还意味着知道该数据的含义、给定数据集的有效行为等等。这使得模型可重用、松散耦合和高度一致。您可以毫无困难地使用具有许多不同视图/控制器组合的丰富模型。
如果应用程序逻辑在控制器中,那么您将无法使用该控制器来执行应用程序逻辑,或者更糟糕的是,您最终会将相同的代码复制并粘贴到不同的控制器中。
如果控制器充满了应用程序逻辑,那么这是一个明确的信号,表明您需要重新考虑您的设计和重构