넵. 그렇숩니다… =ㅂ=;
당연히
개념의 구현이 편의에 심각한 영향을 주면 안 되겠지만,
그 반대 역시 금과옥조로 다뤄질 필요는 없다고 생각해요.
그 가장 앞부분에 있는 것이
View 에서 ViewModel 을 타입으로 참조하는 것이라고 개인적으로 생각하는 편입니다.
하지만 만약 이렇게 ViewModel을 타입으로 View 에 참조를 하는 상황이라면
View 에서 ViewModel 에 대한 직접 접근은 허용하지 않아야 할 거 같다는 게 제 생각입니닷!
(하지만 그게 가능할까… 싶어요… =ㅅ=??)
그리고 특히! code behind 에서는 덕욱 그래서는 안 된다고 생각해요. 또한
Zero Code Behind 를 컨벤션으로 채택하지 않는 경우라면 더더욱 위험하다고 생각합니다.
협업하는 모든 구성원들이 MVVM 에 대한 이해가 깊다면 크게 상관없을 수도 있지만
(각자 알아서 조심할 테니까…)
만약 그렇지 않다면, 게다가 코드 리뷰도 제대로 안 된다면…
크흐… ;ㅂ;
그러니까
단순히 ViewModel 을 DataContext 에 할당하는 용도 이외에는 사용하지 않게 한다면 그나마 낫겠지만
애초에 View 에서 ViewModel 을 알게 했다는 것은 ViewModel 타입에 대한 참조가 가능한 상황을 만들어 둔 것이고,
이것은 View에서 ViewMode 에 직접 접근할 수 있는 통로가 열린다는 의미이죠.
그러다보면
ViewModel 에서 수행해야할 비즈니스 로직이
View 의 code behind 에서 ViewModel 에 접근해 쭉쭉 커가는 경험을 쉽게 할 수 있거든요.
(눈 앞의 구현에 바쁜 사람들이 MVVM 고려할 리가…)
그렇게 되면 결국
ViewModel 은 Data Binding 을 지원하는 수준의 유틸 타입으로만 사용되는 것으로 이어집니다…
(이럴 거면 굳이 MVVM 을 쓸 이유가… 어차피 짬뽕인데…)
이게 MVVM 의 이해도에 관련된 문제이긴 한데
모든 팀원에게 이것을 요구할 수 없는 상황이 더 많죠.
그래서, 저는 개인적으로
이런 상황에서도 최소한의 패턴 구현을 위해 일종의 장치를 마련해두는 편이에요.
예를 들어 Zero code behind 나 View 에서 직접 ViewModel 의 타입에 대한 접근을 제한한다거나(요거는 컨벤션으로 처리…)
아예 View 와 ViewModel 을 별도의 어셈블리에 작성하고 프로젝트 수준에서 참조하지 못하게 한다거나… 등등
(사실 이렇게 하면 View 가 ViewModel 에 직접 접근이 구조적으로 불가능해지죠. 깔끔… /ㅁ/)
뭐 그렇숩니다…
MVVM 을 메인 아키텍처로 선택했다면
그것을 구현하면서 어떤 이점을 취할 지 생각해야하고, 패턴을 깨면서 어떤 영향이 있을 지 고려해야하겠죠.
저는 웬만하면, 패턴을 깨면서 얻는 편의보다 패턴을 지키면서 얻는 이득이 훨씬 크다고 생각하는 편이라
이런 부분에 대해 좀 민감하게 받아들여지기도 한답니다…
그냥 그러려니 해야하는데 말이죠… -ㅁ-;;;