这两天看了下老大的项目,他基本都是用MVC模式,写的很好,在此把我理解的记录下来

Model:实体对象(对应数据库记录的类)

View:视图

presenter(controller):业务处理

view中有present对象,present中有model和view对象

view中UI的交互会调用present相应处理的方法(该方法处理完后会调用view显示处理后的视图(将改变后的model对象传递过去),view显示就会改变显示的内容)

结构是下面这样子的:

IPresenter:

namespace NginAR
{
public interface IPresenter<T> where T : class
{
void Init();
}
}

IView:

namespace NginAR
{
public interface IView<T> where T : class
{
/**
* 设置Presenter
* @param presenter
*/
void setPresenter(T presenter);
}
}

IGlassView:

namespace NginAR
{
public interface IGlassView : IView<IGlassPresenter>
{
// 设置当前步骤内容,用于显示
void setStepContent(string content);
// 设置当前步骤
void setCurrentStep(int currentStep);
}
public interface IGlassPresenter : IPresenter<IGlassView>
{
// 当前步
bool StepCurrent();
// 下一步
bool StepNext();
// 上一步
bool StepLast();
void onStepChange(int currentTaskId, int currentStepId);
}
}

Step:

namespace NginAR
{
public class Step
{
public int id { get; set; }
public string content { get; set; }
public string type { get; set; }
}
}

FileUtil:

namespace NginAR
{
// 读取文件工具
public class FileUtil
{
// 加载脚本文件,用于保存步骤内容
public static void LoadModel(TextAsset asset,List<Step> steps) {
string[] lines = asset.text.Split("\n"[]);
for (int i = ; i < lines.Length; i++)
{
string[] cols = lines[i].Split(" "[]);
Step step = new Step();
step.id = int.Parse(cols[]);
step.content = cols[];
step.type = cols[]; steps.Add(step);
}
LogUtil.i("大小"+ steps.Count);
}
} }

LogUtil:

public class LogUtil
{
private static bool LOGI = true;
private static bool LOGW = true;
private static bool LOGE = true; public static void i(string mess)
{
if (LOGI)
{
Debug.Log(mess);
}
} public static void w(string mess)
{
if (LOGW)
{
Debug.LogWarning(mess);
}
} public static void e(string mess)
{
if (LOGE)
{
Debug.LogError(mess);
}
}
}

MainView(继承IGlassView):

UI事件调用present中对应的处理方法:

   // 新建逻辑管理对象 mvp-p
prenseter = new MainPresenter(asset, this);
// 为刷新当前步骤按钮设置监听回调
btn_text.onClick.AddListener(delegate () {
prenseter.StepCurrent();
});
// 为上一步按钮设置监听回调
btn_last.onClick.AddListener(delegate () {
prenseter.StepLast();
});
// 为下一步按钮设置监听回调
btn_next.onClick.AddListener(delegate () {
prenseter.StepNext();
});

IGlassPresenter(继承IGlassPresenter):

present中UI对应处理方法改变model,处理完调用view中方法显示处理后的视图展示:

 public bool StepLast()
{
currentStep--;
if (currentStep < )
{
currentStep = ;
return false;
}
onStepChange(, currentStep);
return true;
}
// 下一步逻辑
public bool StepNext()
{ if (steps.Count <= )
{
return false;
}
currentStep++;
if (currentStep >= steps.Count)
{
currentStep = steps.Count-;
return false; }
onStepChange(,currentStep);
return true;
}
// 步骤改变调用
public void onStepChange(int currentTaskId, int currentStepId)
{
this.currentStep = currentStepId;
LogUtil.i("currentStepId"+currentStepId);
currentStepContent =steps[currentStep].content;
view.setStepContent(currentStepContent);
view.setCurrentStep(currentStep);
}

同时present中还有加载文件的方法:

文件格式是这样子的:1 1.风险可能导致的后果:倒塌、高处坠落、公路中断运行、跨越架封网脱落等 image1

上面的FileUtil能解析出来并赋值给step(model)对象

view中显示方法(参数为model中的信息):

除了显示model信息之外还会加载其他的UI或者模型

 public void setStepContent(string content)
{
Debug.Log("content:"+content);
// 按钮文本设置为步骤内容
text.text = content;
}
  public void setCurrentStep(int currentStep)
{
currentStep = currentStep + ;
if (Application.loadedLevelName.Equals("KYJ"))
{
if (currentModel != null)
Destroy(currentModel);
Play("kyj_"+ currentStep);
LoadPrefab("Prefabs/Kyj_Step/kyj_" + currentStep, objectTarget.transform);
if (currentStep == )
endStep.SetActive(true);
else
endStep.SetActive(false);
}
}

