์์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ MVVM ํจํด์ ์ ์ฉํ๋ฉด ๋ทฐ์ ๋ทฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ทฐ๋ชจ๋ธ ๊ฐ ์ฑ ์์ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํตํด ๋ทฐ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ทฐ์ ํ์ํ๊ณ ๊ฐฑ์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ MVVM์์ ๋ช ๋ น์ด๋ฅผ ๋ทฐ๋ชจ๋ธ์์ ์ฒ๋ฆฌํ ๋ ๋ทฐ์ ๋์์ด ํ์ํ ๋๊ฐ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
ํ๋ฉด์์์ ํ ์ ์๋ก์ด ์ปจํ ์คํธ๊ฐ ์ถ๊ฐ๋ ๋ ์ปจํ ์คํธ์ ์ด๋ฆ์ ์ค์ ํด์ผ ํ๊ณ ์ด ์ด๋ฆ์ ํ์ ์๋์ฐ๋ฅผ ํตํด ์ ๋ ฅ ๋ฐ์์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
- [๋ทฐ] ํ ์ถ๊ฐ ๋ฒํผ ํด๋ฆญ
- [๋ทฐ๋ชจ๋ธ] ์ปจํ ์คํธ ์ถ๊ฐ
- [๋ทฐ] ์ปจํ ์คํธ ์ด๋ฆ ํ์ ์ ๋ ฅ
- [๋ทฐ๋ชจ๋ธ] ์ ๋ ฅ๋ฐ์ ์ด๋ฆ์ผ๋ก ์ปจํ ์คํธ ์ถ๊ฐ
- [๋ทฐ] ์ปจํ ์คํธ ๋ฐ์ธ๋ฉ์ ์ํด ํญ ํ์, ๋ด์ฉ ํ์โฆ
๋ค๋ฅธ ๊ณผ์ ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํตํด ๊ฐ๋ฅํ๋ฐ '2-1โ์ ๊ฒฝ์ฐ ๋ทฐ๋ชจ๋ธ์์ ๋ทฐ์ ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ๋ง ํฉ๋๋ค. ํ์ง๋ง ๋ทฐ๋ชจ๋ธ์์ ๋ทฐ๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ฉด MVVM ํจํด์ ์๋ฐ๋ฉ๋๋ค. ์ด๋ฅผ SOLID ์์น ์์กด๊ด๊ฒ ์ญ์ ์์น์ ์ฌ์ฉํ๋ฉด ํด๊ฒฐ๋ฉ๋๋ค. ์ด๋ IoC์์๋ ๋์ผํ ์๋ฆฌ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์ด๋ฅผ ์ํด ๋ทฐ๋ชจ๋ธ์ ๋ทฐ๋ฅผ ๊ทธ๋๋ก ์ฐธ์กฐํ์ง ์๊ณ ์ธํฐํ์ด์ค๋ก ์ฐธ์กฐํด์ ๋ทฐ๋ ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ๋ทฐ๋ชจ๋ธ์ ์ธํฐํ์ด์ค๋ก ์ฐธ์กฐํ๋ ๊ฒ์ผ๋ก ์ง์ ์ ์ธ ๋ทฐ๋ชจ๋ธ๊ณผ ๋ทฐ๊ฐ ์ฐธ์กฐ ๊ด๊ณ๊ฐ ์๋๋ก ํฉ๋๋ค.
์ธํฐํ์ด์ค๋ก ๊ด๊ณ ๋ช ์ธ
๊ฐ๋จํ ๋๊ฐ์ ์ธํฐํ์ด์ค๋ก ์์ํฉ๋๋ค.
public interface IViewAction
{
}
public interface IHaveViewAction<TViewAction>
where TViewAction : IViewAction
{
TViewAction? ViewAction { get; set; }
}
IViewAction
์ ๋ทฐ ์ก์
์ ์๋ฏธํ๋ฉฐ IHaveViewAction
์ ์ ๋ค๋ฆญ ์ธ์๊ฐ ๋ทฐ ์ก์
์์ ๋ํ๋
๋๋ค.
IHaveViewAction<TViewAction>
์ ๋ทฐ๊ฐ ๋ทฐ ์ก์
์ ์์ ํจ์ ์๋ฏธํ๋ฉฐ ๋ค์์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
| ๋ทฐ๋ชจ๋ธ
public partial class RepositoryViewModel : ObservableRecipient, IViewModel, IHaveViewAction<IRepositoryViewAction>
{
public IRepositoryViewAction? ViewAction { get; set; }
...
IViewModel๋ ํด๋น ํด๋์ค๊ฐ ๋ทฐ๋ชจ๋ธ์์ ๋ํ๋ด๋ ๋น ์ธํฐํ์ด์ค์ ๋๋ค.
๋ทฐ๋ ๋ค์์ ๋ชจ์ต์ด ๋ฉ๋๋ค.
| ๋ทฐ
public sealed partial class RepositoryPage : ViewModelPage, IView<RepositoryViewModel>, IRepositoryViewAction
{
public RepositoryPage()
{
InitializeComponent();
ViewModel.ViewAction = this;
}
...
์ด์ RepositoryPage
๋ IRepositoryViewAction
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ผ๋ก ๋ทฐ๋ชจ๋ธ์์ MVVM ํจํด์ ํด์น์ง ์์ผ๋ฉด์ ๋ทฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.