MMO之禅(一)开论

--由Begin()End()出发,接口抽象,功能模块化

Zephyr 201303

以前初学DirectX的时候,

对渲染帧开始结束的时候调用Begin和End函数曾有点感到困惑过,

Why ?How?当时一知半解,

后来也没太在意这个问题。

前几日写了一个本地化数据的二进制导出器,

一开始由于自己用的是连续内存地址的数据,

所以就简单设定了传入数据指针和数据包大小的接口,

在模块内判断数据有效性后就直接开始序列化I/O操作,

而后,

由于一些同事所用的非连续数据(List,Tree)之类的数据也想用我的现成接口,

问题就出现了,

该如何导出?

有两个法子,

第一,把我的导出器代码简单地拷一份出去,然后由其自行改动实现;

得二,改进接口,使之通用化;

一方面,MMO,进度自然压得紧,节点时间在即,

另一方面,调试人手、时间都不充足,节点要求也高,不容有错,

该如何定夺?

还没定下,

正好自己检查的时候无意发现了一定时序下,I/O句柄会无法关闭,

导致整个导出器和对应的数据读取失效,

这是个隐蔽的Bug,发现也实属巧合,

暗想,同事那边手头活也多,如果代码直接拷过去,

到时候Bug的帐,我是也逃不过的,

痛定思痛,立马决定重构接口,

泡杯茶楼道里走了两步,

正好想到VB IB等Buffer常用的Lock Unlock函数,

我这个不也是可以这样么?忽然灵光一闪,

这也不就是DX里的Begin,End接口么?!

DX的指令提交,Buffer的写入,还有我的Binary数据导出,,

不都是一回事么?!

心中一万头草泥马呼啸而过,直骂自己太蠢,

简单总结

"为了应对复杂非连续的数据导出,

可以先行传入要导出的目标类型给Begin(),

然后由导出器模块暴露出如UE的一个Archive指针,

对Archive进行自由操作完成后.

再由导出器模块的End()函数完成Flush,

统一的接口,自由地操作."

临近周五下班,整个人也处在兴奋状态,

敲定接口,编码,调试,

结果整个过程也就50分钟左右,也并没有花太多时间,

远比预计的要少。

东西很简单,方法更是简单,

周末静下时间开始后知后觉地感到不安了,

可如果不是同事提,不是自己发现了bug,

那么这个模块还是会一直保持原样么?

答案很可能是会一直是。。。

工作工作时间也不短了,

项目的烦杂,薪资的可怜,

让自己的热情越来越冷淡,

巧劲,hack,为任务而任务,

常常一知半解,得过且过,

这样下去,自知难以成长,绝不可取,

那就得总结改进,

从问题的根源开始,

是由于一开始的抵触心理,

药方并非“要勇敢地重构,推倒再来”或者”No ugly code anymore“那么简单,

还好念书时养成的一个癖好,

平时所思所想习惯性地记下来,

工作后也有一堆大本子搁着了,

正好静下来好好仔细消化总结一下,

废话半日,赧颜书文MMO之禅,

不言其然或所以然

只谈为何使然,

望能给予后来者以帮助。

首先,MMO,是一个完整的软件工程项目,

计划,编码,检查,改进,

各司其职,密不可分,

作为一个码农来讲,首先重要的是一个全局观

首先抄书:

软件工程,阶段

定义阶段:         可行性研究初步项目计划、需求分析
开发阶段:          概要设计、详细设计、实现、测试
运行和维护阶段:运行、维护、废弃

内涵

软件工程过程是指为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动,包括以下四个方面:

1,P(Plan): ——软件规格说明。规定软件的功能及其运行时的限制。
2,D(DO)    ——软件开发。开发出满足规格说明的软件。
3,C(Check)  ——软件确认。确认开发的软件能够满足用户的需求。
4,A(Action)  ——软件演进。软件在运行过程中不断改进一满足客户新的需求。
这些,亦同样适用于生活工作的方方面面
原则
1,抽象
2,信息隐蔽
3,模块化
4,局部化
5,确定性
6,一致性
7,完备性
8,可验证性
作为工程中的一员,大我的目标当然只有一个,

利益的最大化,

如何达到?

答案人人皆知,开源节流。

在研的项目,除了提升自身品质外,自然无法开源,

那就是节流,节流绝非只有死抠研发成本,

更好的一路是提升效率,

回归本质,就个人到现在体会到项目上常常造成的效率瓶颈常常有:

架构成本,

交互成本,

调试成本,

沟通成本

。。。

正如同前面所提原则的第一大块即即是抽象,隐蔽,模块化

严格控制粒度,防止耦合度过高,

就可以很好地防止以上成本对项目的无谓耗费,

具体在实际中,

就是接口思想,重用思维,

在实际编码的过程中,

优先整体架构,规划,

不断抽象,求精,

首富大人Gates曾说过真正优秀的人才,是聪明的懒人,

聪明的懒人拥有极致主义精神,

会力争”一劳永逸“的解决方案

因为他们的效率而节约下来的时间,

远大于后头测试,Debug的时间。

故而,

我们需要不断地总结,思考,

提高效率,

找出可以减少错误,有效偷懒的好路子~

