为什么要新增一个 FollowersController 控制器?

把关注和取消关注的方法写在用户控制器UsersController中不也行吗?此处为什么要再增加一个控制器,是遵守的什么原则?我觉得搞清这点对我很重要!
我所理解的控制器,是介于view和model之间,也就是视图和模型之间的控制层,控制选择数据,分配给指定的视图显示。控制层,控制视图,用户交互,比作110指挥中心,直接面对报警人,分析报警问题,核实警情,分析验证,直接反馈,或进一步调用公安系统资源(模型,基层内容,公安资源,派出所或交警等资源)给视图层解决问题。
那么,同样面对用户的交互,面对user解决问题的控制器,为什么要再进行细分呢?是在遵循什么原则有必要进行分开呢?
前面还有SessionController,解决用户登录、登出问题?
其实这个问题就是不知道什么情况该有必要增加控制器的问题?请学友们不吝赐教

not only a learner , but also a user .
ruodee
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
ruodee
最佳答案

S:SRP:单一职责原则,一个类要职责明确,不要搞兼职,原因是它会变得笨重,当你对它进行调整时,麻烦很多。例如你在公司,作为总经理,兼职行政经理、营销经理、财务经理,甚至还兼职保安、保洁、水电维修工,总经理作为一个员工,赋予这些职责,也是可以哈。但是,问题来了,当你增加或改变营销的一个职能的时候,这个兼职的总经理就不够灵活了,因为他要考虑对行政的影响、对财务的影响,对保安保洁的影响,这个带着严重包袱的总经理总是笨手笨脚。所以请不要太多兼职,尽量遵循SRP,单一职责原则。
O:OCP:开放封闭原则,一个类应该对扩展开放,对修改封闭。这个是动态解决问题的思路,比如一个机器,在运转过程当中,你不要总是尝试去修改机器内部的参数或联动机制,拆开机器去解决问题。如果你先要扩展机器的功能,请先考虑机器的外部因素,比如改变电压、电流,通过改变或扩展它的基类来达到改变它本身的目的。所以,比如汽车的发动机,机器是有结实的外壳,不到大修,不能打开,你可以加加油门、换97#汽油、加合成机油来提升机器的性能。不能轻易改变机器的内部构造,但又必须留足外部接口。
L:LSP:里式替换原则,这个很简单,类的设计尽量遵循这个原则,就是老子能干的事,儿子一定能干。比如辟邪剑谱吧,老林子知道辟邪剑谱的属性和方法,虽然没去尝试修炼呵呵,但小林子不知道,武林同道不知道。以至于灭门,家道败落。林家祖先应该不知道里式替换原则,如果知道,把辟邪剑谱作为接口,开放一个,一个就行:自宫方法。要实现这个接口,欲练此功,必须实现这个方法,必先自宫。估计也不至于遭受灭门之灾了。这个原则,其实是尽量减少不能继承的属性和方法。
I:ISP:接口隔离原则,一个接口应该尽可能的精简。举个例子,去饭店吃饭,点餐需要费用,这个是正常的。可非要给这个接口增加方法,例如碗筷要消毒费、开酒要开瓶费、服务员要小费、去洗手间要进门费,是不是觉得很烦。尽量遵循精简,一次性收费。不要把收费这个接口做的太复杂,要尽可能与其他接口隔离,这样才能保证饭店良好经营。
D:DIP:依赖倒置原则,这个是指进行减少类之间的依赖关系,但要增加类与接口的依赖。就是要求儿子,不要总依赖老子,要靠自己的能力吃饭。去学知识、学技能,自己去实现成功这个接口的方法,不要总模仿、复制别人的,要去依赖成功大道,而不要去依赖个体。

5年前 评论
讨论数量: 4
ruodee

