MVC框架探索(二) MVC底层搭建

前言

在上一篇文章中,我们先是探讨了一下MVC的背景以及如何使用,并且对MVC中各自分层的职能进行了一定的分析。在明确了MVC各自的职责之后,又提前设想了在具体面板的mvc开发中,view层可能涉及到的大量重复工作,并以此为基础,设计并且开发了代码模板的生成工具和获取预制体中各级组件的代码工具。

至此,MVC开发的准备工作已经完成,接下来,我们将正式讨论如何开发一个MVC的底层框架以及后续在面板开发中对框架的应用。

MVC基类

MVC分作三层,在后续的UI开发中,所有的UI面板都应该严格遵循这个思想。基于这个思想,我们可以设想一下,在所有的UI的MVC中,都可能会有重复的方法,比如在ctrl层中,我们可能会对面板开启前后,关闭前后,都会有一定的操作,开启时可能需要在面板里操作view层获取的组件,赋值,关闭时,可能要隐藏或者销毁view层绑定的面板。那么我们可以把这些具有共性的操作,提前声明在基类中,如果在子类中需要修改,只需要重写即可。

由此,我们可以提前抽象出MVC的基类。

接下来,我们需要逐个分析职能,然后在基类中填充我们需要的方法。

首先是model层,因为model层更多的是处理数据,然而对于不同的面板,可能需要处理数据的方式也是大相径庭的,所以,在model层中,可以抽象的行为和属性理论上来说并不多。所以我在model层,只是抽象了一个初始化方法,用于model层的数据绑定,或者声明等行为。

其次是view层,view层需要做的事情,相对于model层来说,可以抽象的部分比较多。我们需要在view层中的事有:

1.绑定面板预制体

2.获取预制体中的组件

3.对于面板的操作方法

其实除了这些,还有一个点,那就是,我们可能在面板中加入小的预制体,比如一个滑动列表中放了一些item预制体,那么这些item,我们也需要在自己的面板模块中管理,所以我们还需要做一些事情。

4.设定预制体列表,用于管理预制体

5.对于预制体的操作方法

而ctrl层作为中间层,自然就是提供层之间的连接(注册绑定model以及view层),以及一些必要的操作方法(生命周期)

UI注册

在确定了MVC基类中的结构之后,我们需要思考一个问题:在什么时机去对MVC进行关联才是比较合适的?

如果在面板预制体已经创建之后,才进行关联,那如果要提前对预制体进行加载等处理的话,会有可能出现问题。通过思考之后,最合适的时机,应该是把所有的ui在ui模块加载的时候就已经注册关联好。

考虑好了注册时机,那么我们还需要考虑如何进行注册。

在这里,我的做法是,MVC底层进行了绑定,然后通过获取子类的MVC类型再来进行MVC子类之间的绑定,而子类MVC之间的交互防止了直接操作基类的可能性,用了里氏替换原则

实现的方式是通过声明的面板变量和既定的规则来获取子类的类型,使用反射来创建实例进行绑定,然后通过绑定的变量来调用其他层的方法,图中就是在注册时对model层进行了绑定,并且调用了model层的初始化,提前对数据进行初始化。

而view层的绑定,我是在打开面板时进行绑定的,并且在绑定的同时对预制体也进行绑定,获取对具体面板的控制

注册完成之后,我们在进行具体的mvc开发时,我们就可以在ctrl层进行对view层和model层的获取以及方法调用了。下图为我开发中的具体例子

 

在ctrl层中可以直接通过绑定号的view层调用具体的预制体或者组件进行操作,也可以操作model层中的数据。

总结

通过对UI的注册,我们可以完全解决MVC之前的关联问题,可以更好的在MVC之间调用需要的成员变量以及行为方法,再加上之前我们写好的脚本代码工具,可以让我们以非常小的人力代价,更加快速便捷的进行模块内容的开发。

在下一篇内容中,我们将探讨MVC的UI框架中最后一个内容,如何使用对象池帮助我们优化面板以及预制体的频繁使用带来的性能问题。

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值