깨끗한 아키텍처 를 사용 하면 결합도가 매우 낮고 데이터베이스 및 프레임워크와 같은 기술 구현 세부 사항과 독립적인 애플리케이션을 설계할 수 있습니다. 이렇게 하면 응용 프로그램을 유지 관리하기 쉽고 유연하게 변경할 수 있습니다. 또한 본질적으로 테스트 가능해집니다. 여기에서는 클린 아키텍처 프로젝트를 구성하는 방법을 보여 드리겠습니다. 이번에는 Typescript를 사용하여 React todo 애플리케이션을 빌드할 것입니다.
프로젝트의 폴더/그룹 구조는 다음과 같은 형식을 취합니다.
├── Core
├── Data
├── Domain
└── Presentation
이 계층은 프로젝트 /응용 프로그램이 수행하는 작업을 설명합니다. 많은 응용 프로그램은 폴더 구조만 보고 응용 프로그램이 수행하는 작업을 이해할 수 없는 방식으로 구축되고 구조화됩니다. 집의 건물 비유를 사용하면 건물의 평면도와 입면도를 보고 건물의 모양과 기능을 빠르게 식별할 수 있습니다.
같은 방식으로 프로젝트의 도메인 계층은 애플리케이션이 수행하는 작업을 지정하고 설명해야 합니다 . 이 폴더에서 모델, 리포지토리 인터페이스 및 사용 사례를 사용합니다.
├── Core
├── Data
├── Presentation
└── Domain
├── Model
│ ├── Todo.ts
│ └── User.ts
├── Repository
│ ├── TodoRepository.ts
│ └── UserRepository.ts
└── UseCase
├── Todo
│ ├── GetTodos.ts
│ ├── GetTodo.ts
│ ├── DeleteTodo.ts
│ ├── UpdateTodo.ts
│ └── CreateTodo.ts
└── User
├── GetUsers.ts
├── GetUser.ts
├── DeleteUser.ts
├── UpdateUser.ts
└── CreateUser.ts
├── Core
├── Data
├── Domain
└── Presentation
└── Todo
└── TodoList
├── TodoListViewModel.tsx
└── TodoListView.tsx
├── Core
├── Domain
├── Presentation
└── Data
├── Repository
│ ├── TodoRepositoryImpl.ts
└── DataSource
├── TodoDataSource.ts
├── API
│ ├── TodoAPIDataSourceImpl.ts
│ └── Entity
│ ├── TodoAPIEntity.ts
│ └── UserAPIEntity.ts
└── DB
├── TodoDBDataSourceImpl.ts
└── Entity
├── TodoDBEntity.ts
└── UserDBEntity.ts
이러한 항목을 목록 보기에 표시할 것이므로 Identifiable을 준수해야 합니다.
다음으로 todo 엔터티를 수행해 보겠습니다.
이제 TodoDatasource에 대한 인터페이스를 작성해 보겠습니다.
이 인터페이스의 구현을 작성하기에 충분하며 이를 TodoAPIImpl이라고 합니다.
참고 : 이 데이터 소스의 getTodos 함수는 Todo 목록을 반환합니다. 따라서 TodoEntity -> Todo를 매핑해야 합니다. TodoRepositoryImpl을 작성하기 전에 도메인 계층에 해당 인터페이스를 작성하겠습니다.
이제 todo 저장소가 있으므로 GetTodos 사용 사례를 코딩할 수 있습니다.
그런 다음 프레젠테이션의 뷰 모델과 뷰를 작성할 수 있습니다.
요약하면 흐름은 다음과 같습니다.
사용 사례는 리포지토리를 참조해야 합니까? 유스 케이스 또는 뷰 모델에서 직접 데이터 소스를 호출하지 않는 이유는 무엇입니까?
소규모 프로젝트의 경우 가능할 수 있지만 보다 확장 가능한 솔루션의 경우 다음을 고려해야 할 수 있습니다.
뷰 모델은 일부 비즈니스 로직을 호출하고 뷰에 대한 결과를 준비하는 데만 관여해야 합니다. 이 경우 뷰 모델은 사용 사례만 호출해야 합니다.
사용 사례는 비즈니스 로직을 보유해야 합니다. 이 경우 todos를 검색해야 하므로(어디에서 검색해야 하는지는 신경 쓰지 않습니다) todo 저장소 "getTodos" 메서드를 호출해야 합니다.
리포지토리는 사용 사례 요청을 충족하기 위해 어떤 데이터 소스와 서비스를 사용해야 하는지에 관심을 가져야 합니다. 프로젝트가 더 복잡하지만 여전히 확장 가능한 구조로 성장할 수 있으므로 이를 더 명확하게 볼 수 있습니다.
할 일이 API에서 검색된 후 로깅 DB에 무언가를 기록하려고 합니다.
GitHub 저장소:https://github.com/nanosoftonline/clean-typescript-react
원래 https://nanosoft.co.za 에 게시되었습니다 .
facebook.com에 요청하면 컴퓨터가 도메인 이름을 조회하여 해당 도메인 이름을 IP 주소로 변환하므로 컴퓨터가 해당 연결을 만들 수 있습니다.
머리말 뇌졸중은 누구에게나 언제든지 닥칠 수 있는 의학적 응급 상황입니다. 뇌의 한 부분으로의 혈류가 중단되어 갑작스러운 뇌 기능 상실로 이어질 때 발생합니다.
나는 최근에 세계 최대의 전문 소셜 네트워크인 Linkedin에 있었고 내가 팔로우하는 프리랜서 디자이너의 게시물을 발견했는데 내 관심을 끌었습니다. 그들은 모두 비행기에서, 노트북과 함께 해변에서, 수영장에서, 멋진 전망이 있는 사무실에서 사진을 게시했습니다.
Alyson Lee, 공무 관리 고문 연방 정부의 연간 예산 책정 과정은 이산화탄소 제거(CDR) 기금 마련을 위한 노력의 핵심입니다. 매년 Carbon180은 내년의 자금 흐름을 안내하기 위해 다양한 의회 사무소에 요청을 제출합니다.
모호함을 피하기 위해 다음 용어가 사용됩니다. 인증자; 로그인 웹사이트를 만드는 데 사용되는 휴대폰 사용자가 로그인 요청 서비스를 만들기 위해 사용하는 웹사이트 또는 애플리케이션 주어진 서비스를 제공하는 벤더 예.
우리는 종종 우리에게 좋다고 알고 있는 것을 구현하는 데 어려움을 겪고 있습니다. 중요한 다른 사람에게 우리가 그들을 사랑한다고 말하는 것부터 해적처럼 이야기하는 것을 기억하는 것까지, 그들이 이미 그런 일을 하고 있기 때문에 하루, 일주일 또는 한 달의 이벤트가 필요하지 않다고 주장하는 사람들이 항상 있을 것입니다.