2014년 11월 22일 토요일

MVVM @ Unity3D

몇번의 프로젝트를 경험하며, 프론트엔드(클라이언트)에서의 프레임워크가 필요하다고 생각되어 이리저리 뒤지던차, 최근 Unite 2014에서 시연하던 내용중에 괜찮은 MVVM프레임워크가 발표되어 있어, 한번 손을 대보게되었습니다

uFrame이라는 프레임워크로

MVVM...에 가까운 환경을 제공합니다.

가깝다는 말이 무슨말이냐면, Microsoft에서 제창하고 있는 그 MVVM과 완전히 동일한 물건은 아니라는 말입니다.

개인적으로 MV*패턴에 있어서 가장 이해하고 있는 패턴은 Restful API개발등으로 연이 닿았던 CakePHP와 같은 Rails와 같은 계통의 MVC패턴을 개인적인 범주내에서는 가장 이해를 하고 있습니다.

MVVM은 Model, View, View-model의 약자로, MVC의 Model View Controller에 있어서 Controller가 View-Model이 대치된 형태의 디자인 패턴입니다.

웹에서의 MVC는 기본이 한번의 http리퀘스트에 대한 response까지만 해결을 하면 되기때문에, 기본적으로 클래스를 MVC의 각 역할에 맞춰, 단순한 한번의 호출에 대한 처리에 대한 정리만 해 놓은 정도의 내용입니다만. uFrame에서 말하고있는 MVVM에서의 데이터 연동은, 실시간 적용을 전제로 생각하는 구조를 하고있습니다. 일반적으로 Observer Pattern으로 이야기되는 그런 부분이죠.

Model에 변경이 있었을 경우, Binding된 View로 모든 데이터 변동이 적용되는 구조를 갖추고있는데, 이를 중간역할을 하는 View-Model이 담당을 하고있습니다.

여기에 더불어, uFrame에서는 ViewModel에 대해 Controller가 붙어있습니다.
그래서 엄밀히는 MVCVM이라 부른다는것 같긴합니다.

http://answers.invertgamestudios.com/chat/i-know-mvc-and-mvvm-but-i-m-not-certain-i-quite-get-uframe

일반적인 Rails의 MVC의 C는 엄밀히 이야기하자면 Framework에 정의된 routing의 결과 주소에 관한 endpoint에 대한 하나의 http리퀘스트의 처리 컨트롤을 지칭하고 있지만,

uFrame에서의 Controller는 View----Command----->ViewModel---->model과 같은 뷰 모델로의 커맨드 처리의 로직을 구현하는 부분에 해당하는것 같습니다.

실제로 관련 로직이 Controller에 배치되게끔 권장이 되고 있습니다.

현 시점에서 디자인패턴에 관한 이야기는 위와 같은 정도로 정리를 할 수 있을거같고, 향후에 더 조사를 하며 실제 프로젝트에 적용이 가능한지 정도까지를 조사를 진행해볼 생각입니다.
다만 1.5버전 자체가 아직 베타버전으로 파이널 릴리스가 나와있지 않기때문에 현재 작업을 해보면서 발생하는 문제나, 문서화의 부족등으로 인한(소스는 오픈소스가 아님) 난제가 없지않아 남아있기 때문에 아직은 사용상에 문제가 많이 발생할지도 모르겠습니다.


그럼에도 불구하고, 이 프레임워크를 사용해보려는 이유는 아래와 같습니다.

1. 스튜디오급 이상의 조직에서 개발되고있으며, 유지보수가 진행중
2. 다이어그램을 통한 클래스의 형상관리가 가능. 심지어는 다이어그램을 중심으로 해서 관련 기반 코드가 자동 작성됨(!)
3. 어느정도 정립된 패턴에서 비지니스 로직을 개발함으로서, 타인과의 소통이 용이, 스파게티 코드의 회피.
4. 기존 몇몇 mv*프레임워크가 없는건 아니지만, 현 시점에서 유지보수가 되고있는지는 미지수, 혹은 그런 흔적이 보이지 않음.


아직 개발도상에 있는 프레임워크지만, 중단기적으로 생각했을때 어느정도 기대해볼수 있지 않나라는 생각이 들어서... 가 주요 이유가 되겠습니다.

아무래도 실제 개발투입에 이용하기 어렵다는 결론이 나오면 다른 오픈소스 프레임워크 등으로 눈을 돌려야겠지만 말입니다.

요 며칠 실제로 만져보며 이것저것 해본결과, 어느정도 Element운용(메모리 사용량 등의 이유)에만 주의하면 충분히 좋은 프레임워크로서 이용 가능하지 않나 하는 생각이 듭니다.

그리고 문서화좀 더...

Overview
http://invertgamestudios.com/uFrameAPI/Default/webframe.html#uFrame%201.5%20Overview.html

Asset Store
https://www.assetstore.unity3d.com/en/#!/content/14381

댓글 없음:

댓글 쓰기