APP下载

基于iOS平台智能点餐系统的设计与实现*

2015-12-05周建亮北京邮电大学网络与交换技术国家重点实验室东信北邮信息技术有限公司

信息通信技术与政策 2015年1期
关键词:常客设计模式菜品

周建亮 北京邮电大学网络与交换技术国家重点实验室东信北邮信息技术有限公司

朱晓民 北京邮电大学网络与交换技术国家重点实验室东信北邮信息技术有限公司

1 引言

近年来移动互联网的发展呈现出势不可挡的势头,在信息化时代,人们的生活节奏越来越快,时间对于任何人来说都是很重要的。当用户拿到一张菜单时,面对很多菜品信息,浏览所有的菜品信息非常耗时,且对菜品的选择也比较耗费精力。因此,餐饮业智能点餐系统是非常有必要的。当下移动终端的APP开发正好非常契合餐饮业点餐的需求,它的便利、易操作等特性深受人们的喜爱,因此本文在iOS平台的基础上设计并实现了一套智能点餐系统。

2 系统总体设计与模块分析

该系统分为两部分:一部分是UI展示及用户信息的收集,呈现在iPad端;另一部分是Server端,负责对数据进行处理。

图1是整个系统的结构图,每一部分是一个模块,下面将简单介绍各个模块的功能。

图1 系统总体架构图

2.1 登录模块

登录模块主要有3个功能:常客(是指过去在餐厅有就餐记录的用户)登录验证、非常客登录、新用户注册。登录模块主要流程如图2所示。

图2 登录模块流程图

商家对于常客与非常客的推荐是不同的,因此需要区分这两种登录模式。对于常客来说商家有常客的历史记录,因此登录后产生的推荐信息是与非常客的内容不一样的。另外,在登录模块中还需要有注册模块,注册模块主要就是收集新用户个人信息。另外,还有一点是流程图中所没有表现出来的,无论对于哪一种登录方式,用户都可能登录失败,因此登录失败后,系统会弹出一个Alertview(提示框),用于提示用户登录失败的原因。登录失败原因可能会有很多,但一般可以分为两类,一类是用户输入有问题;另一类是系统原因,而系统原因有可能是网络故障或者后台数据库出问题等。当登录失败时,系统需要告知用户出错的原因。

2.2 分类模块

这部分会按照分类展示菜品,如按照主食、汤菜、酒水、肉菜、素菜、凉菜分类,目的就是在用户不接受系统提供的推荐菜品时,可以让用户快速地按照分类信息寻找自己需要的菜品。

2.3 菜品模块

这个模块比较简单,就是提供菜品相关的详细信息,如菜品的图片、介绍菜品的短视频、菜品的文字介绍,其他用户对菜品的详细评价信息。主要是帮助用户了解当前菜品的相关详细信息。

这个模块还有另外一个重要的信息,就是显示当前菜品被点的份数,从用户角度来讲这个需求是很合理的,有的时候用户可能又回到之前已经点过的菜品信息了,而用户可能记得不大清楚是否已点过此菜品,这里会用到一种称为观察者的设计模式。

2.4 订单模块

这个部分相对来说是比较重要的,从客户端到Server端对于整个推荐系统来说都是异常关键的。当用户的一次订单信息产生后,我们需要将这部分信息记录下来,将这部风信息记录到数据库中,是推荐部分的数据基础。如图3所示,对于订单页中的每一份菜品,我们还可以增加、减少份数。另外,如果用户觉得某个菜品不需要了,还可以删除。当然,当用户需要删除的时候会弹出一个Alertview来提示用户确认删除以防止用户错误地删除某个需要的菜品。最后,当用户确定了菜品后,就可以提交菜单了。

图3 订单模块图

2.5 Data Manager模块

这个模块是为了简化数据业务处理,减少模块之间的耦合度,使用了设计模式中的外观模式,也是面向接口编程的一种实现方案。具体接口设计如图4所示。

图4 Data Manager接口设计图

由于接口比较多,图4中只是一部分的接口。这个接口是全局都要访问的,因此可以看到sharedData这个类函数,这个类函数的功能就是把此类设计成了一个单例类。无论是哪个模块需要什么数据只要访问这个类就可以,任何模块都不需要知道具体是怎么实现的,只需要处理返回的数据与错误信息。当返回数据有误时,可以提示相关的信息。

2.6 AF Networking模块

这个模块主要就是负责iPad客户端与服务器端的网络交互,使用的技术主要是NSURLConnection以及NSOperation技术,实现了多线程并发的功能,提高了客户端与服务器的交互效率。

2.7 Cache模块

Cache模块的功能主要是提供在客户端的缓存功能,主要目的就是为了提高存取数据的效率,最终目的是为了改善用户体验,使用的是LRU算法,并且设计了二级缓存策略,如图5所示。

