๋ฐ์ดํฐ ๋ ์ด์ด๋ฅผ Repository๋ณ๋ก ์ ์ง์ ์ผ๋ก ๋ฆฌํฉํฐ๋งํฉ๋๋ค.
๋ฐฐ๊ฒฝ
ํ์ฌ UI ๋ ์ด์ด๊ฐ ๋ฐ์ดํฐ ๋ ์ด์ด์ ์ธ๋ถ ๊ตฌํ์ ์๊ณ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ ๋ ์ด์ด์ ์ฑ
์ ์ค ์ผ๋ถ๋ฅผ ๋์ ์ฒ๋ฆฌํ๊ณ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ๋ ์ด์ด์ ํจ์๋ค์ด ์์ธ๋ฅผ ๊ทธ๋๋ก ๋์ง๋ฉฐ, UI ๋ ์ด์ด๊ฐ ์ด๋ฅผ try-catchํ๊ณ HTTP ์ฝ๋๋ฅผ ํด์ํ๋ ๋ฑ์ ์์
์ ํ๊ณ ์์ต๋๋ค.
- ์ด๋ก ์ธํด ๋ฐ์ดํฐ ๋ ์ด์ด์ ๋ณ๊ฒฝ์ฌํญ์ด UI ๋ ์ด์ด๋ก ์ ํ๋๊ธฐ ์ฝ๊ณ , ๋์ผํ ์์ธ ์ฒ๋ฆฌ ๋ฐ ๋ก๊น
๊ด๋ จ ์ฝ๋๊ฐ ํธ์ถ๋ถ๋ง๋ค ๋ฐ๋ณต๋๊ณ ์์ต๋๋ค.
๋ฆฌํฉํฐ๋ง ๋ฐฉํฅ
- ๋ฐ์ดํฐ ๋ ์ด์ด๋ ์ค๋ฅ๋ฅผ ๊ทธ๋๋ก ๋์ง์ง ์๊ณ , ์ฑ๊ณต/์คํจ ๊ฒฐ๊ณผ๋ฅผ
Outcome<T, F> ๊ฐ์ฒด๋ก ๋ง๋ค์ด ๋ฐํํ๋๋ก ํฉ๋๋ค.
Outcome.Success<T>: ์ฑ๊ณต ์ ๋ฐํํ ๋ฐ์ดํฐ (e.g. Success<List<Course>>, Success<Unit>)
Outcome.Failure<F>: ๋๋ฉ์ธ ์๋ฌ (sealed interface๋ก ์ ์) (e.g. UnauthorizedUser, DuplicateCourseName)
- UI ๋ ์ด์ด๋ ๋ฐ์ดํฐ ๊ด๋ จ try-catch๋ HTTP ์ฝ๋ ํด์ ๋ฑ์ ์ง์ ์ฒ๋ฆฌํ์ง ์๊ณ ,
Outcome์ ๋ฐ๋ผ ์ ์ ํ UI ์์
๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๊ธฐ๋ ํจ๊ณผ
- ๋ฐ์ดํฐ ๋ ์ด์ด์ ๋ณ๊ฒฝ์ฌํญ์ด UI ๋ ์ด์ด๋ก ์ ํ๋ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค.
- ๋ฐ์ดํฐ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ๋ก๊น
๋ฑ์ ์ฝ๋ ์ค๋ณต์ด ์ ๊ฑฐ๋ฉ๋๋ค.
Outcome.Failure<F>์ ํ์
์ ํตํด ์ฒ๋ฆฌํด์ผ ํ๋ ๋๋ฉ์ธ ์๋ฌ๊ฐ ๋ช
์์ ์ผ๋ก ์ ์๋ฉ๋๋ค.
๋ฐ์ดํฐ ๋ ์ด์ด๋ฅผ Repository๋ณ๋ก ์ ์ง์ ์ผ๋ก ๋ฆฌํฉํฐ๋งํฉ๋๋ค.
๋ฐฐ๊ฒฝ
ํ์ฌ UI ๋ ์ด์ด๊ฐ ๋ฐ์ดํฐ ๋ ์ด์ด์ ์ธ๋ถ ๊ตฌํ์ ์๊ณ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ ๋ ์ด์ด์ ์ฑ ์ ์ค ์ผ๋ถ๋ฅผ ๋์ ์ฒ๋ฆฌํ๊ณ ์์ต๋๋ค.
๋ฆฌํฉํฐ๋ง ๋ฐฉํฅ
Outcome<T, F>๊ฐ์ฒด๋ก ๋ง๋ค์ด ๋ฐํํ๋๋ก ํฉ๋๋ค.Outcome.Success<T>:์ฑ๊ณต ์ ๋ฐํํ ๋ฐ์ดํฐ (e.g.Success<List<Course>>,Success<Unit>)Outcome.Failure<F>: ๋๋ฉ์ธ ์๋ฌ (sealed interface๋ก ์ ์) (e.g.UnauthorizedUser,DuplicateCourseName)Outcome์ ๋ฐ๋ผ ์ ์ ํ UI ์์ ๋ง ์ฒ๋ฆฌํฉ๋๋ค.๊ธฐ๋ ํจ๊ณผ
Outcome.Failure<F>์ ํ์ ์ ํตํด ์ฒ๋ฆฌํด์ผ ํ๋ ๋๋ฉ์ธ ์๋ฌ๊ฐ ๋ช ์์ ์ผ๋ก ์ ์๋ฉ๋๋ค.