>  기사  >  백엔드 개발  >  한 가지를 기대하고 많은 것을 기대하는 객체 리팩터링

한 가지를 기대하고 많은 것을 기대하는 객체 리팩터링

WBOY
WBOY앞으로
2024-02-08 23:39:08381검색

한 가지를 기대하고 많은 것을 기대하는 객체 리팩터링

php editor Yuzai 프로그래밍에서 우리는 객체가 여러 책임을 맡고 싶어하는 상황에 자주 직면합니다. 이런 종류의 객체를 "한 가지를 기대하고 많은 것을 기대하는 객체 리팩토링"이라고 합니다. 이러한 개체는 일반적으로 코드를 비대하게 만들고, 결합도를 높이며, 유지 관리 및 확장의 어려움을 초래합니다. 이 기사에서는 이러한 개체를 더 명확하고 유연하며 유지 관리하기 쉽게 만들기 위해 리팩터링하는 방법을 살펴보겠습니다. 한 번 보자!

질문 내용

Go 코드 베이스를 업데이트하는 중입니다. 우리 회사에는 다양한 데이터 세트 또는 스키마에 게시하고 읽을 수 있는 가상의 DataStore라고 하는 중앙 데이터 저장소가 있습니다. 우리의 특정 코드베이스에는 특정 데이터세트/스키마를 DataStore 구현에 연결하는 일부 코드가 있습니다. 다른(아마도 더 많은) 데이터 세트에 쓸 수 있으려면 이 코드를 리팩터링해야 합니다.

아래 코드에서 dataStoreSchema는 "고객" 데이터와 같은 단일 스키마를 나타냅니다. 하지만 "주문"과 같은 다른 스키마나 작성하려는 다른 필드가 있는 스키마가 있습니다.

transformEventtransformEvent 获取将传递到 DataStore 的数据,并执行一些逻辑来创建 dataStoreSchema로 전달될 데이터를 가져와 몇 가지 로직을 수행하여

개체를 생성한 다음 이를 클라우드의 실제 DataStore에 씁니다.

이 구현이 결합된 스키마뿐만 아니라 데이터 저장소의 잠재적으로 모든

스키마에 쓰고 싶습니다.

으아악

현재 동작은 이렇습니다

으아악

하지만 나도 이런 걸 할 수 있었으면 좋겠어

으아악

또는 Go 용어로 가장 적합한 것은 무엇이든

해결 방법

dataStoreSchema 结构和 transformEvent 方法与特定模式紧密耦合。 transformEvent 方法接受输入并将其转换为 dataStoreSchema제가 올바르게 이해했다면 현재 구현은

구조와 transformEvent 메서드를 통해 특정 모드와 밀접하게 연결되어 있습니다. transformEvent 메소드는 입력을 받아

객체로 변환한 다음 DataStore에 기록합니다.

현재 구현이 연결된 스키마뿐만 아니라 데이터 저장소의 모든 스키마에 쓸 수 있습니다. DataStore 客户端,每个客户端与不同的 schema 和相应的转换函数相关联(transformEvent1transformEvent2transformEvent3 으아악
의미: 다른 DataStore을 만들고 싶습니다.)

이는

구조에서 변환 로직을 분리하여 다양한 변환 기능을 사용하여 다양한 모드를 처리할 수 있음을 의미합니다. ParametersDataStore

인터페이스를 사용하여 다양한 스키마 변환을 수행하고 매개변수

구조를 수정할 수 있습니다. E 和用于架构类型的 S 으아악
Transformer 함수 유형은 이제 두 가지 유형 매개변수로 매개변수화됩니다. ES 이벤트 유형용.
매개변수와 데이터 저장 구조도 동일한 두 유형의 매개변수 E 的事件并返回类型为S를 사용하여 매개변수화됩니다.

DataStore의 변환 이벤트 메소드는 이제

유형의 패턴을 허용합니다. Transformer 函数签名的新函数类型或实例,以及相应的事件和模式结构。您不会定义实现 Transformer 接口的新结构,因为 Transformer
더 많은 패턴을 처리하려면 인터페이스 대신 현재 함수 유형을 준수하는 객체를 정의할 수 있습니다. 따라서 기존 DataStore 구현을 수정하지 않고도 새로운

변환 함수🎜 및 아키텍처 구조를 정의할 수 있습니다. 🎜

위 내용은 한 가지를 기대하고 많은 것을 기대하는 객체 리팩터링의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제