自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

圖解設(shè)計(jì)模式:身份認(rèn)證場(chǎng)景的應(yīng)用

開(kāi)發(fā) 前端
在整個(gè)塊認(rèn)證流程中,我們會(huì)講解三種設(shè)計(jì)模式,按照順序分別是策略、責(zé)任鏈、模板模式。

設(shè)計(jì)模式今天和大家聊一聊,如何合理的將多種設(shè)計(jì)模式放到同一個(gè)業(yè)務(wù)場(chǎng)景中

業(yè)務(wù)背景

最近接到一個(gè)認(rèn)證的需求,C 端用戶在購(gòu)買(mǎi)公司保險(xiǎn)時(shí),需要先進(jìn)行 實(shí)名認(rèn)證確認(rèn)身份

為了保證 業(yè)務(wù)復(fù)用,單獨(dú)將認(rèn)證的邏輯拆分為微服務(wù)模塊

C 端用戶下單購(gòu)買(mǎi)保險(xiǎn)的邏輯大致如下

先說(shuō)下關(guān)于認(rèn)證相關(guān)的一些基本知識(shí)。簡(jiǎn)單來(lái)說(shuō),你如何證明你是你自己

一些云服務(wù)廠商都會(huì)有關(guān)于驗(yàn)證身份的付費(fèi)接口,接下來(lái)我們就以騰訊云姓名、身份證二要素認(rèn)證為參考進(jìn)行舉例

說(shuō)完認(rèn)證知識(shí),我們?cè)賮?lái)拆解下用戶購(gòu)買(mǎi)保險(xiǎn)的步驟

  • 用戶在前端發(fā)起認(rèn)證行為
  • 請(qǐng)求經(jīng)過(guò)網(wǎng)關(guān)調(diào)用保險(xiǎn)服務(wù),保險(xiǎn)服務(wù)調(diào)用認(rèn)證服務(wù)
  • 認(rèn)證服務(wù)調(diào)用騰訊云認(rèn)證付費(fèi) API,返回認(rèn)證結(jié)果信息

認(rèn)證流程

在整個(gè)塊認(rèn)證流程中,我們會(huì)講解三種設(shè)計(jì)模式,按照順序分別是策略、責(zé)任鏈、模板模式

策略模式

定義一組算法類,將每個(gè)算法分別封裝起來(lái),讓它們可以互相替換。策略模式使這些算法在客戶端調(diào)用它們的時(shí)候能夠互不影響地變化,客戶端代指使用算法的代碼

我們拿認(rèn)證來(lái)說(shuō),定義一個(gè)認(rèn)證接口,然后實(shí)現(xiàn)二、三、四要素以及人臉識(shí)別實(shí)現(xiàn);將這些實(shí)現(xiàn)類放到一個(gè) Map 容器中,并和業(yè)務(wù)規(guī)定好對(duì)應(yīng)的標(biāo)識(shí) Key,通過(guò)標(biāo)識(shí) Key 獲取對(duì)應(yīng)的認(rèn)證策略實(shí)現(xiàn)

如果真的像上面這么簡(jiǎn)單,if-else 判斷加上拆解幾個(gè)認(rèn)證函數(shù)就可以搞得定,還真的不一定需要策略模式

我們?cè)傺由靵?lái)看一種復(fù)雜場(chǎng)景:假設(shè)后續(xù)不滿足于騰訊云的認(rèn)證,為了保證可用性以及更多的流量,需要對(duì)接更多的認(rèn)證平臺(tái)

可用性:平臺(tái)的接口不太可能保證全年百分百可用,需要有容災(zāi)降級(jí)或者替換方案

更多的流量:騰訊云認(rèn)證接口限流 100次 / S

這個(gè)時(shí)候策略模式的優(yōu)點(diǎn)就體現(xiàn)出來(lái)了,簡(jiǎn)化代碼的復(fù)雜性 以及 保證開(kāi)閉原則,增加程序的健壯性以及可擴(kuò)展性

后續(xù)再增加三方認(rèn)證平臺(tái)和認(rèn)證方式,都不需要改動(dòng)原有邏輯,添加對(duì)應(yīng)實(shí)現(xiàn)即可

責(zé)任鏈模式

在責(zé)任鏈模式中,多個(gè)處理器(參照攔截器)依次處理同一個(gè)請(qǐng)求。一個(gè)請(qǐng)求先經(jīng)過(guò) A 處理器處理,然后再把請(qǐng)求傳遞給 B 處理器,B 處理器處理完后再傳遞給 C 處理器,以此類推,形成一個(gè)鏈條,鏈條上的每個(gè)處理器 各自承擔(dān)各自的處理職責(zé)

這里主要將責(zé)任鏈模式應(yīng)用于,規(guī)避無(wú)意義調(diào)用三方認(rèn)證服務(wù)

已認(rèn)證過(guò)的人員信息,在有效期內(nèi)沒(méi)必要再次調(diào)用

調(diào)用認(rèn)證結(jié)果錯(cuò)誤,依然會(huì)扣錢(qián),比如說(shuō)名稱中包含非中文,身份證格式錯(cuò)誤等等

我們可以將處理器盡量職責(zé)單一,方便后續(xù)其它認(rèn)證方式的 復(fù)用和編排

