APP下载

移动互联网应用开发中极限编程和设计模式的实践

2012-02-08

湖南邮电职业技术学院学报 2012年3期
关键词:通信协议编程客户端

王 玲

(广东邮电职业技术学院计算机系,广东广州 510630)

移动互联网应用开发中极限编程和设计模式的实践

王 玲

(广东邮电职业技术学院计算机系,广东广州 510630)

移动互联网具有终端类型多,底层实现协议各异的特点,极限编程中的几种最佳实践:隐喻、简单设计、测试驱动、重构,以及“MVC”架构、“策略strategy”模式、“观察者observer”模式等,有效地针对移动互联网应用的特点,给出一种有效的实践。

移动互联网应用;极限编程;设计模式

移动互联网的开发比起其他的软件开发有其自身的特点,比如:终端类型、浏览器类型很多,屏幕分辨率不同。即使是同一个手机的同一个浏览器也有适应屏幕模式和缩放模式。这就给页面的兼容开发带来了很大的难度。另外,很大部分网站都是在有线互联网版本的同时推出移动互联网版本。并且,由于移动业务的特点,需求变更的要求更高。如何快速、高效完成需求的变更,而又不影响系统性能,这给移动开发者提出了挑战。针对以上的移动互联网开发的特点,采用极限编程的方法,同时在设计上采用 “MVC (Model-View-Controller)架构”, “策略 (strategy) 模式”, “观察者 (Observer)模式”等。

1 需求分析中的“隐喻”(Metaphor)

XP(eXtreme Programming)极限编程中的“隐喻”[1],就是在客户和项目开发组的所有人员之间设定一个容易理解的“样本”或“参照物”,大家更容易理解需求的主要内容,减少误解和偏差。例如开发一个即时通讯系统,就可以拿QQ和MSN作为参照,QQ和MSN在收发消息的时候的流程是:

1)试着向谈话对方直接发送消息,使用UDP连接;

2)如果第一步失败,说明谈话对方IP不能直接到达,可能是出了网络问题,于是把信息发往服务器,由服务器负责转发。

3)如果服务器也联系不上对方,就把信息暂存一段时间 (“离线消息”),等待对方上线后再发送此消息。

因为手机等移动终端接入互联网时,分到的是一个内网的IP地址,而非公网的IP地址,所以两个终端上无法互相通信的,所有的信息都需要经服务器转发。

需求基本明确后,列出期望实现的用例:

1)登录,退出;

2)显示在线好友列表;

3)接受好友发送的信息;

4)选择好友并发送消息;

5)添加、删除好友;

6)支持离线消息;

7)发送表情。

肯定还能想出很多的其他功能,但是XP推荐的做法是:

1)不做力所不能及的事情——目前不需要在需求和设计上花太多的时间;

2)从最简单的开始——尽快建立一个原型系统;

3)不断改进——根据原型系统提供的反馈不断调整工作计划。

2 测试用例的设计

在实现每一项功能之前,先写出对其功能的测试代码——“测试先行”[2]。“测试先行”的目的是:

1)设计好的架构——易于测试的架构一般是灵活的架构,因为这要求各个部件之间低耦合、高内聚。

2)提高软件质量——人们往往在实现功能之后,会忽略测试,或者测试不足,从而降低软件的质量。

3)移动互联网编程中包含网络通信部分,要实现一个通信协议,调试很麻烦,最好的办法就是“不调试”——用测试驱动,将bug消灭在萌芽阶段。

4)便于客户和开发方的交流——使开发人员以客户或测试人员的角度看待问题、分析需求,从功能出发进行设计。而且测试代码可以准确无误的传递客户的要求,而自然语言几乎总是有歧义。

5)写测试代码的过程中,要考虑实现哪些功能,如何定义类与类的协同关系,如何分配类的职责和对象的创建方式,通过重构提高复用性和可扩展性,改善程序结构。

3 测试代码的实现:“登入”和“退出”的测试

测试代码的实现应该遵从“由外而内”的原则,一个好的方案首先应该考虑的是外部的接口,然后才是内部的实现。这种思想是让设计去迎合需求,而不是让需求去迎合设计。

写一个“登入”和“退出”的测试:新建一个类TestLog,TestLog会启动一个服务器,指定服务器在某个端口监听。然后再创建两个客户端,让其登入服务器。测试整个系统各项状态是否正常,比如是否在服务器有两个客户端成功登入,又能成功退出。虽然功能简单,但是其中涉及到:服务器端、客户端、网络驱动、通信协议等。

测试的框架如图1所示。

图1 TestLog测试框架

4 架构设计

4.1 采用MVC框架——Model、View和Control

Model是“业务逻辑”模块,View是“显示”模块,Control是“用户操作”模块。将“显示”、“业务逻辑”和“用户操作”的代码分开编写,各个部分之间通过定义好的接口来通信。对“业务逻辑”进行测试的时候,并不使用“显示”和“用户操作”模块,而是写一些“脚本”模拟用户操作,这样省去了每次都要用模拟器键盘和鼠标进行测试的麻烦。这样做的好处至少还有三方面:

1)“业务逻辑”不该受限于某个具体平台,而“显示”和“用户操作”却是平台相关的,所有把这三部分分开会增加程序的可复用性,我们可以在PC机上做“业务逻辑”的测试,再移植到不同的移动终端上;

