저는 엄격하게 MVC나누지는 않고요,
일단 모델은 따로 떼어내서 순수 클래스로 구현합니다.
이렇게 하면 json serialize해서 파일로 저장/로드/네트웍 전송 하기에는 정말 편해집니다.
마치 디비처럼 순수 데이터만 들고 있는거죠. 프리팹도 없고 MonoBehaviour도 상속 안받습니다.
클래스별로 분류해보면
UserManager(모델)
- 유저관련 클래스들.
- Account
- Inventory
- Skill
DataManager(모델)
- 게임 데이터 모음(캐릭터, 몬스터, 맵, 아이템, 스킬...)
GameManager(로직)
- 각종 로직 클래스들 모음
UIManager(뷰)
- 주로 UI팝업 클래스들 관리
하다보면 자잘하게 바뀔때도 있지만 제일 큰 목적은
복잡도를 낮추고 최대한 편하게 코딩 하자
누가봐도 구조만 파악하면 뭐를 어디에 넣어야 할지 바로 알 수 있게 하자
입니다.
한마디로 유연하면서 규격화된(?) 구조로 가는 거죠.
데이터 접근은 UserManager
UI접근은 UIManager
로직 접근은 GameManager
여기에 협업까지 생각한다면 로직 부분을 좀 더 세분화 합니다.
수많은 로직들을 담당하는 각 클래스들을 GameManager밑에 두고
지들끼리는 메시지(Enum)로 통신하게 하는 겁니다. (유니티의 SendMessage보다는 pub/sub로 자체 구현)
이렇게 구성해 놓으면 메시지만 정의해 놓고 각 작업자들이 따로 작업한 뒤 나중에 연동하는것도 가능해지죠.
같은 GameManager밑에 붙어있지만 GetComponent안쓰고 메시지로 주고 받도록 규칙을 정하는 겁니다.
가까운 길을 놔두고 멀리 돌아가는것 처럼 보일 수도 있는데
프로젝트가 커져도 코드 관계가 깔끔해진다는 장점이 있습니다.
물론 서로 밀접한 관련이 있는 경우에 한해서는 서로 직접 참조할 수도 있고요.
어느 한쪽만 밀고 가기보단 둘을 잘 섞어쓰는게 좋은것 같습니다.