Open giwankim opened 1 year ago
퍼블릭 블록체인에 서버에서 트랜잭션을 발생시켜 NFT를 민팅하는 코드입니다. 이정에 좇기다 보니 본의 아니게 약간 길고 많은 일을 하는 비지니스 로직이 구현되었습니다. 그럼에도 불구하고 공유하게 된 이유는 이런 코드를 리팩토링하고 싶다는 강한 의지가 있기 때문입니다.
async function mintPublic ({ orderNumber, orderDate, productName, productType }) { const imagePath = await imageGenerator.createImage({ filename: 'image-public.png', orderNumber, orderDate, productName, productType }) const { imageUrl, tokenUri } = await uploadImageAndMetadata({ imagePath, productName, productType, orderNumber, orderDate }) const { caver, address } = caverUtils.getInstance({ endpoint: PUBLIC_KLAYTN_RPC_ENDPOINT, privateKey: PUBLIC_PRIVATE_KEY }) const nftContract = caver.contract.create( PUBLIC_NFT_CONTRACT_ABI, PUBLIC_NFT_CONTRACT_ADDRESS ) const receipt = await nftContract.send( { from: address, gas: MAX_GAS }, 'createToken', tokenUri ) const mintTxHash = receipt.transactionHash const tokenId = receipt.events.Transfer.returnValues.tokenId await dbUtils.query(INSERT_NFT, [ orderNumber, orderDate, productName, productType, CHAIN_ID, PUBLIC_NFT_CONTRACT_ADDRESS, mintTxHash, tokenId, imageUrl, tokenUri ]) return { imageUrl, tokenUri, chainId: CHAIN_ID, contractAddress: PUBLIC_NFT_CONTRACT_ADDRESS, tokenId } }
마틴 파울러의 엔터프라이즈 애플리케이션 아키텍처 패턴에서는 다음과 같은 3계층 분리를 데이터 중심 에플리케이션을 모듈화하는 대표적인 방법으로 제시한다.
계층화를 하는 이유 또한 다음과 같은 세가지로 이야기하고 있다.
객체의 의존 관계를 외부에서 결정하고 런타임에 주입하는 것이 의존성 주입이다. 토비의 스프링에서는 다음의 세 가지 조건을 충족하는 작업을 의존관계 주입이라 말한다.
이일민, 토비의 스프링 3.1, 에이콘(2012), p114
DI의 장접으로는
Higher-order 함수들인 filter, map, reduce는 함수형 프로그래밍에 중요한 요소이다.
배열의 원소들의 합을 구하는 함수를 map을 사용하여 다음과 같이 구현할 수 있다.
function sum(numbers) { return numbers.reduce((a, b) => a + b, 0) }
type SomeFunctionReturnString = () => string function delay(f: SomeFunctionReturnString, seconds: number): Promise<string> { return new Promise<string>((resolve, reject) => { setTimeout(() => { try { resolve(f()); } catch (error) { reject(`${error.name}: ${error.message}`); } }, seconds * MS_IN_SECOND); }); }; const success = () => { return "successfully done"; }; const fail = () => { throw new Error("failed"); }; delay(success, 2) // 2초 뒤에 successfully done 로그 .then((res) => console.log(res)) .catch((e) => console.log(e)); delay(fail, 2) // 2초 뒤에 failed 로그 .then((res) => console.log(res)) .catch((e) => console.log(e));
결과값
$ ts-node delay.ts successfully done Error: failed
퍼블릭 블록체인에 서버에서 트랜잭션을 발생시켜 NFT를 민팅하는 코드입니다. 이정에 좇기다 보니 본의 아니게 약간 길고 많은 일을 하는 비지니스 로직이 구현되었습니다. 그럼에도 불구하고 공유하게 된 이유는 이런 코드를 리팩토링하고 싶다는 강한 의지가 있기 때문입니다.
마틴 파울러의 엔터프라이즈 애플리케이션 아키텍처 패턴에서는 다음과 같은 3계층 분리를 데이터 중심 에플리케이션을 모듈화하는 대표적인 방법으로 제시한다.
계층화를 하는 이유 또한 다음과 같은 세가지로 이야기하고 있다.
객체의 의존 관계를 외부에서 결정하고 런타임에 주입하는 것이 의존성 주입이다. 토비의 스프링에서는 다음의 세 가지 조건을 충족하는 작업을 의존관계 주입이라 말한다.
이일민, 토비의 스프링 3.1, 에이콘(2012), p114
DI의 장접으로는
Higher-order 함수들인 filter, map, reduce는 함수형 프로그래밍에 중요한 요소이다.
배열의 원소들의 합을 구하는 함수를 map을 사용하여 다음과 같이 구현할 수 있다.
결과값