Javascript 模拟mvc实现点餐程序案例详解


Posted in Javascript onDecember 24, 2020

Javascript 模拟mvc实现点餐程序案例详解

MVC模式是一个比较成熟的开发模式。M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。今天就来模拟使用MVC模式开发一个点餐程序,当然,只是就此案例来说明MVC在前端的实现参考,并没有完整的实现。程序很简单,与传统的MVC三层架构不谋而合。

首先,先介绍一下场景:顾客进到餐馆,拿着菜单点餐,服务员记录并发到后端厨房,厨师接到订单,按照订单的菜品去制作,制作完毕通知服务员取餐,服务员将菜品送到客户餐桌,顾客就餐,完毕。我们看一下业务流程图:

Javascript 模拟mvc实现点餐程序案例详解

在这个案例中,M对应的是菜品订单,C对应的就是服务员,V对应的就是顾客。服务员将顾客和厨师连接到一起,但是顾客并不直接与厨师沟通与接触。服务员需要监听菜品的完成情况,一旦完成,厨师会通知服务员取餐,并送到顾客餐桌。我们看一下最终的界面:

Javascript 模拟mvc实现点餐程序案例详解

界面共分为4个区域:

  • 菜单: 顾客进到餐馆的第一个动作,拿菜单点菜。
  • 已点:顾客点完菜,即生成点菜订单。
  • 制作:后厨根据订单制作菜品。
  • 餐桌:制作完成的菜品会被端到顾客的餐桌。

程序用H5实现,包含一个展现的页面order.html,一个order.js。order.js包含两个类:Food(食物类)和Controller(点餐控制器)。

菜单的实现如下:

Javascript 模拟mvc实现点餐程序案例详解

当然,得响应菜单的选择,要实现这个功能,我们还得引入食物和控制器。

首先,看一下食物类的定义:

Javascript 模拟mvc实现点餐程序案例详解

注册监听器:

Javascript 模拟mvc实现点餐程序案例详解

这里的监听器在实际的场景中当然是指上菜员了,从程序架构角度这里是支持多个监听器的,很多业务场景下一个数据的改变可能会影响到多个界面的更新。这个点餐程序传入的实际就是一个回调函数,食物制作完成则调用该函数更新界面显示(上菜)。

最后,食物制作完成:

Javascript 模拟mvc实现点餐程序案例详解

食物制作完成,轮询监听器,执行回调函数。

接下来,引入点餐控制器,这可是数据和界面的纽带(后厨和顾客)。看控制器定义:

Javascript 模拟mvc实现点餐程序案例详解

这个控制器里面存放了顾客点的菜品。

当然了,控制器还应包括点餐:

Javascript 模拟mvc实现点餐程序案例详解

这里的Javascript 模拟mvc实现点餐程序案例详解就是传入的回调函数。定义如下:

Javascript 模拟mvc实现点餐程序案例详解

另外,这个控制器应该还包含查找指定的食物:

Javascript 模拟mvc实现点餐程序案例详解

好了,至此,order.js的全部内容已经完成。

Javascript 模拟mvc实现点餐程序案例详解

回到页面,我们需要在页面的javascript里面定义控制器的实例:

Javascript 模拟mvc实现点餐程序案例详解

定义程序启动的函数:

Javascript 模拟mvc实现点餐程序案例详解

这里就包含了响应最开始的点餐事件。包含两个动作:点餐和刷新界面显示。实际的业务场景中,顾客点了菜之后会形成待制作的订单录入到系统并发送到后厨,厨师制作菜品。顾客的手机订单中也能查看到已点的菜品以及可能的制作的动态信息。

刷新界面的方法包含:

Javascript 模拟mvc实现点餐程序案例详解

Javascript 模拟mvc实现点餐程序案例详解

Javascript 模拟mvc实现点餐程序案例详解

Javascript 模拟mvc实现点餐程序案例详解

Javascript 模拟mvc实现点餐程序案例详解

界面的几块显示区域定义:

Javascript 模拟mvc实现点餐程序案例详解

区分几块区域的样式:

Javascript 模拟mvc实现点餐程序案例详解

后厨制作里面,每个食物后面会有一个完成按钮:

Javascript 模拟mvc实现点餐程序案例详解

单击完成

Javascript 模拟mvc实现点餐程序案例详解

最后,食物的监听器就会被调用,并刷新后厨、餐桌的显示。

至此,这个点餐程序全部完成。

Javascript 模拟mvc实现点餐程序案例详解

到此这篇关于Javascript 模拟mvc实现点餐程序案例详解的文章就介绍到这了,更多相关js实现点餐程序内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery选择没有colspan属性的td的代码
Jul 06 Javascript
javascript 获取图片尺寸及放大图片
Sep 04 Javascript
js实现同一页面多个不同运动效果的方法
Apr 10 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
AngularJs表单验证实例详解
May 30 Javascript
Bootstrap源码学习笔记之bootstrap进度条
Dec 24 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
Jun 11 Javascript
详解ES6 Fetch API HTTP请求实用指南
Nov 14 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
Jan 18 Javascript
Vue基础学习之项目整合及优化
Jun 02 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
Dec 09 Javascript
浅谈webpack构建工具配置和常用插件总结
May 11 Javascript
vant时间控件使用方法详解
Dec 24 #Javascript
基于Vant UI框架实现时间段选择器
Dec 24 #Javascript
原生jQuery实现只显示年份下拉框
Dec 24 #jQuery
js制作提示框插件
Dec 24 #Javascript
vue+openlayers绘制省市边界线
Dec 24 #Vue.js
在HTML中使用JavaScript的两种方法
Dec 24 #Javascript
vue项目中openlayers绘制行政区划
Dec 24 #Vue.js
You might like
php 批量替换html标签的实例代码
2013/11/26 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
利用javascript查看html源文件
2006/11/08 Javascript
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
菜鸟javascript基础整理1
2010/12/06 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
Python 多核并行计算的示例代码
2017/11/07 Python
Django开发中复选框用法示例
2018/03/20 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
在python中做正态性检验示例
2019/12/09 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
上海微创软件面试题
2012/06/14 面试题
单位工程竣工验收方案
2014/03/16 职场文书
2014年宣传工作总结
2014/11/18 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
消防安全月活动总结
2015/05/08 职场文书
公司员工手册范本
2015/05/14 职场文书
学习心得体会
2019/06/20 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技