美文网首页
一种MVC架构的改良方式

一种MVC架构的改良方式

作者: zthh | 来源:发表于2019-11-02 17:00 被阅读0次

    2017-09-06 博客迁移 《一种MVC架构的改良方式》

    在国际象棋项目里,核心对局采用常见的MVC架构,但由于对局逻辑相当复杂,如果不解耦就会导致C层代码非常多。由于大部分逻辑都是请求-响应的结构,所以便有了把请求(Cmd)和响应(Action)从C层文件中抽离出来的想法。

    具体结构图如下:

    image

    Cmd和Action的定义:

    每一个单独的请求都对应一个CmdXXX类,如进房、坐下、等待、开始、退出、再来一局、走棋、放弃等,每一个CmdXXX是IChessCmd接口的实现,CmdXXX只需要定义DoCmd具体的逻辑即可。

    image 同理每一个请求的响应都对应一个ActionXXX类,每一个ActionXXX类是IChessAction接口的实现,ActionXXX只需要定义DoAction具体的逻辑即可。 image

    IChessCmd中DoCmd的形参为发出请求所需要的参数 IChessAction中DoAction的形参为请求响应的参数

    Cmd和Action的目录结构
    image image

    在Controller初始化Cmd和Action

    在Controller利用字典映射的方式,以key为枚举值,value为对应的Cmd或者Action,初始化_dictCmd和_dictAction。

    image image

    Cmd和Action的执行

    在Controller层定义DoCmd和DoAction方法,当发出一个请求是,比如要发走棋协议,就执行ChessGameController.GetInstance().DoCmd(EnumChessCmd.eCmdMove, _srcX, _srcY, _dstX, _dstY, (int)selectType);selectType为所走的棋子类型。当协议回包到达时,Controller就调用DoAction(EnumChessAction.eActionMove)走回包响应的逻辑。

    image

    在项目中,Controller有一个自己的消息接收队列,每一帧轮询队列,如果队列有信息,将信息pop出来,并执行对应的Action操作。

    优缺点

    优点:

    1、减少C层代码

    2、结构清晰,适合涉及多协议交互的逻辑

    3、在项目后期有新成员加入,CodeReview的时候只需要花10分钟讲解一下这种架构,新成员都反馈说这种架构很清晰,一听就懂,学习成本很低。

    缺点:

    1、不适合简单协议交互的逻辑,比如个人信息界面,只涉及拉取个人信息的逻辑,不需要也不建议用这种架构

    相关文章

      网友评论

          本文标题:一种MVC架构的改良方式

          本文链接:https://www.haomeiwen.com/subject/eyhhbctx.html