Skip to content

11월 12일 회의록

MoonGoon edited this page Nov 12, 2024 · 1 revision

도메인 설계에 대한 회의

회 의 일 시 2024년 11월 12일 오후 2:00
참 여 자 @한승 조 @구병조 @민석 김 @문영균

회의 안건

  • 아키텍처 정의
  • 모델(엔티티) 설계
  • Domain과 CoreData 차이

회의 내용

안건 #1: 아키텍처 정의

| 배경

Presentation - Domain - Data (Clean Architecture)

우리는 왜 클린아키텍처를 따라가는가 ?

image

Network(REST) → 모듈

Persistent(CoreData) → 모듈

Model(비즈니스 로직 처리) - 세부적으로 클래스는 역할에 맞게 나뉨 → 필수

View(없을 수 도 있음)


| 토의

https://github.com/uber/RIBs/wiki

  • RIBs 일부 적용
    • 필요한 추상 정보만 전달 가능
    • 의존성 관리가 직관적임
    • 의존성 관계가 복잡하지 않아서 적용
  • 입출력을 한 곳에서 처리하자
    • 이후 복잡해진다면 분리하도록 설계
  • ViewController를 View로 볼 것인가, Controller로 볼 것인가
    • 일단 View+Controller로 하고, 복잡해지면 분리하자

안건 #2: 모델(엔티티) 설계

| 토의 내용

Message Entity

struct Message {
    let role: Role
    let content: String
    let createdAt: Date
enum Role {
    case user
    case assistant
}

}

  • 회고에 ID가 부여되므로, 메세지는 createdAt으로 식별가능
  • 현재 상태를 어떻게 할지? → 제일 상위 회고에만
    • 보내고 처리중인 상태
    • 응답 실패 상태
    • 응답 성공 상태

Retrospect Entity

struct Retrospect {
    let id: UUID
    let author: User
    let summary: String?
    let status: Data
    let isPinned: Bool
    let createdAt: Date  // 회고 생성 시점
    let chat: [Message]
enum Data {
case 대화종료
case 대화 진행중(Status)
}

enum Status {
// case 대화 종료
case 응답 에러(대화 진행중)
case 입력 대기 중(대화 진행중)
case 네트워크 응답 대기 중(대화 진행중)
}

}

유저 Entity → UserDefaults에 저장

struct User {
		let id: UUID
		let nickname: String
}

var isAlarmEnabled: Bool -> 유저 디폴트에 Bool로 저장


회의 마무리

참고자료

image

Clone this wiki locally