2)可以为不同的移动终端设计不同的用户界面;

3)可以支持“换肤”功能。

简单来说,三部分的内容可以是这样:

View部分:

1)从Model读取用户列表并显示在移动终端的屏幕上;

2)接受Model发来的新消息,将其显示在移动终端的屏幕上;

Control部分:

使屏幕上的控件接收用户的命令,传送给Model。

Model部分:

1)通信协议;

2)信息编码;

3)多线程处理;

在不同的平台、不同的硬件和网络环境下也可能需要不同的通信方案,所以把网络协议communication模块再独立于Model,以做到平台无关性,有利于不同的通信方案的更换。

图2 初始系统架构图

4.2 网络协议Communication模块

把网络协议Communication模块独立出来,是“策略 (strategy)模式”的实践。“策略(strategy)模式”的主要意图就是定义一系列的算法,将他们封装起来,并且可以相互替换,使得算法可以独立于它的客户而变化[3]。

Communication模块实现通信层的隔离,可以使得系统结构更清晰,也可以方便扩展新的通信协议。

这里为服务器端和客户端分别设置两个抽象的接口:ServerProtocol和 ClientProtocol。Server和Client不直接进行任何的网络操作,不需要涉及任何的通信协议的细节,而是通过这两个Protocol类来完成。图 3中的 FirstClientProtocol和FirstServerProtocol就是通信协议的一种实现。

图3 带有protocol接口的架构图

4.3 服务器端和客户端通信的管理模块ClientConnection的引入

图4 添加了ClientConnection的服务器类图

每一个连接到服务器的客户端,Server都需要为其创建一个线程类维持通信,设计一个“客户端连接”类ClientConnection来负责与客户端进行通信。这样Server就不再负责与某个客户端通信的工作,而是负责创建和维护 0到多个ClientConnection。由 ClientConnection直接与ServerProtocol打交道,Server只负责接受连接请求, 可以 直接 引用 ServerConnection。ClientConnection应该只知道ClientProtocol,而不是自己去创建FirstClientProtocol,这就需要引入“抽象工厂”模式了。“抽象工厂”模式主要意图就是为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类[5]。

4.4 消息帧的收发

登入请求应该包装为一个“登入消息帧”,ClientConnection接受到登入消息帧之后,解析出用户名并保存在自己的成员变量String Username中,以备Server查验。消息帧Frame没有成员方法,只有成员属性,是用来传递数据的“数据类”。

消息帧的底层方法主要有两个:发送一帧数据sendFrame()和读取一帧数据readFrame(),这两个方法的使用者是FirstServerProtocol和FirstClientProtocol,但是如果这两个方法放在这两个类中,会造成代码冗余。所以把这两个方法抽取形成一个独立的类FirstProtocol,负责通信协议的底层的帧收发。与OSI的七层模型相对应,FirstServerProtocol和FirstClientProtocol相当于应用层,FirstProtocol相当于传输层。

图5 将“帧的收发”独立为FirstProtocol

FirstServerProtocol是“事件驱动”的,ClientConnection采用“观察者 (Observer)模式”的设计。“观察者 (Observer)模式”的主要目的就是定义对象间的一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都得到通知并被自动更新[4]。

图6 服务器实现了登入请求处理之后的系统总体框架图

整体系统的服务器端和客户端设计如图6和图7所示。

图7 客户端类图

5 结语

“MVC”架构有效的实现了移动互联网的表现层、控制层和模型层的分离,极限编程中的几种最佳实践:隐喻、简单设计、测试驱动、重构,以及“策略strategy”模式、“观察者observer”模式等有效的适应了移动互联网应用开发的特点。

[1]Robert C.Martin,Micah Martin.敏捷软件开发原则、模式与实践[M].北京:人民邮电出版社,2003.14.

[2]张逸.软件设计精要与模式 [M].电子工业出版社,2007.11.

[3]Gamma E,Helm R,Johnson R,Viissides J.Design Patterns:ElementsofReusable Object-Oriented Software [M].1995.315.

[4]Gamma E,Helm R,Johnson R,Viissides J.Design Patterns:Elements of Reusable Object-Oriented Software[M].1995.293.

[5]Gamma E,Helm R,Johnson R,Viissides J.Design Patterns:Elements of Reusable Object-Oriented Software[M].1995.87.

Practice of extreme programming and design patterns on application development in mobile Internet

WANG Ling

(Department of Computer,Guangdong Vocational College of Posts and Telecom,Guangzhou,Guangdong,China 510630)

There are many different types of terminals and communication protocols in mobile internet.Extreme programming has several best practices such as metaphor,simple design,test driving,reconstruction,“MVC”structure,“strategy”pattern,“observer”pattern and so on.According to the characteristics of the mobile Internet application,the paper gives an effective practice.

mobile Internet application;extreme programming;design pattern

10.3969/j.issn.1671-9581.2012.03.011】

TP393.01

A

1671-9581(2012)03-0046-05

2012-05-22

王玲(1971-),女,甘肃兰州人,广东邮电职业技术学院计算机系讲师,系统分析员,工学硕士,研究方向:基于网络的计算机应用。

猜你喜欢

通信协议编程客户端
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Z-Stack通信协议栈的红外地温采集电路设计
基于DMX512通信协议的多路转发器设计与研究
基于NS-3的PLC多频通信协议仿真平台设计与实现