模板方法

模板方法模式在一個(gè)方法中定義一個(gè) 算法骨架,并將某些步驟推遲到 子類中實(shí)現(xiàn)。模板方法模式可以讓子類在 不改變算法整體結(jié)構(gòu)的情況下,重新定義算法中的某些步驟

模版方法主要作用:復(fù)用性 和 擴(kuò)展性

  • 復(fù)用性:核心思想就是 父級(jí)定義公共實(shí)現(xiàn),由子級(jí)進(jìn)行調(diào)取使用
  • 擴(kuò)展性:在不修改方法邏輯的前提下,變更其中的某些步驟

通俗來(lái)講 : 定義一個(gè)抽象類AbstractTemplate,并定義一個(gè)或若干抽象方法 abstractMethod。代碼大致如下:

public abstract class AbstractAuthenticationService<T extends AuthenticationRequest> {

void before(T request) {
}

void after(T request) {
}

// 抽象方法
protected abstract void practicalExecute(T request);

public void authentication(T request) {
// 前置攔截操作,包括不限于責(zé)任鏈模式調(diào)用
before(request);
// 策略模式實(shí)現(xiàn),調(diào)用具體認(rèn)證類,比如二要素認(rèn)證或三要素認(rèn)證
practicalExecute(request);
// 資源清理或記錄認(rèn)證完成信息
after(request);
}

騰訊云二要素認(rèn)證實(shí)現(xiàn)類,代碼如下:

@Slf4j
@Component
@RequiredArgsConstructor
// BaseAuthenticationStrategy 是策略模式實(shí)現(xiàn),定義了 mark、execute 方法
public class NameIdCardAuthenticationByTencentResolver extends AbstractAuthenticationService<NameIdCardAuthenticationReqDTO>
implements BaseAuthenticationStrategy<NameIdCardAuthenticationReqDTO> {

private static final String SUCCESS = "0";

// 責(zé)任鏈容器
private final NameIdCardHandlerChain nameIdCardHandlerChain;

@Override
public String mark() {
return AuthenticationEnum.TENCENT.name();
}

@Override
public void execute(NameIdCardAuthenticationReqDTO request) {
authentication(request);
}

@Override
public void before(NameIdCardAuthenticationReqDTO request) {
// 責(zé)任鏈調(diào)用
nameIdCardHandlerChain.doFilter(request);
}

@Override
public void practicalExecute(NameIdCardAuthenticationReqDTO request) {
// 騰訊云二要素認(rèn)證具體行為
}

}

最后總結(jié)

拋出一個(gè)老生常談的問(wèn)題,學(xué)習(xí)設(shè)計(jì)模式有什么作用?

設(shè)計(jì)模式主要是為了應(yīng)對(duì) 代碼的復(fù)雜性,讓其滿足 開(kāi)閉原則,提高代碼的 擴(kuò)展性;合適的場(chǎng)景合理運(yùn)用的設(shè)計(jì)模式,可以幫助代碼實(shí)現(xiàn) 高內(nèi)聚、低耦合 等的優(yōu)點(diǎn)

你無(wú)法決定別人的代碼,但你可以決定自己的。時(shí)間充足的情況下,盡量以重構(gòu)的方式去寫(xiě)每一行代碼

因?yàn)槠鶈?wèn)題,沒(méi)有大張旗鼓講設(shè)計(jì)模式本身,提供大家一個(gè)學(xué)習(xí)鏈接:https://github.com/acmenlt/framework

最后希望小伙伴讀過(guò)文章后有所收獲,祝好。


責(zé)任編輯:武曉燕 來(lái)源: 龍臺(tái)的技術(shù)筆記
相關(guān)推薦

2021-04-27 08:31:10

前端應(yīng)用場(chǎng)景

2020-10-09 06:52:31

設(shè)計(jì)模式軟件

2020-02-25 22:08:02

ZooKeeper典型應(yīng)用場(chǎng)景

2025-02-10 08:30:00

JavaScrip開(kāi)發(fā)設(shè)計(jì)模式

2021-08-16 17:15:19

設(shè)計(jì)模式Android適配器模式

2013-03-28 13:08:15

Web緩存

2012-11-28 09:55:35

2009-06-25 15:54:18

設(shè)計(jì)模式EJB

2023-08-29 08:47:13

設(shè)計(jì)模式Springboot

2018-07-05 14:52:05

2010-09-03 09:19:13

PPP身份認(rèn)證

2011-03-30 13:21:17

2014-04-22 10:15:38

vCenter SSO身份認(rèn)證

2021-07-28 08:31:25

設(shè)計(jì)系統(tǒng)應(yīng)用

2009-07-08 09:32:25

Java設(shè)計(jì)模式

2013-04-08 09:35:08

云應(yīng)用訪問(wèn)身份認(rèn)證管理云應(yīng)用

2021-09-13 10:20:43

加密貨幣身份認(rèn)證身份認(rèn)證應(yīng)用

2013-06-19 09:46:57

身份認(rèn)證管理云應(yīng)用

2013-06-18 19:23:16

身份認(rèn)證管理身份認(rèn)證管理系統(tǒng)身份認(rèn)證

2022-01-17 09:00:00

漏洞網(wǎng)絡(luò)安全身份認(rèn)證
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)