Service层是整个web系统的负责业务逻辑一块,最有必要实现抽象,Service层要达到复用性,低耦合性。那么该如何抽象呢?一般遵循以下原则

1、单一职责(SRP)

2、开放-封闭(OCP)

3、里氏代换(LSP)

  把父类都替换成它的子类,程序的行为没有变化。简单地说,子类型必须能够替换掉它们的父类型。只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。参见下面的代码:

  动物* animal = new 狗();

      animal->吃();

      animal->喝();

      animal->叫();

如果需求发生变化,需要将“狗”更换成别的动物,只需要更改第一句即可,其它地方无需改变。这就是“面向接口编程”的好处。

4、依赖倒置(DIP)

  依赖倒置,其实就是谁也不要依靠谁:除了约定的接口,大家都可以灵活自如。由于有了里氏代换原则,才使得开放-封闭成为了可能。依赖倒置,其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之就是过程化的设计。

  解释:抽象不应该依赖细节,细节应该依赖抽象。

  白话一点:针对接口编程,不要对实现编程。面向过程开发的问题:为了使得常用代码可以复用,通常将常用代码写成函数库。这就是“高层模块依赖低层模块”。然而在做新项目时,发现业务逻辑的高层模块都是一样的,但客户却希望使用不同的数据库或存储信息方式,导致我们无法复用高层模块(因为它们和底层函数库绑在一起了)。

5、接口隔离(ISP)

转载于:https://www.cnblogs.com/daxiang2008/p/7489847.html

Service层抽象规范相关推荐

  1. 框架学习(1)——service层,dao层和service实现类进行数据库操作

    最近也是比较忙,也只能忙里偷闲地抓紧时间接着学习一下技术,自从上次学习了maven之后,越来越对框架产生了兴趣,下了好多的spring视屏,听着老师的建议,最近也萌生了看别人的代码进行学习的想法,然后 ...

  2. springboot 注册dao层 service 层的三种方式,高级内容详解

    可以使用三种注解来引入DAO层的接口到spring容器中. 1.@Mapper,写在每一个DAO层接口上,如下: 2.@MapperScan和@ComponentScan两者之一.前者的意义是将指定包 ...

  3. 讨论:Service层需要接口吗?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 链接:toutiao.com/i6882356844245 ...

  4. 在 Java Web 项目中,Service 层和 Dao 层真的有必要每个类都加上接口吗

    作者 l 会点代码的大叔(CodeDaShu) 很多程序员在刚开始工作的时候,接触到的项目都是这样做的:项目的代码被分成 Controller.Service.Dao 层,一个接口对应一个实现类,然后 ...

  5. Java Web学习总结(30)——Service层在MVC框架中的意义和职责

    mvc框架由model,view,controller组成,执行流程一般是:在controller访问model获取数据,通过view渲染页面. mvc模式是web开发中的基础模式,采用的是分层设计, ...

  6. MIna框架I/O Service层设计

    Mina从2.0版本以后,它的设计让人感觉到非常的优雅.它对网络应用通信框架的3个层进行了更好的抽象,以及在功能逻辑上的划分,同时又保证了 作为一个网络应用通信框架的统一.划分的3个层分别为: I/O ...

  7. 实战SSM_O2O商铺_10【商铺注册】Service层的实现

    文章目录 概述 ShopService开发步骤 Service层接口类ShopService Service层接口实现类ShopServiceImpl ShopOperationException 单 ...

  8. service 层注入不同的数据源_.NET 理论基础+实战控制台程序实现AutoFac注入

    (给DotNet加星标,提升.Net技能) 转自:在7楼 cnblogs.com/RayWang/p/11128554.html 简介 该系列共5篇文章,旨在以实战模式,在.NET下的 控制台程序 F ...

  9. service 层 拼接的html 代码如何直接返回_代码分层的设计之道

    分层思想,是应用系统最常见的一种架构模式,我们会将系统横向切割,根据业务职责划分.MVC 三层架构就是非常典型架构模式,划分的目的是规划软件系统的逻辑结构便于开发维护.MVC:英文即 Model-Vi ...

  10. [java基础] --- java开发,service层是不是一定要写接口

    估计很多java开发的同学都遇到过,service层要写一个接口,然后再写接口的实现类,但这个接口从项目开始到项目倒闭,都不会有第二个实现,那为什么不直接写个service类呢?如果你还没想过这个问题 ...

最新文章

  1. 如何删除UITableView中的空单元格? [重复]
  2. CodeIgniter中的FCKeditor的路径问题
  3. HTML5和Intersection Observer的响应式图像优化简介
  4. 毕设日志5.12凌晨
  5. varnish02 代理多台后端服务器
  6. 【Gym-100085 K】Kingdom Roadmap【树上构造题】
  7. wifi 协议栈的历史的总结
  8. 使用Setup Factory把java应用打包成安装软件并更改默认安装路径
  9. 如何使用dd工具进行磁盘读写性能测试
  10. Tuxera2022Mac系统读写NTFS磁盘工具装机必备
  11. 模型调参(一):weight decay(权重衰减)【“权重衰减”也叫“L1/L2正则化”】【权重衰减系数:正则项系数 λ】【对参数w有影响、对偏置b没影响】【偏置不加正则】
  12. UI自动化测试神器->Cypress
  13. erp系统用MySQL吗_如何给ERP系统选择合适的数据库?
  14. 华为服务器串口修改密码,huawei恢复Console口密码
  15. Java基础知识英文选择题1——Basic of Java Programs.
  16. 苹果电脑打开wps云文档方法
  17. 深度学习,误检率,漏检率计算
  18. java 获取post_获取POST数据的值
  19. Mysql Workbench汉化
  20. 整数划分的递归实现算法c语言,整数划分算法原理与实现

热门文章

  1. html5晋级之路-学习笔记表单
  2. Gamvas Web 0.8.4 发布,JavaScript 游戏引擎
  3. 给DateField和DateChooser进行汉化
  4. 选择符/选择器 深入了解 全面的选择器学习
  5. JDK 8.0 新特性——接口默认方法与静态方法
  6. C# 在winform中如何为按钮设置快捷键( F1)
  7. 解决LINQ to Entities does not recognize the method 'System.String Encrypt(System.String)' method, and
  8. Protocol Buffer 序列化原理大揭秘
  9. 将两个数组首尾相连c语言,一个百度笔试中的首尾相连的珠子问题解法
  10. : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versi