unity 使用MVC模式的更多相关文章

  1. Unity之MVC 模式

    MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO.它 ...

  2. MVC模式下unity配置,报错“No connection string named '**Context' could be found in the application config file”

     写在前面: 第一次配置时好好的,后来第二次改到MVC模式,把依赖注入写成字典的单例模式时,由于新建的ORM(数据库映射模型EF),怎么弄都不用,一直报错"No connection str ...

  3. 【Unity】基于MVC模式的背包系统 UGUI实现

    前言 本文基于MVC模式,用UGUI初步实现了背包系统. Control层包括了点击和拖拽两种逻辑. 博文首发:http://blog.csdn.net/duzixi 下载地址:https://git ...

  4. Android 腾讯入门教程( 智能手表UI设计 和 MVC模式 )

    *****注意到mvc 在android 中是如何进行分层分域执行各自的功能.**** 官方推荐的按钮尺寸是48像素 前端之Android入门(1):环境配置 前端之Android入门(2):程序目录 ...

  5. ASP.Net MVC开发基础学习笔记:一、走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  6. [ASP.NET MVC 小牛之路]01 - 理解MVC模式

    本人博客已转移至:http://www.exblr.com/liam  PS:MVC出来很久了,工作上一直没机会用.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得,并希望能得到各 ...

  7. 深入理解MVC模式

    一,什么是MVC模式 该模式是一种软件设计典范,他把软件系统划分为三个基本部分:模型层(Model).视图层(View).控制器(Controller) *Model(模型)表示应用程序核心(比如数据 ...

  8. MVC模式

                             1.MVC的概念 1.1什么是MVC? MVC是一种架构型模式,它本身不引入新的功能,只是指导我们把web应用结构做的更加合理,实现逻辑与页面相分离. ...

  9. MVC模式与Android

    MVC模式是软件工程中的一种软件架构,“Model-View-Controller”的缩写,中文翻译为“模型-视图-控制器”. MVC模式将一个交互式应用程序分为3各组件: 1.Model(模型):业 ...

随机推荐

  1. ES6通过WeakMap解决内存泄漏问题

    一.Map 1.定义 Map对象保存键值对,类似于数据结构字典:与传统上的对象只能用字符串当键不同,Map对象可以使用任意值当键. 2.语法 new Map([iterable]) 属性 size:返 ...

  2. SOE 中调用第三方dll

    一.简介 在利用soe实现server的扩展的时候,有些时候,需要调用第三方的dll库.官网中给出了明确的说明,soe中是可以添加第三方的dll文件,但是一直没有测试.按照官方的步骤应该是一个非常的简 ...

  3. Qt 打印机支持模块

    Qt 打印支持 Qt为打印提供广泛的跨平台支持.使用每个平台上的打印系统,Qt应用程序可以打印到连接的打印机,并通过网络打印到远程打印机.Qt的打印系统还支持PDF文件生成,为基本的报告生成设施奠定了 ...

  4. js中的整除运算

      Math.ceil(count / pagesize); //向上整除 4/3=2;   Math.floor(count / pagesize); //向下整除 4/3=1; Math.roun ...

  5. Acheron一期SVN地址

    svn://10.0.0.100/project/Acheron/2.0/SourceCode tailf 命令 http://web2py.com/books/default/chapter/29/ ...

  6. JPA 对象关系映射之关联关系映射策略

    关联关系映射 关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一.一对多和多对多几种关系.细分起来他们又有单向和双向之分.下面我们逐一介绍一下. 回页首 单向 OneToOne 单向一 ...

  7. 005-JSX简介以及使用

    一.概述 考虑这个变量声明: const element = <h1>Hello, world!</h1>; 标签语法既不是字符串也不是HTML. 它被称为JSX,它是Java ...

  8. node.js---sails项目开发(3)

    1.为新建的sails数据库新建一个用户,首先连接数据库 mongo localhost:27017 (1)显示所有数据库   (2)切换数据库 show dbs use sails 新建一个用户 账 ...

  9. jquery关于select框的取值和赋值

    jQuery("#select_id").change(function(){}); // 1.为Select添加事件,当选择其中一项时触发      var checkValue ...

  10. oradebug工具使用2(转载)

    oradebug的前身是在ORACLE 7时的ORADBX,它可以启动用停止跟踪任何会话,dump SGA和其它内存结构,唤醒ORACLE进程,如SMON.PMON进程,也可以通过进程号使进程挂起和恢 ...