架构师训练营第二周【作业】

发布于: 2020 年 06 月 17 日

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

依赖倒置原则:高层模块不应该依赖低层模块。高层模块和低层模块应该通过抽象来互相依赖。除此之外,抽象不要依赖具体实现细节,具体实现细节依赖抽象。

好莱坞原则是用在系统的高层组件与底层组件之间。高层组件不应该直接调用底层组件,而是从容器获取。两者都强调了在程序调用链上高层模块不应该依赖低层模块。

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

以PHP里的Laravel框架为例。Laravel 通过服务容器实现了类的依赖以及依赖注入,服务容器是Laravel的核心,在Laravel框架加载的过程中,首先就进行服务容器的实例化,接下来调用系统和用户定义的服务器提供者,服务提供者向服务容器注册类的实现。在程序执行过程中,通过依赖注入的方式调用类的具体实现,而不需要程序自己实例化类,以下面一段代码为例,UserController 需要获取用户信息,Laravel 为程序自动注入了UserRepository 的实现,UserRepository 的实现可以灵活的切换各种实现方式和数据源,这是程序的调用处不需要关注的。

<?php
namespace App\Http\Controllers;
use App\User;
use App\Repositories\UserRepository;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* 用户存储库的实现。
*
* @var UserRepository
*/
protected $users;
/**
* 创建新的控制器实例。
*
* @param UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
$this->users = $users;
}
/**
* 显示指定用户的信息。
*
* @param int $id
* @return Response
*/
public function show($id)
{
$user = $this->users->find($id);
return view('user.profile', ['user' => $user]);
}
}

三、请用接口隔离原则优化 Cahe 类的设计,画出优化后的类图

用户头像

atlasman

关注

还未添加个人签名 2018.04.24 加入

还未添加个人简介

评论

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