Java项目的 接口-实现 写法真有必要吗

本文讨论在内部系统开发中,传统的MVC架构和服务接口的使用是否必要。作者提出,对于简单的业务逻辑,直接在Controller处理或者去掉Service接口可能会更简洁高效。同时,思考了后台直接使用JSON进行数据处理的可能性,并引用了Latke框架作为例子,倡导开发者在埋头工作的同时,也要多思考业务场景和解决方案。
摘要由CSDN通过智能技术生成

习惯的日常

由于经常做内部系统,所以只讨论在开发内部系统的范围。

经典的MVC架构,经典的Spring、MyBatis 组合,开发内部系统已经是成熟的套路了,不需要思考:

  • Controller 接收用户请求
  • Service 接口处理用户逻辑
  • Service 实现真正处理逻辑,用各种Dao来操作数据库。
  • MyBatis 生成各种xml,或者根据需要特别写SQL

然而,这个过程使用久了,觉得就应该是这么写的,但是为什么非要这么写呢?

接口的本意和实际使用

软件工程,有很多思想确实很好,面向接口编程,接口和实现分离,开闭原则,高内聚,低耦合,我们使用接口,就是方便扩展、更换接口实现更方便,这样的话接口不需要变动,对客户端来说是无影响的。我承认在duboo这类框架里这么做是有必要的,但是对于开发内部系统, 我们面对最多的就是业务处理,Controller接收用户请求,然后在对应的Service里处理,如果我们因为业务变动或bug等,我们要么直接写一个方法,或者在原来方法上进行调整,当然如果使用了设计模式,有些确实需要接口,但是对于很多业务处理,不需要搞复杂的模式,既然接口在这里用处并不如期望的那样,那么为何不去掉,直接注入Service实现?

在Controller里做逻辑处理

更有甚者,在Controller 里做各种逻辑处理,

负责业务逻辑的类都必须实现这个接口,业务逻辑类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不再需要开发人员编调用具体调用业务逻辑的类,而是通过配置文档来实现对业务逻辑的调用,如果具体的存储方式发生了变化,开发人员只需要改变相应的配置文档即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值