MVC在游戏前端的应用,第一篇之问题篇

private public interface 可以解决接入外部事件系统吗? 目前大部分模块对外的接口,就是全局事件系统咯。
就是这个类的函数名字叫:handleXXXEvent,handleServerMessageXXX,这些。不是接口函数

太强了,都是大佬!!!! :rofl:

看得出小弟对mvc的理解很肤浅

赚钱就是mvc,不赚钱就是一坨bull shit

对外的事件有很多解决方式,一是分两个事件对象但是模块编写者比较麻烦,二是定义两个事件范围,例如两个 interface 一个对外一个对内,然后合并类型即可,外部使用者则使用一个对外的类型接口

例如

interface event { ... }

interface public_event { ... }

class model {
    private _event = new SafeEventTargte<event | public_event>();
    get event(): SafeEventTargte<public_event> {
        return this._event;
    }
}

内部使用 _event ,外部使用 event

那我们的全局事件系统不太一样,我们是有全局管线的解耦各个模块。
就是以前flash,现在haxe库里面那种,你也可以看成node.on这种。通过addEventListener,dispatchEvent,以string做key派发的全局事件,不需要从model里面拿event,这样会依赖model。
这些就需要一个类去active的时候listen,然后注册自己的callback handler进去。协议处理也是一样,注册自己的messageHandler进去。
模块交互只需要通过stringkey 的event 来交互,有没有人接收,或者某个模块屏蔽了都没关系。

这只是我举例而已,也可以注册事件由全局对象管理,你举例的 node 是什么?一个全局对象?而且我并不喜欢直接使用 string,因为事件变更很频繁,也没有参数类型提示

就是类似cocos node 去注册鼠标点击回调的那种接口。
全局事件管线是一个全局的对象。所有的模块controller都注册回调在上面,跨模块可以通过这个事件管线来发送消息。
string key 是为了解除对模块显式的依赖,不需要去模块里面取事件引用。所以才用string,你用生成的id,或者命名好的object也可以。

了解了,你这种方式适合管理大型项目,但是如果没有类型提示,那就用起来就有点麻烦,单独一个事件键 enum 是没有太大用处的

业务复杂了是不能这么写的,肯定是多种模式的组合,不要拘泥于一种

待过几家基本都是MC-V的结构比较多,视图层单独拿出来,MC不分家写一个类里。标准的MVC还没遇到过,也可能是因为我重度项目接触的相对少一些。

比如视图层叫XXXPanel,控制层和数据层叫XXXSystem或者XXXModel

你们有没有见过:
Controller 里引用着model,引用着View
Model里 引用着Controller, 引用着View
View里 引用着Controller,引用着Model
Controller能广播消息,Model能广播消息,View里能广播消息, 一个控件监听着3大消息,还依赖于执行顺序

整个项目各个类的关系是一张大网,你中有我, 我中有你

如果你都见过,并且能处理的很好,说明你的工作经验够了,百屎丛中过,片屎不沾身

3赞

:joy:

招人么 马赛克

我在的公司目前不招人,抱歉哈

好吧 谢谢大佬

见过。。。。。。

这… 我感觉出问题要死人的,理不清!

第一次见的时候我是一脸震惊的。然后就跟着项目随大流了,反正不是自己的一手项目就是别人怎么写的就跟着,框架严谨大家遵守规范我就严谨,框架飘逸大家起飞我也跟着飞,主打一个九阳神功

对于以上的b和c,数据处理的代码,有些会放到model里面,有些会放到controller里面。而对于同一个项目,不同的人,可能理解不同,有些人会放到model,有些人会放到controller里面,甚至放到view里面进行处理。

我还真是把view需要的数据放view里了,原因是,我觉得这样才高内聚,而且界面大多不通用,一般会有一些通用的剥离出来的ui组件