回答:
コントローラーとViewModelはさまざまな点で異なります。
MVCでは、コントローラーはビューを認識しており、ビューを変更できます。また、モデルを認識し、呼び出すことができます。MVVMでは、ViewModelはViewの抽象表現であり、具体的なUIを認識しません。必要に応じて表示できるようにModelをラップします。
従来のMVCでは、コントローラーはモデルと対話するためのビューの戦略にすぎません。実際、コントローラーが不要な場合もあります。MVVMでは、異なる動作が必要な場合は同じビューに対して異なるViewModelを使用できるため、必要ありません。MVCでは、たとえばモデルと通信するためのReadOnlyControllerまたはAdminControllerを使用できます。MVVMでは、2つのViewModelを作成し、Viewに必要なものを選択できます。
しかし、それらにはいくつかの類似点があります。両方のパターンで、ビューはオブザーバーです。古典的なMVCでは、ビューはモデルのオブザーバーであり、MVVMではビューモデルのオブザーバーです。
両方のパターンは、懸念を分離することを目的としています。MVVMは主に、使用中のUIテクノロジーに完全に依存しないビューの抽象化を提供することを目的としています。MVCはそこまで行きません。関心の分離に主眼を置いているので、ビジネスロジック(モデル)をビューに入れません。
同様の質問に対する私の私の答えも役立つかもしれません。
最後に、両方のパターンが同じファミリーに属していると言えます。MVVMが子孫であるMVPは、MVCの兄弟です。詳細を知りたい場合は、Martin FowlerのWebサイトへのこのリンクに従ってください。