spring-boot下如何满足多生产环境中个性化定制功能

本文探讨了在Spring Boot项目中如何避免通过复制代码来满足不同环境的个性化需求,提出了一种结合策略模式和工厂模式的解决方案。通过动态创建服务BEAN,根据访问者的国家代码返回相应语言的问候,确保在新增需求时不需要修改核心代码,提高代码的可维护性。
摘要由CSDN通过智能技术生成

在项目的开发中,我们很难做到开发一套标准的流程来解决所有客户的需求。比如,我们当前的计量项目,分别运行于赤峰市和河北省。虽然两个区域处理的业务相同,但是对细节的实现要求却不同。前面也学习过计量检定软件,其为了解决各个定制者使用的功能需求,最后采取的方案是:将基础项目复制多份,进而满足不同的客户需求。优点当然是有的,但比起缺点来,优点便不值一提。缺点很明显,总结为一句话就是:项目变得难以维护。所以,当前让我们看到的就是,几个开发人员,每天处于解决问题当中。本文将给出一种方案,来有效的规避上述问题。

资源与环境

开发环境:java1.8 + spring-boot:2.1.3.RELEASE

需求假设

  • 假设使用本项目的人员为:中国人、美国人,分别能接受的语言为中文和英文。
  • 项目运行后,可以根据当前的访问人员是国籍来动态显示: 你好 或 hello
  • 有新的需求后,比如:增加德国人并显示 Hallo 。增加功能时,不更改核心代码。
  • 不使用if else

注意:如果你看完需求假设后,毫无触动,请忽略本文以下内容

解决方案

解决方案中,我们涉及了两种设计模块,分别为: 策略模式 及 工厂模式 。

策略模式:一般用于将具体的 算法 进行抽象及剥离。此项目中,我们的具体算法是 说你好 。

工厂模式:一般用于根据环境来动态的创建BEAN的情况下。引项目中,我们将根据不同国家的人,来返回不同的 说你好 这个算法。

先给出UML图:

 

 

 

 

 

SpeakService

SpeakService 即为我们供其它模块调用的 说话服务 ,调用其中的 SayHello() 来完成 说你好功能。

package com.mengyunzhi.demo.dynamicautowire;
/**
 * 你好
 */
public interface SpeakService {
    void sayHello();
}

在其实现类中,我们注入 SayHelloFactory ,让其来返回正确的 SayHelloService ,最终调用 sayHello() 来完成目标。

package com.mengyunzhi.demo.dynamicautowire;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * 你好
 */
@Servi
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值