This code template provides a robust foundation for implementing the Model-View-ViewModel (MVVM) pattern in C#, particularly useful in Unity development.
public interface IViewModel
{
IViewModel Model { set; }
}
public interface IView
{
IViewModel Model { set; }
}
public abstract class View : MonoBehaviour, IView
{
public IViewModel Model
{
set => SetModel(value);
}
protected abstract void SetModel(IViewModel model);
}
public abstract class View<T> : View where T : IViewModel
{
private T _model;
protected new T Model
{
get => _model;
set => SetModel(value);
}
protected override void SetModel(IViewModel model)
{
SetModel((T)model);
}
private void SetModel(T model)
{
if (_model != null)
{
OnModelUnset();
}
_model = model;
if (_model != null)
{
OnModelSet();
}
}
protected virtual void OnModelSet()
{
}
protected virtual void OnModelUnset()
{
}
}
Let's explore into the components and functionality of this code template:
This template provides a solid starting point for developers looking to implement MVVM in their Unity projects, offering a balance between structure and flexibility. It facilitates clean separation of concerns and promotes maintainable, testable code.