软件设计原则作业

用户头像
行下一首歌
关注
发布于: 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);
}



@Service
public 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);
}
}



@Service
public 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 日 阅读数: 45
用户头像

行下一首歌

关注

还未添加个人签名 2017.10.30 加入

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

评论

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