写点什么

软件设计原则作业

发布于: 2020 年 06 月 18 日
软件设计原则作业

作业一

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

答:依赖倒置原则它描述了以下三件事:

  1. 高层模块不应该依赖低层模块,两者都应该依赖抽象类;

  2. 抽象也不应该依赖细节,细节应该依赖抽象;

  3. 依赖倒置原则的中心思想是面向接口编程,实现方法是策略模式。

所谓的好莱坞原则就是:Don't call me,I'll call you,核心也是高层不需要依赖低层设计,对于好莱坞来说,它需要的是一个符合条件的演员,至于演员具体是谁,开机的时候才知道。

作业二

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

@RestController@RequestMapping(value = "/order")public class OrderController{	  @Resource  private OrderService orderService;    @PostMapping(value = "/") 	public ServerResonse<String> createOrder(@RequestBody OrderReq orderReq){  	return orderService.create(orderReq);  }}
复制代码


public interface OrderService{	ServerResponse<String> create(OrderReq orderReq);}
复制代码


@Servicepublic class OrderServerImpl implements OrderService{    @Resource  private OrderMapper orderMapper;  	@Override  public ServerResponse<String> create(OrderReq orderReq){  	orderMapper.insert(orderReq);    ServerResponse.createSuccessMessage(orderReq.getOrderId);  }
复制代码


public interface OrderMapper{	void insert(OrderReq orderReq);}
复制代码


@Repostiory(value = "mybatisOrderMapper")public class MybatisOrderMapper implements OrderMapper{		  	@Resource    private SqlSession SqlSession;      @Override    public void insert(OrderReq orderReq){        sqlSession.insert(orderReq);    }
}
复制代码


以上就是我们使用 Spring 框架来处理一个业务的步骤,从 Controller->Service->Mapper(Dao),其中使用了两个接口来使得高层模块与低层模块解耦,也就是说 OrderController 和 OrderServiceImol 都依赖于各自的抽象,这样使得我们的代码符合了依赖倒置原则,至少满足了面向接口编程。

那 Spring 是如何来满足我们这样的设计的呢?我们通过给我们的实现类标记 @Controller、@Service、@Repostiory 这三类注解,Spring 会将其初始化并配置到 BeanFactory 中——其实就是一个 HashMap 对象中,key 是 Bean 的名称,value 是对象的实例。再通过 @Resource 注解标记到依赖的接口上,Spring 就通过 byType or byName 的方式,获取到这个接口的具体实现。

假如说,我们现在想用 Hibernate 来做持久化工作,在当前的代码设计下,我们只需要另写一个 OrderMapper 的实现类,上层的代码基本不需要改变。

@Repostiory(value = "hibenateOrderMapper")public class HibenateOrderMapper implements OrderMapper{		  	@Resource    private HibenateSqlSession hibenateSqlSession;      @Override    public void insert(OrderReq orderReq){        hibenateSqlSession.insert(orderReq);    }
}
复制代码


@Servicepublic class OrderServerImpl implements OrderService{    @Resource(name = "hibenateOrderMapper")  private OrderMapper orderMapper;  	@Override  public ServerResponse<String> create(OrderReq orderReq){  	orderMapper.insert(orderReq);    ServerResponse.createSuccessMessage(orderReq.getOrderId);  }
复制代码


作业三

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


发布于: 2020 年 06 月 18 日阅读数: 68
用户头像

还未添加个人签名 2017.10.30 加入

半壁山房待明月,一盏清茗酬知音。

评论

发布
暂无评论
软件设计原则作业