Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 지팍스페인
- 크로아티아
- Cocoapods #PrivateRepo #SpecRepo
- 그라나다
- 도심공항
- 라이브러리
- 스플리트
- Gradle
- Swift #Concurrency #쓰레드
- 푸켓여행
- 괌 자유여행
- 시밀란
- cocoapod
- Device 등록
- 강릉
- SwiftUI #Skeleton #데이터갱신
- 연금저축펀드
- 공기먹는다이버스
- 러브자그레브
- Concurrency #Swift #Combine
- 스쿠버다이빙
- 아시아나
- 대한항공
- 스페인광장
- 스페인여행
- 세비야
- 리브어보드
- swiftUI
- xcode
- 러브스플리트
Archives
- Today
- Total
JEP's Diary
모듈화 그리고 팩토리패턴 본문
클레이튼 기반으로 개발된 Wallet 앱에 이더리움 체인이나 다른 체인을 추가 하기 위한 모듈화 작업을 진행 중이다.
러프하게 생각했을때는 아래와 같은 흐름으로 설계했다.
Module level
1. 공통 동작 정의
- 기축통화를 전송한다.
- 토큰을 전송한다.
- NFT를 전송한다.
- 메시지 서명을 한다.
- 잔액을 조회한다. 등등
각 체인에서의 동작들을 interface에 정의한다.
public interface Chain {
void sendCoin()
void sendToken()
void sendNFT()
...
}
2. 체인별로 interface를 implements 해서 공통 동작에 대한 내용을 구현한다.
- '기축통화를 전송한다'의 동작에 대해서 이더리움 체인에서는 이더를 전송하는 로직을 구현하며, 클레이튼 체인에서는 클레이를 전송하는 로직을 구현한다. (= interface 구현체 작성)
public class EthereumChain implements Chain {
@Override
public void sendCoin() {
// send coin 로직
}
// Chain에 있는 interface 함수들 구현
...
}
3. 어떤 체인에서 실행할건지에 대한 객체 생성을 위해 Factory 클래스를 만든다
- 어떤 체인인지에 대한 객체 생성을 해주는 Factory 클래스를 구현한다.
public class ChainFactory {
public Chain getChain(String chainType) {
if (chainType == "Ethereum") {
return new EthereumChain()
} else if (chainType == "Klaytn") {
return new KlaytnChain()
}
...
}
}
Application level
4.앱 단에서 공통 동작으로 정의했던 interface의 함수를 호출함으로써 해당 동작들을 실행한다.
ChainFactory factory = new ChainFactory()
Chain chain = factory.getChain("Ethereum")
// Ethereum의 이더를 전송한다.
chain.sendCoin()
'Development > 개발일지' 카테고리의 다른 글
올해의 회사일의 목표, Xcode Cloud 사용해보기 (0) | 2023.02.08 |
---|---|
git flow 전략 (0) | 2023.02.07 |
오늘의 Compose 키워드 (0) | 2022.11.10 |
web3swift 3.0.4 적용 중...포기를 선언한 이유 (0) | 2022.11.04 |
지갑에 충분한 잔액이 있었지만, insufficient balance 에러를 만난 이슈 (0) | 2022.11.01 |