过度设计,被教育
来源:互联网 发布:网络种子什么意思啊 编辑:程序博客网 时间:2024/04/30 06:34
昨天完善创建角色的游戏服务端逻辑。创建角色失败时,服务端要告知客户端具体的错误原因——比如角色名不可用,或SQL语句错误等。代码中原有的思路是,向客户端发一个ID为CREATE_PLAYER_ERR的包(这个ID是应用层的协议),包内含有具体的错误码,客户端在CREATE_PLAYER_ERR包的处理函数中根据错误码向玩家显示具体的出错消息。
我们的服务端是由C++和lua编写,客户端则是用C#编写。包的ID写在一份lua文件中,叫msg.lua。项目构建时,会根据msg.lua生成相应的.h和.cs文件,这样C++代码和C#代码就可以直接在代码中书写CREATE_PLAYER_ERR这样的ID,而不用写ID数值这样的magic number。但是像错误码这样的二层协议却没有这样相应的自动生成机制。错误码的ID(如CREATE_PLAYER_NAME_INVALID)只在lua中可用,C++和C#里则只能使用ID的数值,比如 if (errcode == 2)这样。
我在编码时是很难容忍magic number的,然而又不想大动干戈地为错误码添加自动生成机制。因此就对报错逻辑进行了改动,利用msg.lua,将不同的错误原因编码成不同的包ID,不再采用错误码。这样创建角色的过程中,遇到不同错误时,就发不同的包。
不过今天开会时,这样的做法被吐槽了,因为这样的思路比较非常规。一来这样的做法如果在项目中推广开来,则会占用很多的包ID。另外一方面,在这种思路下,客户端要为不同的错误原因单独定义一个包处理函数,客户端的代码也不太好写。对于magic number的问题,因为创建角色的错误码不多,且错误码变动的可能性很小,所以完全在这种情况下完全是可以接受的事情。程序老大教育我:Unix下有一个准则,即KISS,尽量不要为看不见的需求写代码。
师兄知道这事后拍手叫好,说我活该——他终于翻身了- -。 我的代码洁癖是该改改,太完美主义了,在不要紧的地方花费了太多精力。
- 过度设计,被教育
- 设计过度
- 过度设计
- 大腕之过度设计
- 大腕之过度设计
- 避免过度设计
- 过度设计警界
- 实用主义和过度设计?
- 不要过度设计
- 什么是过度设计?
- 避免过度设计
- "设计不足"与"过度设计"
- 设计不足与过度设计
- "设计不足"与"过度设计"
- 你的项目框架是否被过度设计了?
- 大腕 之过度设计 [转]
- 避免过度设计:有所为有所不为
- 软件测试中的过度设计
- 1874 Bellman-ford算法 队列优化过的 用于稀疏图,有负权的图
- android 用json格式同步数据库数据时遇到null值如何传递
- javascript对数组的申明、访问、转换、遍历、排序
- 死锁
- Sublime与notejs使用
- 过度设计,被教育
- Linux下Tomcat的启动、关闭、杀死进程
- c语言相关
- linux下tomcat服务的相关命令
- poj 1741 (点分治入门)
- javascript的回调函数
- 花香
- QT之让QDialogButtonBox::Ok 变成中文”确定“显示
- 连通性问题