S:SRP:单一职责原则,一个类要职责明确,不要搞兼职,原因是它会变得笨重,当你对它进行调整时,麻烦很多。例如你在公司,作为总经理,兼职行政经理、营销经理、财务经理,甚至还兼职保安、保洁、水电维修工,总经理作为一个员工,赋予这些职责,也是可以哈。但是,问题来了,当你增加或改变营销的一个职能的时候,这个兼职的总经理就不够灵活了,因为他要考虑对行政的影响、对财务的影响,对保安保洁的影响,这个带着严重包袱的总经理总是笨手笨脚。所以请不要太多兼职,尽量遵循SRP,单一职责原则。
O:OCP:开放封闭原则,一个类应该对扩展开放,对修改封闭。这个是动态解决问题的思路,比如一个机器,在运转过程当中,你不要总是尝试去修改机器内部的参数或联动机制,拆开机器去解决问题。如果你先要扩展机器的功能,请先考虑机器的外部因素,比如改变电压、电流,通过改变或扩展它的基类来达到改变它本身的目的。所以,比如汽车的发动机,机器是有结实的外壳,不到大修,不能打开,你可以加加油门、换97#汽油、加合成机油来提升机器的性能。不能轻易改变机器的内部构造,但又必须留足外部接口。
L:LSP:里式替换原则,这个很简单,类的设计尽量遵循这个原则,就是老子能干的事,儿子一定能干。比如辟邪剑谱吧,老林子知道辟邪剑谱的属性和方法,虽然没去尝试修炼呵呵,但小林子不知道,武林同道不知道。以至于灭门,家道败落。林家祖先应该不知道里式替换原则,如果知道,把辟邪剑谱作为接口,开放一个,一个就行:自宫方法。要实现这个接口,欲练此功,必须实现这个方法,必先自宫。估计也不至于遭受灭门之灾了。这个原则,其实是尽量减少不能继承的属性和方法。
I:ISP:接口隔离原则,一个接口应该尽可能的精简。举个例子,去饭店吃饭,点餐需要费用,这个是正常的。可非要给这个接口增加方法,例如碗筷要消毒费、开酒要开瓶费、服务员要小费、去洗手间要进门费,是不是觉得很烦。尽量遵循精简,一次性收费。不要把收费这个接口做的太复杂,要尽可能与其他接口隔离,这样才能保证饭店良好经营。
D:DIP:依赖倒置原则,这个是指进行减少类之间的依赖关系,但要增加类与接口的依赖。就是要求儿子,不要总依赖老子,要靠自己的能力吃饭。去学知识、学技能,自己去实现成功这个接口的方法,不要总模仿、复制别人的,要去依赖成功大道,而不要去依赖个体。

5年前 评论

大概是给控制器减压

5年前 评论
ruodee

S:SRP:单一职责原则,一个类要职责明确,不要搞兼职,原因是它会变得笨重,当你对它进行调整时,麻烦很多。例如你在公司,作为总经理,兼职行政经理、营销经理、财务经理,甚至还兼职保安、保洁、水电维修工,总经理作为一个员工,赋予这些职责,也是可以哈。但是,问题来了,当你增加或改变营销的一个职能的时候,这个兼职的总经理就不够灵活了,因为他要考虑对行政的影响、对财务的影响,对保安保洁的影响,这个带着严重包袱的总经理总是笨手笨脚。所以请不要太多兼职,尽量遵循SRP,单一职责原则。
O:OCP:开放封闭原则,一个类应该对扩展开放,对修改封闭。这个是动态解决问题的思路,比如一个机器,在运转过程当中,你不要总是尝试去修改机器内部的参数或联动机制,拆开机器去解决问题。如果你先要扩展机器的功能,请先考虑机器的外部因素,比如改变电压、电流,通过改变或扩展它的基类来达到改变它本身的目的。所以,比如汽车的发动机,机器是有结实的外壳,不到大修,不能打开,你可以加加油门、换97#汽油、加合成机油来提升机器的性能。不能轻易改变机器的内部构造,但又必须留足外部接口。
L:LSP:里式替换原则,这个很简单,类的设计尽量遵循这个原则,就是老子能干的事,儿子一定能干。比如辟邪剑谱吧,老林子知道辟邪剑谱的属性和方法,虽然没去尝试修炼呵呵,但小林子不知道,武林同道不知道。以至于灭门,家道败落。林家祖先应该不知道里式替换原则,如果知道,把辟邪剑谱作为接口,开放一个,一个就行:自宫方法。要实现这个接口,欲练此功,必须实现这个方法,必先自宫。估计也不至于遭受灭门之灾了。这个原则,其实是尽量减少不能继承的属性和方法。
I:ISP:接口隔离原则,一个接口应该尽可能的精简。举个例子,去饭店吃饭,点餐需要费用,这个是正常的。可非要给这个接口增加方法,例如碗筷要消毒费、开酒要开瓶费、服务员要小费、去洗手间要进门费,是不是觉得很烦。尽量遵循精简,一次性收费。不要把收费这个接口做的太复杂,要尽可能与其他接口隔离,这样才能保证饭店良好经营。
D:DIP:依赖倒置原则,这个是指进行减少类之间的依赖关系,但要增加类与接口的依赖。就是要求儿子,不要总依赖老子,要靠自己的能力吃饭。去学知识、学技能,自己去实现成功这个接口的方法,不要总模仿、复制别人的,要去依赖成功大道,而不要去依赖个体。

5年前 评论

@老好人 厉害,很会举例子。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!