1 接口改进

  1) 之前判断电梯是否闲置的函数不太好理解,重新修改了,如下所示:

        //是否停顿状态(停止的以及开门间隔>=0)public bool IsIdle{get{return CurrentStatus.CurrentDirection == Direction.No&& CurrentStatus.DoorCloseOpenTicks < 0;}}

  2) 原来的程序将每一个电梯的target都初始化为0,感觉并不合理。因为最开始电梯的状态应该是没有目标楼层的,而且在我们的算法中target如果一开始为0,会导致重复开门的问题。所以我们把target初始化为-1,代表电梯那时候并没有目标楼层。

  3) IElevator接口中定义的函数public bool ReqStopAt(int targetFloor) ,先看函数名很容易让人联想到这个函数的作用是是调度电梯前往目标楼层,再看它的返回值是布尔类型,也就自然想到返回值标志着是否成功到达目标楼层。可是 看具体的函数时,发现这个函数其实主要作用是将targetFloor这个参数的值赋给电梯的target,修改当前方向,并未把target如何具体发 生改变的过程展现出来,而且返回值标志的是是否接受调度请求。所以感觉这个函数的问题要么是名字起得不好,要么是实现过程和名称不符。

  其实这个函数的主要作用就是更新电梯状态(包括当前运行方向以及当前的目标楼层),所以我们觉得这部分代码完全可以放到StatusUpdateForEveryTick(int ticks)这个函数里,感觉这样更方便使用。

2 UI设计

  运行时的窗体用录屏工具做成了视频,然后转成了gif,就是有点小(免费软件理解一下)……

  主要的界面设计参照了上一级某Pair的设计,但是鉴于时间关系我们只展示了电梯的运行,没有展示出乘客的状态。

  

  不过做到这一点已经比较纠结了,因为窗体是在主线程创建的,而TickGoes中如果想对窗体的控件进行修改的话是不允许的。参考的Pair用的方法我们试着没有成功……最后用了委托这个东西,但是比较遗憾的是不能不能直接重复开始,要关掉重来才可以。

  限于时间关系关系暂时只能这样了。这一版没有上传TFS,这个没有关系吧?

  需要的话可以在博客贴出代码。 

3 MVC与MVVM

  3.1 MVC(Model View Controller)

  即模型(model)-视图(view)-控制器(controller)。
  MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,从例子可以看出MVC就是Observer设计模式的一个特例。

  优点:
  1) 低耦合性
  2) 高重用性和可适用性
  3) 较低的生命周期成本
  4) 快速的部署
  5) 可维护性
  6) 有利于软件工程化管理
  缺点:
  MVC的缺点是由于它没有明确的定义,所以完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦构件经过了测试,就可以毫无顾忌的重用它们了。
  根据开发者经验,由于开发者将一个应用程序分成了三个部件,所以使用MVC同时也意味着将要管理比以前更多的文件。
  MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
  MVC设计模式是一个很好创建软件的途径,它所提倡的一些原则,像内容和显示互相分离可能比较好理解。但是如果你要隔离模型、视图和控制器的构件,你 可能需要重新思考你的应用程序,尤其是应用程序的构架方面。如果你肯接受MVC,并且有能力应付它所带来的额外的工作和复杂性,MVC将会使你的软件在健壮性,代码重用和结构方面上一个新的台阶。
 
  3.2 MVVM
  MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点:
  1) 低耦合:视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
  2) 可重用性:你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
  3) 独立开发:开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。
  4) 可测试:界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。
  3.3 关于这次程序
  这次是相当于先写好了模型(M),然后写视图(V)。至于控制器,也就是M、V之间的同步。这次并没有特别好的把这几个独立分开,……同步机制搞得很纠结,现在这版UI只能说是差强人意啊。

转载于:https://www.cnblogs.com/hello-jane/p/4032230.html

