1 接口改进

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

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

  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只能说是差强人意啊。

PairWork-电梯调度程序结对编程【附加题】的更多相关文章

  1. PairWork-电梯调度程序结对编程

    结对编程人员:050/184 1 结对编程 1.1 结对编程的优缺点 优点: ● 与单独开发相比,结对能够使人们在压力之下保持更好的状态.结对编程鼓励双方保持代码的高质量,即使在出现了让人不得不飞快地 ...

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

    结对编程人员:184/050 1 结对编程 1.1 结对编程的优缺点 优点: ● 与单独开发相比,结对能够使人们在压力之下保持更好的状态.结对编程鼓励双方保持代码的高质量,即使在出现了让人不得不飞快地 ...

  3. 软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题]

    软件工程 --- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] [附加题] 首先,在分组之前,我和室友薛亚杰已经详细阅读了往届学长的博客,认为电梯调度 ...

  4. 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结

    1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...

  5. PairProject 电梯调度 【附加题】

    [附加题] 改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享. 目前的设计有什么缺点, 你会如何改进它? 1.之前判断电梯是否闲置的函 ...

  6. 11061160_11061151_Pair Project: Elevator Scheduler软件工程结对编程作业总结

    软件工程结对编程作业总结 11061160  顾泽鹏 11061151  庞梦劼 一.关于结对编程 这次的软工任务既不是单打独斗的个人任务,也不是集思广益的团队项目,而是人数为两人的结对编程.两个人合 ...

  7. pair work-Elevator Schedule附加题

    [电梯调度算法的实现和测试] [附加题] 首先,我要感谢周敏轩同学和薛亚杰,吴渊渊小组.UI的编写是在两个小组成员的共同努力下完成的,希望在第二次结对编程中能够再一起对UI界面进行更新和完善.UI编写 ...

  8. 软件工程-pair work[附加题]

    首先,在分组之前,我和室友周敏轩已经详细阅读了往届学长的博客,认为电梯调度这个项目应该先做UI会比较好一点,于是动手展开了UI的编写;但分组结果并没有如我们所愿,但我们依然共同进行了UI的编写,希望在 ...

  9. 结对编程-地铁续(有种上个学期OO的既视感)

    我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...

随机推荐

  1. VS2015 无法启动 IIS Express Web 服务器 解决方案

    VS2015 IIS Express 无法启动Web 解决方案 [亲测已成功] 1.我的电脑—管理—事件查看器—Windows日志—应用程序: 详细信息会提示你:[模块 DLL C:\Program ...

  2. <20180929>任性的甲方

    今天参观了朋友在监督的新项目, 这个项目周期大概在6到9个月,预计本年度11月竣工. 总共大楼有五层, 施工面积在一万平米左右. 位于三楼的机房使用的设备有点高大上,发上来鉴赏一下. 双专线, 第二条 ...

  3. 自己定义控件-DragButton

    版权声明:本文为博主原创文章.欢迎转载,转载请注明博主和原文链接. https://blog.csdn.net/u014077888/article/details/28097273 一.描写叙述 可 ...

  4. Linux驱动的两种载入方式过程分析

    一.概念简述 在Linux下能够通过两种方式载入驱动程序:静态载入和动态载入. 静态载入就是把驱动程序直接编译进内核.系统启动后能够直接调用.静态载入的缺点是调试起来比較麻烦,每次改动一个地方都要又一 ...

  5. 【洛谷】【最小生成树】P1536 村村通

    [题目描述:] 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路 ...

  6. 每周一个linux命令之---uptime详解

    每周一个linux命令之---uptime详解 linux命令 uptime详解 引言:从今天开始,每周更新一个对程序员有用的linux命令,我真的没敢写每天一个,我怕我坚持不下去,每周一个还是可以的 ...

  7. go标准库的学习-text/template

    参考:https://studygolang.com/pkgdoc 导入方式: import "text/template" template包实现了数据驱动的用于生成文本输出的模 ...

  8. go标准库的学习-hash

    参考:https://studygolang.com/pkgdoc 导入方式: import "hash" hash包提供hash函数的接口. type Hash type Has ...

  9. geth中UTC文件与私钥的关系

    在创建了自己的本地区块链后,我们会得到一个文件夹keystore,该文件夹是用来存储你在这个区块链中创建的账户的备份钥匙文件,比如在这里我有一个账户的备份钥匙文件为:UTC--2018-07-12T0 ...

  10. attribute与parameter区别(转)

    文章转自http://blog.csdn.net/saygoodbyetoyou/article/details/9006001 request.getParameter取得Web客户端到web服务端 ...