`
sooxin
  • 浏览: 250943 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

重构我们的Flash客户端

阅读更多

原文来之:http://hi.baidu.com/mr%5Fziqiang/blog/item/5565c013ad1b930b5baf5347.html

 

重构是需要勇气和抗压能力的,因为一些原因让我下决心来完成客户端的重构。

1、需求基本都定型了。

2、以前的代码像团乱麻,全部通过关键的全局变量紧密耦合,牵一发动全身。

3、培养的两个人相继离开,让我开始反思如何让人员流动对项目影响最小。

4、以前的东西想到哪做到哪,根本没有任何架构可言。各种代码注释不清,换一个人基本没法改。

5、UI面上冗余数据太多,可没人敢删东西。

6、很多逻辑已经实现,在重构中可以节省考虑逻辑的时间。

我想很多开发Flash项目的公司或者团队都有着同样的问题,一开始策划不明确,数据结构来回改。一边需要建立基础引擎,一边需要准备随时修改,最重要的是工期还在天天逼着你。很多时候我们也就以先实现再说了。

这样的做法并没有问题,不过我们需要有一个人随时关注我们的改变,一旦需求成型我们应当如何迅速形成架构,建立标准和规范。

Flash网游的客户端架构其实并不算复杂,一个典型的MVC结构可以描述完。接下来就是如何来为MVC定义。

模型其实是最好设计的,但是他和我们的策划息息相关,策划不明确我们的模型事件就不好确定。

视图的实现比较简单,不过Flash里面的组件实在太难用了,根本就不是为游戏开发准备的,ASWing由于不是很熟悉我们没有采用。现在的做法是从编码命名上来做规范,使用黑羽的建议,所有AS文件中有关fla素材的内容全部使用"__"双下划线开头,并且所有的UI类都必须有一个initView方法将素材和私有变量关联。这样即使以后需要换肤,只要按照继续按照这个规则。我们仍可以很快实现。

控制层的规划是最不好做的,控制层负责了服务器指令和客户交互等等事情。我现在还在对控制层修改。

提一下通讯层和协议设定:通讯层不算复杂只负责接收数据把各个解析出来的完整数据包丢出来,通过事件让某个控制器接收就行了。通讯层的独立的优点几乎不用说了,什么时候想加密解密或者干点其他的修改就靠他了。

协议设定其实也没啥规定,不过我的做法基本是完全跟着模型(M)走,一个协议只负责一种模型的数据,如果一个操作会对两个模型数据变化,那么就走两个协议,谁也不挨着谁。这样控制器的工作也会单纯一些,谁的就是谁的都别抢。

最后说一下如何控制人员的问题对项目的影响,当然就是一个成型架构+代码工人的模式了。

过些日子发一点用EA软件重构系统的心得和图片。

分享到:
评论

相关推荐

    【卷一/共两卷】AJAX实战pdf高清版90M

    1.4.1基于Macromedia Flash的方案 1.4.2 Java Web Start及其相关技术 1.5 小结 1.6 资源 第2章 Ajax新手上路 2.1 Aiax的关键元素 2.2 用JavaScript改善用户体验 2.3 用CSS定义应用的外观 2.3.1 CSS选择器 2.3.2 CSS...

    Silverlight MMORPG网页游戏源码

    于是我打算用全新的魔法、炫酷的特效和再一次的重构为这期教程画上句号;虽然依旧伴随着一些客观因素导致的瑕疵,然而更让我欣慰的是这款快被敲烂了的Silverlight MMORPG客户端引擎正逐步迈向成熟。或许Silverlight ...

    asp.net知识库

    C# 2.0会给我们带来什么 泛型技巧系列:如何提供类型参数之间的转换 C#2.0 - Object Pool 简单实现 Attributes in C# 手痒痒,也来个c# 2.0 object pool 泛型技巧系列:用泛型打造可复用的抽象工厂 体验.net2.0的优雅...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包1

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    java开源包11

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    java开源包2

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    java开源包3

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    java开源包6

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    java开源包5

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    java开源包10

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    java开源包4

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    java开源包8

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    java开源包7

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    java开源包9

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    java开源包101

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    Java资源包01

    同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    --我们做了优化,现在要使一个Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。 +PageManager的实例方法AddAjaxUpdateControl改名为...

Global site tag (gtag.js) - Google Analytics