我正在寻找一些通用的解决方案来实现MVP的统一排序。我一直在一个项目之前,伙计们有很好的解决方案,但我不记得它是如何工作的。
所以我试着重现我记忆中的一切,但我意识到我不知道如何把所有的东西联系起来。按照我的逻辑,它应该是一种普遍的东西。就像一种资产,或者包,您可以直接添加到您的项目中,并在其上构建您自己的类,以便它们适合该模式。View基本上是GameObject,它处理所有UI或模块的任何可见部分。
I查看
public interface IView
{
public IPresenter Presenter { get; set; }
public virtual void OnInit() { }
}
IP报告者
public interface IPresenter
{
public IView View { get; set; }
public Model.Model Model {get; set;}
}
然后我开始实现View类。它应该继承自MonoBehaviour,以便充当游戏对象上的组件,并接收场景中其他对象的引用。例如,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,因为它只是保存逻辑和操作数据。
演示者
public class Presenter : IPresenter
{
public IView View {get; set;}
public Model.Model Model { get; set; }
public Presenter(IView view)
{
Model = new Model.Model();
Model.Presenter = this;
View = view;
View.OnInit();
}
}
型号
public class Model
{
public Presenter.Presenter Presenter { get; set; }
public Model() { }
}
目前我的Model类是空的,因为我最终意识到我不知道如何将View连接到Presenter。事实上,我确实连接了所有这些类。但是对我来说,所有的东西都依赖于视图似乎是错误的,因为它只是这个体系结构中一个依赖于Unity的类。也许我应该有不同的类来创建Model和Presenter的示例,并将它们分配给彼此。我不知道I don“我不知道怎样做才对。
我也开始在这个项目中使用命名空间,由于某种原因,我不能只使用Presenter或Model类。我必须使用Presenter.Presenter或Model.Model来代替。我做错了什么?这应该是一个常见的问题。
所以,如果你用过类似的东西之前告诉我,我的一般错误,阻止我完成这个简单的任务。也许你已经做了我正在寻找的解决方案。谢谢回复)
1条答案
按热度按时间sgtfey8w1#
我强烈建议您看一看Zenject,这样您将有一个安装程序,它将示例化您的Presenter和Model,并将每个(和View)注入所需的类中。
(Note我没有测试代码,我删除了逻辑以使其简单,并向您展示了Zenject在您的用例中的优势)
关于命名空间问题,要避免
Presenter.Presenter
,只需使用using
语句,如下所示:using Presenter;