架构师训练营第二周命题作业

发布于: 4 小时前

1 作业一

请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?

1.1 依赖倒置原则概念

在面向对象程序设计中,依赖倒置原则是一种解耦软件模块的方式。当遵循这个原则时,传统上由高层到低层的依赖关系将会反转,因此高层模块独立于低层模块的实现细节。该原则表述为[1]

  1. 高层模块不应该依赖低层模块。两者应依赖抽象(如接口)。

  2. 抽象不应该依赖细节。细节(具体实现)应依赖抽象。

举例来说,传统设计模式中若对象A依赖对象B。

使用依赖倒置原则可以将这两个对象解耦。将对象A到对象B的依赖转化为对象A到接口A的依赖,然后由对象B来实现接口A中的方法。宏观来看,框架只需要设计好各种接口,低层代码来实现框架预先定义好的接口,框架会按照预先定义好的逻辑调用低层代码,而不是调用框架代码。

1.2 好莱坞原则概念

好莱坞原则出自演员在好莱坞试镜之后,对方说的:“别打过来,我们会打回去(Don’t call us, we’ll call you)”。准确来说,好莱坞原则通常用来指代控制反转(Inversion of Control)[2]。控制反转亦为一软件设计原则,在传统的面向过程的设计中,定制代码(custom code)调用可重用的库。而在控制反转原则下,则是由框架调用定制代码。控制反转原则的一个应用是依赖注入(Dependency Injection)。

1.3 关系

依赖倒置原则与控制反转原则可以认为是一种设计哲学。即反转传统意义上的高层到低层的调用,或是定制代码到库的调用。

2 作业二

请描述一个你熟悉的框架,是如何实现依赖倒置原则的。

2.1 UWP

通用Windows平台(Universal Windows Platform, UWP)是一个应用程序框架,可以使用多种不同语言(C++/CX, C++/WinRT, C#, VB, JS)进行编写,可以方便的编译到不同平台(x86, x64, ARM)。这里以C++/WinRT为设计语言进行介绍。

传统Win32桌面应用程序,需要调用大量Win32 API,如使用CreateWindow创建窗口,使用GetMessage获取窗口消息(window message),当点击按钮时,Win32应用程序要处理相应窗口消息,并根据消息内容调用OnClick函数。整体上来说,编写一个Win32桌面应用程序是需要从主函数开始的一个C++程序,与桌面相关的功能都是通过调用库函数来实现的。

使用UWP则不同,编写UWP应用程序只需实现框架预设的接口。如实现Windows.UI.Xaml.Controls.Page来控制窗口显示内容。UWP框架中的逻辑仅包含关于Page接口的逻辑。在实际运行时,会调用用户实现的相应方法。再如处理按钮时,只需要实现OnClick方法,UWP框架会处理窗口消息并调用用户编写的OnClick方法。

 

2.2 UWP API

UWP API涵盖了诸多Windows系统设置相关的API,相较Win32 API,UWP API可以无缝使用在UWP应用程序中。这里以Windows.UI.ViewManagement.UISettings类中的AutoHideScrollBarsChanged为例进行说明,该事件对应Windows 10中的自动隐藏滚动条功能。

应用程序可以响应这个事件从而使系统设置中的“在 Windows 中自动隐藏滚动条”。应用程序只需要编写事件回调函数,然后将回调函数注册在AutoHideScrollBarsChanged上。

当系统设置中这项设置改变时,在改变设置值的同时,还会发出一条消息。由于应用程序已经注册了回调函数,在应用程序运行时,UWP框架已经调用Windows.UI.dll内的逻辑进行预处理。如同观察者模式一样,在收到消息时,UWP框架会调用应用程序的回调函数。

3 作业三

请用接口隔离原则优化Cache类的设计,画出优化后的类图。

优化前将整个Cache类暴露给应用程序和系统,有可能会导致应用程序误调用reBuild方法而导致服务失效。

优化过的类图如上,将缓存的功能拆分为两个接口ICacheServer和ICacheConfig,将ICacheServer暴露给应用程序,应用程序无法调用reBuild方法,将ICacheConfig暴露给系统,进行相应配置。


[1] Agile Software Development, Robert C. Martin, 2003

[2] Inversion of Control, https://en.wikipedia.org/wiki/Inversion_of_control#Overview, Section Overview, Paragraph 5: Inversion of control is sometimes facetiously referred to as the "Hollywood Principle: Don't call us, we'll call you".

发布于: 4 小时前 阅读数: 4
用户头像

whiter

关注

还未添加个人签名 2020.05.29 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第二周命题作业