免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: shang2010
打印 上一主题 下一主题

[书评] 所谓mvc,这么伟大的思想,无处不在 [复制链接]

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
11 [报告]
发表于 2017-08-01 16:34 |只看该作者
回复 9# yulihua49

MVC 可能传统的前后端不分离的开发模式下是适用的,但MVC是不具备普适能力的,所以非雷同项目没必要往 MVC上靠就像MMORPG的游戏非要靠微服务一样,吃力不讨好

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
12 [报告]
发表于 2017-08-02 10:49 |只看该作者
本帖最后由 yulihua49 于 2017-08-02 11:02 编辑
cokeboL 发表于 2017-08-01 16:34
回复 9# yulihua49

MVC 可能传统的前后端不分离的开发模式下是适用的,但MVC是不具备普适能力的,所以 ...

我前边说了,我们的C/S/S也是按照MVC搞的,应该是具有普世意义的。
单程序才不需要MVC。分布系统才是MVC的意义。
之前你说对C不理解,我才讲了那么多C的问题。不过我认为应该叫MCV。M是服务器,C是管理器,V是界面。

M可以是分布的服务器阵列,C是任务分派管理器+其他资源控制器,也可以不是独立装置,而是被组合在M里的一些功能模块。
也可能是二者结合,有一个独立部件,同时M里也有一些管理函数和接口。
你说的D也是对的,是一个选件,没有数据库的就没有这块。

正如9楼所说,MVC实际上是开发团队里不同特点的程序员分工合作的一种模式,并非仅仅是抽象概念。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
13 [报告]
发表于 2017-08-02 11:10 |只看该作者
本帖最后由 yulihua49 于 2017-08-02 11:45 编辑
cokeboL 发表于 2017-08-01 16:34
回复 9# yulihua49

MVC 可能传统的前后端不分离的开发模式下是适用的,但MVC是不具备普适能力的,所以 ...
  1. do {
  2.                 *buffer=0;
  3.                 r_len=AIO_read(fd,buffer,SDBC_BLKSZ);
  4.                 if(r_len<=0)break;

  5.                 NetHead->PROTO_NUM=0;
  6.                 NetHead->data=buffer;
  7.                 NetHead->PKG_LEN=r_len;
  8.                 NetHead->ERRNO1=0;
  9.                 if(r_len==SDBC_BLKSZ)
  10.                         NetHead->ERRNO2=PACK_CONTINUE;
  11.                 else
  12.                         NetHead->ERRNO2=0;
  13.                 li_ret=SendPack(connect,NetHead);
  14.                 if(li_ret) {
  15.                         ShowLog(1,"%s: SendPack2 ret=%d,err=%d,%s",__FUNCTION__,li_ret,
  16.                                 errno,strerror(errno));
  17.                         close(fd);
  18.                         return -1;
  19.                 }
  20.                 len+=r_len;
  21.         } while(r_len==SDBC_BLKSZ);
复制代码
这是一个M的简单例子,向客户端传送文件。
注意3、14行。AIO_read(),就是一个C层接口。用起来就如同read一样。看起来也是同步阻塞完成任务。SendPack()也是一样。
但是他们都会自动判断是否异步环境,在异步环境下,线程会yield,放弃这个任务,为其他任务服务。直到这个任务的事件出现,就会有一个线程resume,继续这个任务。

这当然是很复杂的资源控制过程,他是由专门的团队提供的,业务人员并不懂这些,也无需懂,按规定调用即可。这个程序是否看起来结构简单逻辑清晰,不像是异步操作那么复杂凌乱?还有一个好处,如果AIO_read()过于复杂不好写,可以先在内部调用read(),马上你就可以提交一个功能测试版,大大加快了工程进度。别人在进行测试时这个C团队就可以慢慢的实现AIO功能。
这就是MVC的作用。



论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
14 [报告]
发表于 2017-08-03 14:27 |只看该作者
回复 13# yulihua49

条条大路通罗马,不管这些概念了,我只是具体项目具体模块不套用MVC之类的

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
15 [报告]
发表于 2017-08-04 20:21 |只看该作者
cokeboL 发表于 2017-08-03 14:27
回复 13# yulihua49

条条大路通罗马,不管这些概念了,我只是具体项目具体模块不套用MVC之类的:mrgreen ...

当然可以。如果是你一个人实现一切。

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
16 [报告]
发表于 2017-08-05 16:27 |只看该作者
回复 15# yulihua49

不是一个人搞定一切,一个团队协作,只要有一致的规范和定义就可以,MVC并不是一切架构的必需品
可能游戏行业的架构比较特殊吧,我们会讲 Big World或者其他,但没几个人去套用 MVC


论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
17 [报告]
发表于 2017-08-05 16:30 |只看该作者
还是比如,你的项目可能没有 V,有 M 有 C, M 和 C 本身是几乎所有项目都要有的,但 V 呢?没有 V,为啥还非要套上说自己是 MVC

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
18 [报告]
发表于 2017-08-05 16:31 |只看该作者
再比如 nginx, 有master 有worker,通常就去讲 master worker的事情,hadoop里的有task之类的,具体的项目里
会有这个项目的具体功能模块(或者是角色)定义,MVC并不是必需品,只是你们当初用类似 MVC的定义来具化了你们
项目里的定义,所以你觉得这是MVC。。。

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
19 [报告]
发表于 2017-08-05 16:40 |只看该作者
回复 15# yulihua49
引用一段百科的
  1. MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。[1-2]
  2. 模型-视图-控制器(MVC)是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。[3]
复制代码
MVC始于桌面程序,桌面程序,还有web这种广泛的项目,都在践行 MVC,而没有 V 的项目也并不少见,所以以这个 V 相关领域的模式想来统一一切编程领域,是不太好的,至少我们团队的游戏服务器项目,不会去被 MVC 强奸

截止目前,我比较反对的就是游戏服务器程序员套用 MVC 和 微服务,很多次同行讨论,很多人硬套,套来套去发现,代码比不用 MVC 不用微服务更加
困难。游戏服务器的特殊性:没有V,强交互,这两点导致 MVC 和 微服务基本不适用。

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
20 [报告]
发表于 2017-08-05 16:52 |只看该作者
本帖最后由 cokeboL 于 2017-08-05 16:53 编辑

回复 15# yulihua49

这就是MVC的作用。

其实你13楼说的这个,我并不觉得是MVC的作用,而是软件架构分层、模块化带来的好处。因为你们的C层命名成其他也行,常规的起个framework的名字效果也是一样。
我觉得研发管理几个最重要的点:
1.架构上纵向分层,横向模块,模块间/进程间用发布订阅/消息队列解耦
2.架构基础之上,团队/人员分工
1的软件架构方法,用在团队管理上是同样的道理,做到这两点,至少在方法论上为团队的敏捷开发
打下了基础,剩下的是各个角色人员的靠谱程度和需求的不断演化和实现了

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP