当控制器包含大量操作时,它们可能会变得庞大且笨重。这是否是实际使用中的一个重要问题,如果是这样的话,缓解它的策略是什么(或者是否足以简单地保持每个控制器的动作计数)?
在我的脑海中,我可以设想控制器将逻辑卸载到其他类型的动作实现中,根据一些有意义的启发式进行分组。
答案 0 :(得分:3)
根据我的经验,这种情况主要发生在我没有足够积极地应用“REST”刀时。有时候这个比喻与我们思考问题的方式不一致;例如,很容易认为“登录”是对“帐户”的操作,但是如果你应用REST刀,你会发现登录真的是“开始一个新的会话”而你通过应用“新”来颠倒这个想法“(或创建)SessionController上的操作。然后你有一个小型控制器负责创建和销毁会话(登录和注销)。
我确信有些人不会喜欢用混乱的身份验证概念来混淆REST水域,所以让我们看一个更明显的例子。我可以有一个BlogPost实体,它可以有一堆评论。我没有在BlogPostController上使用动作AddComment,而是在BlogPost上使用通常的创建/编辑/删除方法,以及另一个控制器CommentController,其新/创建操作需要BlogPostId,并实现创建/编辑/删除方法。
我遇到过一些需要非REST类动作的情况,例如“从CSV文件导入X列表”,每个人都属于Y; “列表”作为域概念并不重要,因为我只是想添加到现有的Xes集合中。在这种情况下,我采用了我认为是一种稍微丑陋的方法来向我的XController添加“导入”操作。这段代码是我任何控制器中最混乱的代码,我倾向于把它分解为更负责任的东西(也许是一个XImporter类),但是现在它“有效”。我相信比我更聪明的人会有更好的解决方案。
所以我的论点是:如果你有很多非RESTy动作,那就有一种代码味道;也许你不是在正确控制你正在控制的东西。但是,如果你说,1-3个unRESTy行动并试图重新思考这个问题并没有引导你朝着正确的方向前进,也许它不值得担心。