The view is the part that user interacts with. This is the entry point of information flow from user perspective. A view has a direct reference to the view model but view model does not have a direct reference to view. A view can use it's direct reference to interact with view model.
The view model is the layer that stands between view and model. It's main role is exposing streams of data relevant to the view and receive ui events from user interactions. In other words it holds the ui logic and state. We need to make sure that every action of user is goes through the view model and every logic related with view is placed on view model. Any kind of holding a view reference is strictly forbidden to prevent memory leaks. Additionally, it is not required to depends on concrete implementations, depending on abstractions provides us with i