PairWork-电梯调度程序结对编程【附加题】相关推荐

  1. 现代软件工程系列 结对编程 (II) 电梯调度程序

    [很多同学完成了上一个结对编程项目后,  很想知道下一个项目是什么, 我们这次要练习如何设计 接口, 测试框架,  和算法] 现代软件工程系列 结对编程 (II) 电梯调度程序 ------- Pai ...

  2. 结对编程作业---电梯调度程序

    这次的作业和以往不同,按照老师的要求,我们要进行结对编程的练习.所谓结对编程相信各位都不会陌生,这里不在赘述. 首先介绍下我的小伙伴,很幸运的是我的队友也是我的室友---樊西江,这为我们合作提供了很大 ...

  3. 结对编程 电梯调度程序

    这次老师安排的是结对编程作业,也是第一次接触两人结对编程,感觉比较新鲜,有感觉难以入手,在经过协商之后,我们一起完成了我们的编程作业,感觉到很开心,也体会到合作的愉快,这是我们这次的成果. 这是这次的 ...

  4. 现代软件工程 结对编程 (II) 电梯调度 算法和测试框架

    [很多同学完成了上一个结对编程项目后,  很想知道下一个项目是什么, 我们这次要练习如何设计 接口, 测试框架,  和算法. ] [博客园的朋友们也可以试一试怎么高效地解决这个问题] 现代软件工程系列 ...

  5. [附加题] 结对项目对接的苦痛

    [附加题] 结对项目对接的苦痛 本次很荣幸地,我的程序作为很多程序员队伍的备胎计算模块被加入了各大程序的附加题参考中,有以下几位同学都曾与我进行模块的对接: GNU_Linuxer 马克斯 kanel ...

  6. 现代软件工程 结对编程 (II) 电梯调度

    现代软件工程 结对编程 (II) 电梯调度 Pair Project II: Elevator Scheduler <现代软件工程> 的结对编程作业,  作者: 邹欣 怎样设计API?  ...

  7. 结对编程项目的收获与总结(支持UI背景与背景音乐的刷题器)

    本次的结对编程项目在假期前就公布了需求,也让我们这次的假期很是充实,感觉本次结对与搭档合作很愉快也收获颇多,接下来具体讲下对我们组本次结对编程项目的一些收获与总结,主要分为后端个人项目复用,前端UI设 ...

  8. 【万人千题】结对编程排位赛(第一期) 第二周 排名公布,冠军成功卫冕,啊这……

      博主会带领大家进行 <C语言入门100例> 和 <算法零基础100讲>的训练,每天把一些知识点巩固后做完相应练习题,和群友一起打卡,如果身边有志同道合之人,也可一起加入,今 ...

  9. 结对编程——电梯调度系统

    第二次作业的结对编程项目:电梯调度系统 结对编程小组成员:吴煜10061149    全风楠10061186 这次的作业与个人项目不同,不是从头写一个新的程序,而是在一个已有的程序之上做修改然后实现新 ...

最新文章

  1. python中def _init_是什么意思_Python中self和__init__的含义与使用
  2. 《PHP、MySQL和Apache入门经典(第5版)》一2.11 实践练习
  3. JavaScript 中 void(0) 的含义
  4. Redis安装配置和介绍
  5. Swing实现全屏(覆盖任务栏和不覆盖任务栏)
  6. phpcmsv9修改表单直接在列表中显示字段方法
  7. Could not load TestContextBootstrapper [null]. Specify @BootstrapWith‘s ‘value‘ attribute...
  8. 如何在SQL Server中分析存储子系统性能
  9. 解决Pycharm添加虚拟解释器的报错问题
  10. ubuntu 14.04 gitlab 的搭建
  11. Java常用软件下载地址
  12. css中关于单行文本溢出部分用省略号显示
  13. Semantic Proximity Search on Heterogeneous Graph by Proximity Embedding
  14. 不只是C2M:淘宝特价版的“产业数字化”野望
  15. 3-8SQL注入网站实际案例第四步:第三者上位点测试与利用
  16. Nightmare Ⅱ(BFS)
  17. socket.io-client源码分析——建立socket连接
  18. html面试题(一)--html css js
  19. 计算机云盘不见了,为何重装了电脑,百度云盘里的文件不见了.而手机里还有
  20. Kotlin高仿微信-第35篇-支付-二维码收款(二维码)

热门文章

  1. Android逆向之旅---静态方式分析破解视频编辑应用「Vue」水印问题
  2. 为什么虚函数(virtual)不能是static函数
  3. 这四款前端开发工具,你必须知道
  4. CarSim和Simulink联合仿真-无人驾驶
  5. 一步一步学习Vim 全图解释 (强烈推荐)
  6. linux新增、修改用户和组的方法
  7. FaceBook加好友错误提示?
  8. 2022年NOC软件创意编程(学而思赛道)决赛小学初中组c++,包含答案
  9. 性能分析神器VisualVM
  10. [生活知识]沙發面料中真皮、超纖皮、環保皮、西皮的區別