Universal Unity MVP解决方案



我正在寻找在Unity中实现MVP的某种通用解决方案。我以前做过一个项目,有人有很好的解决方案,但我不记得具体是怎么回事了。

所以我试着重新创造这个,因为我记得和卡住意识到我不知道如何连接一切。按照我的逻辑,它应该是某种普遍的东西。像资产或包这样的东西,您可以按原样添加到项目中,并在其上构建自己的类,以便它们适合模式。我从View和Presenter的界面开始。View基本上是与所有UI或模块的任何可见部分一起工作的GameObject。

<标题>IView h1> iprensenter h1> 后我开始实现View类。它应该继承MonoBehaviour,以便作为GameObject上的组件,并接收场景中其他对象的引用。例如,On Init方法是播放开始动画的完美地方。 <标题>视图
public class View : MonoBehaviour, IView
{
public IPresenter Presenter { get; set; }
public void OnInit()
{
}
private void Awake()
{
Presenter = new Presenter.Presenter(this);
}
}

Presenter不需要继承MonoBehaviour,因为它只保存逻辑和操作数据。

<标题>主持人h1>
public class Model
{
public Presenter.Presenter Presenter { get; set; }
public Model() { }
}

目前我的Model类是空的,因为我最终意识到我不知道如何将视图连接到演示器。事实上,我确实连接了所有这些类,但对我来说,一切都依赖于视图似乎是错误的,因为它只是这个架构中一个依赖于unity的类。也许我应该有不同的类来创建Model和Presenter的实例并将它们相互分配。我不知道怎样才能把它做好。

我也开始在这个项目中使用命名空间,由于某种原因,我不能只使用演示者或模型类。我必须使用演示器。演示者或模型。模型代替。我做错了什么?这应该是一个普遍的问题。

所以,如果你以前用过类似的东西,告诉我我的一般错误是什么,阻止我完成这个简单的任务。也许你已经做了我正在寻找的解决方案。谢谢你的回复)

我强烈建议你看看Zenject这样,你就有了一个安装程序,它将实例化你的演示器和模型,并将它们(和视图)注入到所需的类中。

public interface IView
{
}
public interface IPresenter
{
}
public interface IModel
{
}
public class View : MonoBehaviour, IView
{
[Inject] private readonly IPresenter _presenter;
}
public class Presenter : IPresenter
{
[Inject] private readonly IView _view;
[Inject] private readonly IModel _model;
}
public class Model: IModel
{
[Inject] private readonly IPresenter _presenter;
}
public class CustomInstaller : MonoInstaller
{
public override void InstallBindings()
{
Container.Bind<IModel>().To<Model>().AsSingle();
Container.Bind<IView>().FromComponentInParents();
Container.Bind<IPresenter>().To<Presenter>().AsSingle();
}
}

(请注意,我没有测试代码,我删除了逻辑,使其简单,并向您展示Zenject在您的用例中的优势)

关于您的命名空间问题,为了避免Presenter.Presenter,您只需要使用using语句,如:using Presenter;

相关内容

最新更新