十几年前有个很火的概念
“信息孤岛”
指的是互相不关联、互相脱节
没有业务和数据流动的多个系统
本来嘛,系统是一个个建立
建设目标不同,使用人员不同
最后就成了孤岛
一旦需要联动、集成
就会遇到各种问题

后来,有了更高级的说法
“信息烟囱”
他比孤岛稍微好了一点
上下是贯通的
但是横向形成了信息壁垒
比如民政的数据
消防的数据
交警的数据
彼此自成体系
在新形势下
各种大数据、一体化平台慢慢兴盛起来
破圈,解决发展的不对称
确保安全可靠的前提下
实现数据共享,业务灵活传递
在编程领域,很早就有一种做法
通过统一的门面
将不同的功能集成在一起
比如我们有两个类
一个提供短信服务
另一个提供邮件服务
就可以采用门面集成
/**
* 邮件服务类
*/
public class MailService{
public void send(String mailfrom, String mailto, String content){}
}
/**
* 短信服务类
*/
public class SmsService{
public void send(String mobile, String msg){}
}
现在使用的时候
需要根据情况选择调用不同的service
但如果采用门面集成一下
就变成了一个类
public class FacadeService{
private MailService mailService=new MailService();
private SmsService smsService=new SmsService();
public void sendMail(String mailfrom, String mailto, String content){
mailService.send(mailfrom, mailto, content);
}
public void sendSms(String mobile, String msg){
smsService.send(mobile, msg);
}
}
这样无论发送什么
都只需要调用 FacadeService 即可
这个代码的难度相当低
初学者也能看的明白
但意义何在?
就是为了包装一层吗?
门面模式的应用场景
通常是降低系统访问的复杂度
将多个复杂的程序整合
然后提供给使用者一个简洁的入口
把上面的例子改一下
假如 MailService 和SmsService 里
各自已经封装了数十个方法和内部属性
而 FacadeService 仍然保持不变
那请问,调用服务的人
让他选择调用2个基础类
和只调用门面类
是不是变得简单了呢?
对于遗产系统
比如用了很多年的、或是其他厂商的遗产
改造的方法通常有四种:
改造、集成、继承、淘汰
一般是根据原系统的价值和技术决定

比如我们用Java开发
原来的系统是 vb 或 dephie 的
这个就很难继承下来
还有的系统虽然能访问
但简直就是代码shit山
看着就恶心
所以我们一般的原则如下:
技术水平高的系统:改造或集成
技术水平低的系统:继承
业务价值高的系统:改造
业务价值低的系统:集成
技术低,业务也低的话就要淘汰
大家都用过微信
可以简单的认为
小程序走的就是集成的模式
根据入参的不同,提供大量的应用
而作为用户,只需要一个微信号就可以

这几年微信的野心很大
作为群众基础最庞大的生态
小程序的应用,实际上让微信成了最大的系统入口
无论是用户授权,OAuth,扫码登录,一键登录等等
让众多的应用放在一个统一的平台里
为什么很多人手里的app存活量少?
一是很多低质量的厂商自己作死
广告、消费陷阱等等
另一方面也是空间和代价的考量
现在让一个新用户安装软件
成本基本上在10-20元
诸位都见过滴滴、饿了么、拼多多拉新人有多疯狂
所以这种集成模式
其实还是对用户比较友好的
化繁为简
很多细节无需知道
好用就行了
我们最常见的Spring Boot
启动类里都有这么一段:
@SpringBootApplication
public class DemoSvrApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(DemoSvrApplication.class, args);
}
}
不知道有多人去研究过这个 SpringApplication.run();
这里面就封装了大量细节
包括创建bean容器、初始化bean工厂、上下文设置、监听启动
我们启动的时候控制台显示的一堆日志
就是在隐式的做了大量工作的体现
所以,如果您有以下的需要:
这些情况下,就可以考虑使用Facade门面模式