자바 스크립트 디자인 패턴 (3)-프록시 모델

  프록시 모드는 개체에 대한 액세스를 제어하기 위해 개체에 대한 대체 또는 자리 표시자를 제공하는 것입니다. 

  사람들이 말하는 것은 : 테이크 아웃을 먹고 싶다면 테이크 아웃을받을 수 있도록 라이더를 매장에 맡깁니다.

  대행사 모델의 핵심은 프로세스를 풍부하게하고 결과는 변하지 않습니다 .

  테이크 아웃의 예를 들어 보자. 나는 테이크 아웃을 먹고 싶다.이 사건의 시작은 나이다.이 사건의 결과는 테이크 아웃을 먹는 것이다.

  프로세스 강화 :

  테이크 아웃을 먹고 싶어요 APP에서 주문을하고 라이더가 테이크 아웃을 사러 가게에 갔고 라이더가 테이크 아웃을 나에게 배달하고 테이크 아웃을 먹습니다.

  프로세스 강화 :

  테이크 아웃을 먹고 싶어요. APP에서 주문을 했어요. 라이더가 테이크 아웃을 사러 가게에 갔어요. 가게에서 오늘 재고가 없어서 영업을 안한다고 했어요. 라이더가 우리 집에 와서 음식이 너무 부끄럽다 고 말 했어요!

 

  위의 예제를 먼저 코드에 작성하고 핵심 부분을 먼저 작성해 보겠습니다.

let I = {
	getWaimai:function(name){
		return store.cookingWaimai(name)
	}
}

let store = {
	cookingWaimai:function(name){
		return cooking[name]()
	}
}

let cooking = {
	'花雕怪味鱼':function(){
		//劈里啪啦一顿操作
		return '花雕怪味鱼成品'
	},
	'无蛋黄':function(){
		//劈里啪啦一顿操作
		return '无蛋黄成品'
	}
}

I.getWaimai('花雕怪味鱼') //花雕怪味鱼成品

  위의 코드에는 두 개의 주제 객체가 있는데 하나는 나이고 다른 하나는 가맹점입니다. 내가 테이크 아웃 요청을 매장으로 직접 보낼 수 있습니다. 내가 매장에 가서 테이크 아웃을 주문하고, 판매자가 직접 테이크 아웃을 가져 오세요.

  나와 상인 사이에 이제 라이더를 추가합니다. 코드는 어떻게 생겼습니까?

let I = {
	getWaimai:function(name){
		return qishou.cookingWaimai(name)
	}
}

let qishou = {
	cookingWaimai:function(name){
		// 先去店里拿外卖
		// 此处省略一万行代码
		// 再送到顾客手里
		return store.cookingWaimai(name)
	}
}

let store = {
	cookingWaimai:function(name){
		return cooking[name]()
	}
}

let cooking = {
	'花雕怪味鱼':function(){
		//劈里啪啦一顿操作
		return '花雕怪味鱼成品'
	},
	'无蛋黄':function(){
		//劈里啪啦一顿操作
		return '无蛋黄成品'
	}
}

I.getWaimai('花雕怪味鱼') //花雕怪味鱼成品

  여기서는 store.cookingWaimai ()의 결과를 택배 직원에게 맡기고 기수가 음식을 가져가는 과정과 음식을 배달하는 과정은 생략했습니다. 이런 식으로 작성하면 어떤 이점이 있습니까?

  1. 테이크 아웃을 도와 줄 사람을 맡길 수 있습니다. 오늘 배고픈 라이더입니까? 내일 Meituan 라이더가 될 것입니다. getWaimai 기능의 작은 세부 사항 만 변경하면됩니다. .

  2. 라이더는 본인이 직접 매장에 가지 않고도 매장 정보를 전달할 수 있습니다. 예를 들어, 오늘 주말에 라이더가 주말에 영업을하지 않는다는 사실을 직접 알려 주어 테이크 아웃 요청을 걸러 낼 수 있습니다. .

 

  실제로 에이전시 모델의 가장 큰 장점은 언제든지 특정 비즈니스 로직을 수정할 수 있고 결과가 올바른지 확인할 수 있다는 것입니다. 일반적인 코드를 살펴 보겠습니다.

function init(){
	// 调用一大堆接口...
	// 整合业务逻辑...
	// 渲染页面...
}

function change(){
	// 修改了页面里某个东西
	init()
}

  실제로 init 함수에서 인터페이스 호출 및 비즈니스 로직 처리의 99 %가 반복됩니다. 특정 값만 변경하고이 값과 관련된 일부 페이지 정보를 업데이트하려고합니다. 이때 프록시 모드를 사용하여 초기화를 제어 할 수 있습니다. 함수에서 업데이트해야하는 인터페이스와 실행해야하는 비즈니스 코드 다음과 같이

// 用锁的概念来判断哪些业务代码需要执行
function init(lock1,lock2,lock3)
	// 调用一大堆接口...
	// 整合业务逻辑...
	// 渲染页面...
}

function change(){
	// 修改了页面里某个东西
	daili()
}

function daili(){
	// 写一大堆条件判断
	init(lock1,lock2,lock3)
}

  코드를 다시 작성한 후 언젠가 잠금 중 하나가 실패하는 경우 (또는 코드 유지 관리를 돕는 사람이 작성한 코드를 이해할 수없는 경우) 잠금을 직접 작성하기 만하면됩니다 (true 또는 false). 정확한 결과를 보장하기 위해 변경 함수에서 직접 init (true, true, true)를 호출 할 수도 있습니다.

추천

출처blog.csdn.net/dkr380205984/article/details/108622878