Model view controller 避免MVC中的大型控制器

Model view controller 避免MVC中的大型控制器,model-view-controller,controllers,action,Model View Controller,Controllers,Action,当控制器包含大量操作时,控制器可能会变得庞大而笨拙。在实际使用中,这是一个重大问题吗?如果是的话,有什么策略可以缓解它(或者足够好,可以让每个控制器的操作倒计时) 在我的脑海中,我可以想象控制器将逻辑转移到其他类型的操作实现中,根据一些有意义的启发进行分组。根据我的经验,这通常发生在我没有足够积极地应用“REST”刀时。有时隐喻与我们思考问题的方式不一致;例如,很容易认为“登录”是“帐户”上的一个操作,但如果应用REST刀子,您就会意识到登录实际上是“启动一个新会话”,您可以通过在Session

当控制器包含大量操作时,控制器可能会变得庞大而笨拙。在实际使用中,这是一个重大问题吗?如果是的话,有什么策略可以缓解它(或者足够好,可以让每个控制器的操作倒计时)


在我的脑海中,我可以想象控制器将逻辑转移到其他类型的操作实现中,根据一些有意义的启发进行分组。

根据我的经验,这通常发生在我没有足够积极地应用“REST”刀时。有时隐喻与我们思考问题的方式不一致;例如,很容易认为“登录”是“帐户”上的一个操作,但如果应用REST刀子,您就会意识到登录实际上是“启动一个新会话”,您可以通过在SessionController上应用“新建”(或创建)操作来颠倒这个想法。然后有一个小型控制器负责创建和销毁会话(登录和注销)

我相信有一些人不会喜欢用杂乱无章的身份验证概念来混淆视听,所以让我们看一个更明显的例子。我可以有一个BlogPost实体,它可以有一堆评论。我没有在BlogPostController上使用action AddComment,而是在BlogPost上使用了常用的创建/编辑/删除方法,还有另一个控制器CommentController,其新的/创建操作需要BlogPostId,并实现了创建/编辑/删除方法

我遇到过一些情况,我需要一个非REST类的操作,比如“从CSV文件导入一个X列表”,每个X列表都属于一个Y;“列表”作为一个领域概念并不重要,因为我只是想添加到现有的XE集合中。在这种情况下,我采取了我认为有点丑陋的方法,将“导入”操作添加到我的XController中。这段代码是我所有控制器中最混乱的代码,我倾向于将其分解成更包含责任的代码(也许是一个XImporter类),但现在它“起作用了”。我相信比我聪明的人会有更好的解决方案

所以我的论点是:如果你有很多非RESTy操作,就会有一种代码味道;也许您没有正确地建模所控制的对象。但是,如果你说,1-3次不果断的行动和重新思考问题的尝试并没有把你引向正确的方向,也许这不值得担心