业务逻辑层接口设计

业务逻辑层接口设计

功能

用于提供业务逻辑接口,将业务细分成独立单元。

目标

  • 细分接口,功能内聚
  • 数据私有化,避免线程安全方面的Api调用, 减少因线程安全性方面导致的偶现性问题
  • 屏蔽实现细节,方便配置mock实体,方便编写单元测试
  • 杜绝线程调度,以支持单元测试的运行
  • 模块之间相对独立

原理

业务逻辑层构建业务服务器(BussinessServer)和服务(Service)两个抽象概念。业务服务器承担创建服务对象、各个服务之间相互通讯的中心枢纽等职能。而服务则将功能内聚的接口抽象成独立单元。我们主张将一个功能拆分成各个服务,每个服务只提供单个职能的接口。每个服务实现只做逻辑实现,不做数据存储。接口设计秉承依赖注入的设计思路,各个服务都以接口的形式被相互引用,这样保证了代码的高内聚,低耦合,同时也可以做到实现类可配置的功能,方便编写单元测试或者代码的修改。
原理图如下:
这里写图片描述

接口

Business

业务逻辑层的门面类,提供业务接口。

  • 方法
    • T getService(class<T> className);
      获取制定服务接口T的服务实体对象

IService

服务接口基类,所有服务接口都要继承此类。
* 方法
* long getServiceId()
获取获取实体对象的id。
* init()
初始化接口。
* unint()
反初始化接口 。

Service

IService接口的实现基类,所有业务服务都要继承此类

  • 方法
    • setServer(Server Server)
      设置业务服务器

Server

业务服务器,用来管理各种服务,所有服务都拥有该实体对象,是各种服务相互通信的桥梁。

  • 方法
    • void setServiceBinder(IServiceBinder serviceBinder)
      设置服务绑定器
    • T getService(class<T> className);
      获取制定服务接口T的服务实体对象

IServiceBinder

服务绑定器,用来绑定接口及实现。

  • 方法
    • <T> void bind(Class<T> interfaceCls, Class<? extends T> implCls)
      绑定接口与实现

示例

现在以下载需求为例,用户选择多个平台文件下载到本地。设计类图如下:

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
负责业务逻辑的类都必须实现这个接口业务逻辑类BusinessImpl实现接口Business,BusinessImpl.java的示例代码如下: //******* Business.java************** public class BusinessImpl implement Business { private SaveData db; public void DiSaveDate (SaveData db) { this.db = db; } … //根据注入的存储类,存储数据 public void saveData() { … db.saveData(); … } } 编写测试类TestBusiness,TestBusiness.java的示例代码如下: //******* TestBusiness.java************** public class TestBusiness { private Business business = new BusinessImpl(); … //根据注入的存储类,存储数据 public void opraData() { … business. DiSaveDate (new XMLData()); business. saveData (); … } } 如果要完成依赖关系注入的对象,必须实现Business接口。 构造注入 构造注入是指在接受注入的类中定义一个构造方法,并在参数中定义需要注入的类。 (1)为了让类Business接受XMLData的注入,需要为它定义一个构造方法,来接受XMLData的注入。Business.java的示例代码如下: //******* Business.java************** public class Business { private SaveData db; public Business (SaveData db) { this.db = db; } … //根据注入的存储类,存储数据 public void saveData() { … db.saveData(); … } } (2)编写测试类TestBusiness,TestBusiness.java的示例代码如下: //******* TestBusiness.java************** public class TestBusiness { private Business business = new Business(new XMLData()); … //根据注入的存储类,存储数据 public void opraData() { … business. saveData (); … } } 即通过构造函数来完成依赖注入。 从前面对这三种依赖注入的方式中可以看出:其实所有的依赖注入都离不开抽象的支持,也就是说只有"面向接口编程",才能够实现依赖注入。 读者可能还会有疑惑:虽然具体的存储方式和业务逻辑无关了,可不是还要在调用业务逻辑的类里来改变具体的存储方式吗?这样一来,不是还要改代码吗?看起来面向接口编程也挺简单的,那Spring又为开发人员提供了哪些帮助呢?其实,Spring为开发人员提供了调用业务逻辑类的具体方式,也就是说,Spring不再需要开发人员编写调用具体调用业务逻辑的类,而是通过配置文档来实现对业务逻辑的调用,如果具体的存储方式发生了变化,开发人员只需要改变相应的配置文档即可。
业务、逻辑、数据是应用程序中常见的三架构,也被称为三模型或 MVC 模型。这种架构模式将应用程序分解成三个相互独立的部分,每个部分负责不同的任务和功能,这样可以提高程序的可维护性、可扩展性和可重用性。 1. 业务:负责应用程序业务逻辑处理,包括数据的校验、业务规则的实现、事务的管理、消息的通信和处理等。业务可以调用逻辑和数据接口来实现业务功能。 2. 逻辑:负责处理业务逻辑传递过来的数据,并进行加工处理。逻辑可以调用数据接口来读取或写入数据,并将处理后的数据传递给业务逻辑或表示。 3. 数据:负责应用程序与数据存储系统的交互,包括数据库的连接管理、数据库操作的封装、数据库事务的管理、数据库性能的优化等。数据可以向逻辑业务逻辑提供简单、易用的数据访问接口。 三架构的优点是: 1. 易于维护:将应用程序分成三,每个次都有自己的职责和功能,模块化设计可以更容易地修改、更新和扩展应用程序。 2. 易于重用:每个次都可以被其他应用程序或模块重用,提高了代码的可重用性。 3. 易于测试:三架构分离了不同的职责和功能,可以更容易地对应用程序进行单元测试和集成测试。 总之,业务、逻辑和数据是应用程序中重要的三个次,它们之间通过接口实现了松耦合的关系,实现了代码的高内聚、低耦合的特性,提高了应用程序的可维护性、可扩展性和可重用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值