之所以会设计这个模块,也是因为在实现过程中发现了一些确实存在的问题。整个系统要展示很多的图片,而图片的资源又非常大,导致于一旦浏览过多的图片资源会使得整个系统的内存负担增大。使用Instrument工具,观察整个系统的运行状况可以发现,当浏览一个新菜品信息时,整个系统内存增加了2~3M的数据,多的时候甚至达到6M,这是很可怕的数据,很容易发生Memory Warning,很可能系统就会Crash。根据检测结果发现这些数据并没有被及时地释放,所以本系统随后又增加了这个模块,以使访问速度与内存占用空间达到一个比较好的平衡。

图5 Cache模块流程图

2.8 Server模块

负责处理用户请求,根据用户的请求做出相应的反应并与数据库进行交互,进行数据的存取操作。

2.9 数据库模块

数据库是用于存储数据的仓库,使用的技术是MySQL。

2.10 推荐模块

推荐模块分为两个部分,一个是iPad客户端的部分,另外一个部分是服务器端,iPad客户端用户展示推荐菜品的展示,也就是我们所能看见的部分。

服务器端是非常关键的部分,为达到“智能”的目的,除了采用已经比较成熟的推荐算法外,笔者还设计了一套基于“人数”的推荐策略。经常会遇到这样的场景:若干人去餐厅就餐,然后服务员把菜单拿上来,点菜的时候无从下手,推来推去,最后比较浪费时间,而且点的菜也不一定合适。而笔者设计的这套推荐策略能比较智能地解决这个问题。众所周知一般情况下,固定人数点的菜品数量一般变化不大而且非常相近的菜也不会点两份。基于这样的情况,首先基于人数推荐若干套同样人数大众所喜爱的菜品,然后用户会从这若干套菜品中选择一套比较符合他们期望的菜品,但有可能会有一两个菜品可能有忌口或者不是很合适,需要替换,这时系统会使用协同过滤算法推荐相近的菜品(见图6)。

图6 基于“人数”的推荐策略图

●对于非常客的推荐

很显然非常客没有历史点餐记录,因此对于这部分用户,商家没有办法按照其历史记录来推荐菜品。但可以按照其他用户的数据来为非常客用户推荐菜品,按照其他用户对菜品的评价而从中分析计算出得分比较高的内容推荐给这部分用户。这是这个系统最基础的推荐部分。

首先,肯定要看用户是否选择基于人数的推荐,若不选择则推荐给所有其他用户评价比较高的菜品,当选择一道菜品后,然后推荐与该道菜品关联度最高的菜品,则进入人数推荐的策略。

●对于常客的推荐

常客与非常客是有区别的,因为常客拥有自己的历史数据,可以按照历史数据来产生推荐菜品。

3 关键技术

3.1 多线程技术

由于终端需要与服务器交互,因此必然会涉及到异步请求数据,这部分会对整个系统的用户体验产生很大的影响,其中用到的多线程技术主要有:

●NSThread,这是比较轻量的线程技术,每个线程的生命周期都是自己管理的,使用起来可能有点麻烦。

●NSOperation,这是面向对象的一种线程管理技术,使用起来比较方便,可以很好地控制任务并发数量,并且可以添加人物之间的相互依赖关系。

●GCD,这一套多线程技术,底层全部是通过C函数实现的,可以比较高效地利用系统CPU资源。

3.2 Runoop技术

Runloop是与多线程相互配合的一种技术,Runoop事实上可以被理解为Event Cycle(事件循环),简单地说就是可以提高CPU的使用效率。比如进行网络资源的获取时,这时候CPU不用等待就可以去干其他的事情。

3.3 设计模式

由于整个系统的完成都是在面向对象的基础上,所以设计模式也是尤为关键的。各个模块之间需要进行数据的交互,为了减少各个模块的耦合度,需要合理地利用设计模式,如MVC、观察者模式、代理模式在系统中都用得非常多。

4 结束语

本文基于iOS平台设计并实现了智能点餐系统,利用设计模式的相关知识使得整个系统的结构非常清晰,在稳定性、可扩展性方面都表现得相当不错,以后功能扩展及维护能明显地降低开发成本,另外使用UIKit及多线程技术使得整个系统的UE非常流畅。

1 张亮.推荐系统中协同过滤推荐算法若干问题的研究.北京邮电大学.2009

2 王茜,王均波.一种改进的协同过滤推荐算法.计算机科学.2010

3 杨宏焱.企业级iOS应用开发实战.2013,1

4 Joe Conway,Aaron Hillegass著.夏伟频译.iOS编程.2013,3

5 达尔林普尔,纳斯特著.高朝勤译.Objective-C基础教程.人民邮电出版社.2009

6 Carlo Chung著.刘威译.Objective-C编程之道:iOS设计模式解析.人民邮电出版社.2011

猜你喜欢

常客设计模式菜品
“1+1”作业设计模式的实践探索
团膳菜品质量管理存在的问题及完善策略
常客
迷惑菜品又来了
三维协同设计模式下的航天项目管理实践与展望
交通机电工程设计模式创新探讨
鸡蛋也搞笑
假蒟叶系列菜品的开发利用现状
互动式设计模式研究
话说不等式x1x2<0