본문 바로가기

2022/03

(33)
타입스크립트의 타입 대수(type argebra)를 통해 타입 오류 분석하기 Type algebra는 TypeScript에서 많이 알려지지 않은 주제이며 TypeScript의 몇 가지 단점을 이해하는 데 필수적인 주제입니다. Algebras (대수) 집합 대수가 |,&에서 모두 분배법칙이 성립하며 타입스크립트의 타입 합집합 교집합은 집합 대수를 따름을 이해하면 됩니다. 우리 모두 수학 수업에서 몇 가지 대수 법칙을 배웠습니다. 곱셈은 덧셈에 대해 왼쪽 분배 법칙 성립: a * (b + c) === (a * b) + (a * c) 곱셈은 덧셈에 대해 오른쪽 분배 법칙 성립: (a + b) * c === (a * c) + (c * c) 덧셈은 곱셍에 대해 분배법칙이 성립하지 않습니다. 그리고 우리가 방금 본 일반 대수학(ordinary algebra)과 약간 다른 부울 대수학(boo..
타입스크립트 타입 호환성과 타입 계층 트리 타입스크립트의 타입 계층을 통해 타입 호환성을 알아봅시다. 1. 타입 호환성은 뭔가요? 타입 호환성 Documentation - Type Compatibility How type-checking works in TypeScript www.typescriptlang.org 타입스크립트에는 다양한 타입이 존재하는데, 어떠한 타입 변수에 다른 타입 데이터(값)이 할당 가능하면 타입이 호환된다고 합니다. 타입스크립트는, 구조적 타이핑을 허용하기에, 클래스 명이 다르면 하위 구조가 완전 같아도 호환이 불가능한 자바의 명목 타이핑과 다른 동작을 보여줍니다. 기본적으로 타입 호환성은 업캐스팅 가능 여부로 판단합니다. 이 게시물에서는 타입스크립트 기본 타입 간의 계층 구조를 이해하며, 타입 호환성을 알아봅니다. 아래..
아폴로 클라이언트로 알아보는 클라이언트 아키텍처 [Apollo Client & Client-side Architecture Basics] https://www.apollographql.com/blog/apollo-client/architecture/client-side-architecture-basics/ Apollo Client & Client-side Architecture Basics Architecture is the foundation, the skeleton, that sets your project up for success. It’s the stuff that we wish we got right from the start because making drastic architectural changes, later on, can be challenging and time-consuming. Today, we React de ..
설계를 깔끔하게 발전시키기 https://pragprog.com/titles/swdddf/domain-modeling-made-functional/ Domain Modeling Made Functional Use domain-driven design to effectively model your business domain, and implement that model with F#. pragprog.com 해당 책의 마지막 장입니다(13) TLDR : 초이스 타입을 이용해 관심사가 유사한 필드를 하나의 차원으로 통합하라! 도메인 모델의 구현이 끝이 아닙니다. 요구 사항이 변경되면 모델이 지저분해지고 다양한 하위 시스템이 얽혀 테스트하기 어려워집니다. 이제 마지막 과제가 있습니다. 시스템에 영양을 최소화하면서 설계가 발전할 수 있..
Persistence 우리는 도메인 모델을 "persistence ignorance"로 설계했습니다. 즉, 데이터 저장 또는 다른 서비스와의 상호 작용과 관련된 구현 문제로 인해 설계가 왜곡되지 않도록 했습니다. 그러나 대부분의 애플리케이션에는 프로세스 또는 워크플로의 수명보다 더 오래 지속되어야 하는 상태가 필요한 시점이 있습니다. 이 시점에서 우리는 파일 시스템이나 데이터베이스와 같은 일종의 지속성 메커니즘으로 전환해야 합니다. 슬프게도 우리의 완벽한 도메인에서에서 인프라의 지저분한 세계로 이동할 때 거의 항상 불일치가 있습니다. 명령 쿼리 분리(CQRS)와 같은 몇 가지 높은 수준의 원칙에 대해 논의한 다음 낮은 수준의 구현으로 전환합니다. NoSQL 문서 데이터베이스와 기존 SQL 데이터베이스의 두 가지 방식으로 도메..
Serialization 이 책의 예제에서는 입력과 출력이 있는 함수로 워크플로를 설계했습니다. 여기서 입력은 커맨드, 출력은 이벤트입니다. 이러한 커맨드는 어디에서 왔습니까? 이벤트는 어디로 가나요? 메시지 큐, 웹 요청 등 바운드 컨텍스트 외부에 있는 일부 인프라에서 들어오거나 바운디드 컨텍스트 밖으로 나갑니다. 이 인프라는 특정 도메인을 이해하지 못하므로 도메인 모델의 유형을 JSON, XML 또는 protobuf와 같은 바이너리 형식과 같이 인프라가 이해할 수 있는 것으로 변환해야 합니다. 또한 주문의 현재 상태와 같이 워크플로에 필요한 내부 상태를 추적하는 방법이 필요합니다. 다시 말하지만, 우리는 아마도 데이터베이스와 같은 외부 서비스를 사용할 것입니다. 외부 인프라의 중요한 기능은 도메인 모델의 타입을 쉽게 직렬화 ..
DDD 구현 : 모나드와 Async Monads and More 모나드는 "모나딕" 함수를을 직렬로 연결할 수 있는 프로그래밍 패턴일 뿐입니다. "모나딕" 함수는 무엇입니까? "normal" 값을 취하고 일종의 "enhanced" 값을 반환하는 함수입니다. 오류 처리 접근 방식에서 "enhanced" 값은 Result type에 래핑된 것이므로 모나딕 함수는 Result 생성 "switch" 함수의 종류입니다. (Ok, 혹은 serviceExceptionAdaptor) (아래의 switchFn 위치에 들어가는 Result 생성자 + map 기능 결합 함수) 모나딕 함수 (return) // 생성자 함수 예시 ​/// "Adapter block" that converts exception-throwing services​ ​ ​/// int..
DDD 구현 : 파이프라인에 모나드 적용하기, computation expression https://itchallenger.tistory.com/428 DDD 구현 : 모나드로 Result 생성 함수 연결 Result type을 생성하는 함수끼리 깔끔하게 합성하는 법을 알아봅시다. 다음은 문제의 시각적 표현입니다. 일반 함수는 철도 트랙의 일부로 시각화할 수 있습니다. 그러나 Result 출력이 있는 함수는 itchallenger.tistory.com 이전 게시물에서 모나드를 설명했습니다. 비동기 효과와 서비스 종속성을 무시하면서 파이프라인의 구성 요소를 빠르게 다시 살펴보겠습니다. 첫째, ValidateOrder는 입력 데이터가 올바른 형식이 아닌 경우 오류를 반환하므로 "switch" 함수이고 서명은 다음과 같습니다. (switch 함수는 생성자입니다~) ​type​ Validate..