把好莱坞(us)看成是框架的主体(电影编剧、导演、拍摄),you其实就是具体的演员(演员在电影中所做的事情就是扮演某个角色做某件或某一些事情)。作为框架来说,框架决定了整个电影的主线(故事发生的时序、场景先后的安排),在拍摄某个场景时,需要一个演员来扮演某个角色做一件或一些事情时,剧组可以找某个确定的演员,也可以通过海选来选一个角色,这样对剧组而言,机动性更强,如果因为一些不可抗力的原因,导致原定的人选不能按约定扮演之前确定好的角色,此时,剧组只需要再找一个合适的演员来替代之前的演员即可(We'll call you, when we need you.)。
问题:请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
答:
依赖倒置原则(
DIP
),是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖抽象。抽象不应该依赖细节,细节依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并且还能降低修改程序代码所造成的风险。总的来说,在拿到需求之后,应该要面向接口编程,先做顶层设计,再细节地设计代码结构。
好莱坞原则:
Don't call us, we'll call you.
把好莱坞(
us
)看成是框架的主体(电影编剧、导演、拍摄),you
其实就是具体的演员(演员在电影中所做的事情就是扮演某个角色做某件或某一些事情)。作为框架来说,框架决定了整个电影的主线(故事发生的时序、场景先后的安排),在拍摄某个场景时,需要一个演员来扮演某个角色做一件或一些事情时,剧组可以找某个确定的演员,也可以通过海选来选一个角色,这样对剧组而言,机动性更强,如果因为一些不可抗力的原因,导致原定的人选不能按约定扮演之前确定好的角色,此时,剧组只需要再找一个合适的演员来替代之前的演员即可(We'll call you, when we need you.
)。上面的场景与依赖倒置原则的效果异曲同工,要框架的主流程设计中,不应该被某个或某些细节给绑死,否则,在将来的场景发生变化时,需要修改框架的主体,一方面这种可维护性被降低了,另一方面修改框架主体所带来的风险是巨大的;所以作为架构的设计者,应试更关注顶层设计,把细节的实现空出来给具体的使用者去实现,框架的主体设计者可以给出一些常见场景的默认实现,但应该平等对待第三方的实现(使用者自己的实现),且支持使用者方便的替换默认实现。