@Todo

后边的还有好多,思路慢慢整理,

协作,配合,

架构,数据结构与算法,

本着只谈为何使然的原则,

准备将这些都大言过一遍,

。。。

转载于:https://www.cnblogs.com/Zephyroal/archive/2013/03/18/2966338.html

MMO之禅(一)开论相关推荐

  1. MMO之禅(二)职业精神

    MMO之禅(二)职业精神 --心态 目标 信仰 Zephyr 201304 继续上篇,继续讲什么?打了很多腹稿点滴,从引擎架构,到上层数据.逻辑模块规划,想了很多,临起笔,却总发觉四顾心茫然,乱不可言 ...

  2. 设计模式之禅之开闭原则

    声明:本文为阅读秦小波所写的<设计模式之禅>所写小结,文章内容可能有部分引述此书. 开闭原则(Open Closed Principle):对扩展开放,对修改关闭 1.定义:    软件实 ...

  3. JS 实现段落展开和收起的显示

    JS 实现段落展开和收起 一.利用高度来实现 效果图 二.利用显示字符个数实现 效果图 一.利用高度来实现 效果图 <!DOCTYPE html> <html lang=" ...

  4. 田野调查手记·浮山篇(二)

    此系列文章均来自于文乡枞阳,作者王乐群,特此说明. 田野调查手记•浮山篇(二) 作者:王乐群 本篇为你介绍<明神宗皇帝御赐龙藏敕书碑记>. <明神宗皇帝御赐龙藏敕书碑记>,立于 ...

  5. 花开就是禅,多情即佛心

    用一生的时间静待一朵花开,用一生的痴恋唱一首情歌,虽然残酷,但很唯美.放了一生,也无法放下的爱,如古老庭院里石缝间寂寞的花草,羞羞怯怯,却拚了命地顽强生长,夜深人静时,在满月的清辉下,静静绽放.   ...

  6. 网易放大招?生存MMO手游明日之后开测,沙盒+大逃杀游戏你喜欢吗?

    明日之后什么时候上线公测?网易自研的开放世界生存MMO手游明日之后即将在5月10日开启限量测试,本次测试为删档不收费测试,并且IOS和安卓均有测试资格.这次算是第三次测试,本轮测试完成之后不出意外就离 ...

  7. 测开 - 测试管理工具禅道篇 - 细节狂魔

    文章目录 前言 准备工作 安装"禅道" 安装Python环境 - 了解(后面的博文使用的是 Java 来写自动化脚本) 安装 pycharm 工具 - 了解 常用测试管理工具 QC ...

  8. 设计模式六大原则(6)——开闭原则

    定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会在旧代码中引入错误,也可能会使我们不得不对整 ...

  9. 禅道程序员的10条原则

    在一个阴雨的早上,我坐在桌子旁,开始想如何才能高效的工作.在我成为一个自由职业者之前,我有很长一段时间都很努力工作,但收效甚微. 我在2006开始接触禅学.我马上意识到:古代的禅宗大师们几百年前早就已 ...

最新文章

  1. 酷派奖励程序员10 万股期权!因代码贡献受 Linux 之父亲自点名赞赏
  2. MySQL创建触发器(CREATE TRIGGER)
  3. 笔记-项目进度管理-精简
  4. python/Django(增、删、改、查)操作
  5. jenkins 插件目录_三十二张图告诉你如何用Jenkins构建SpringBoot
  6. 【CodeForces - 124D】Squares (旋转坐标系,计算几何,思维)
  7. jQueryEasyUI框架 - panel 选项卡高度自适应
  8. Android之使用SoundPool播放一小段音频,实现猜歌的功能
  9. java ocr linux_linux系统如何使用tess4j(java)进行ocr图片文字识别
  10. centos Apache、php、mysql默认安装路径
  11. 具有system权限的进程无法访问sdcard
  12. CC***原理及防范方法
  13. Gephi从入门到精通
  14. 局域网技术,涉及到VLAN,TRUNK,链路聚合,VLAN间路由,单臂路由,
  15. Android数据库框架Sugar的使用
  16. 互联网和大数据是什么意思_互联网包括大数据吗 大数据与互联网的关系是什么...
  17. 智慧城市大屏可视化(Axure高保真原型)
  18. 10G整数文件中寻找中位数
  19. 计算机备份应用程序无法启动,由于内部错误,备份应用程序无法启动如何解决-解决“由于内部错误,备份应用程序无法启动”的方法 - 河东软件园...
  20. android软件版本升级时,安装新版本后,没有出现安装成功界面或直接回到桌面

热门文章

  1. Unity:RectTransform面板属性获取
  2. 摩尔斯电码转换python编码_摩尔斯电码到英文python3
  3. Java 基础语法7
  4. curl采集 根据关键词 获取雅虎竞价排名
  5. Keystone简介
  6. 【牛客网】【埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛】B—合约数【莫队做法】
  7. css的height,min-height,max-height,min-width.....
  8. springboot微服务注册到nacos平台
  9. uboot移植(九)移植网卡DM9000
  10. 买的美国服务器怎么上传文件,虚拟主机空间的文件怎样上传和实现的