// Class:StudentController // 功能:学生提交实验报告 [HttpPost] public ActionResult SubmitExperiment(string id) { service.EditExperimentReport(id).CalculateScore() .Submit(); return RedirectToAction("Index"); } // Class:ExperimentClassController // 功能:老师帮学生提交实验报告 [HttpPost] public ActionResult Revocation(string id) { var report = service.GetExperimentReport(id); service.EditExperimentReport(id).CalculateScore() .Submit(); return RedirectToAction("ExperimentReportIndex", new {id = report.ExperimentalClass.Id}); } // Class:ExperimentReportCommand // 功能:计算分数,选做题未做默认2分,做了默认4分;必做题未做默认0分,做了默认4分 public IExperimentReportCommand CalculateScore() { if (_experimentReport.WhetherToCommit == WhetherToCommit.Uncommitted) { var @class = _experimentReport.ExperimentalClass; foreach (var result in _experimentReport.ExperimentResults) { if (@class.GetExperimentClassContent(result.Id.Index).Type == ContentType.Optional) result.Score = string.IsNullOrEmpty(result.Result) ? 2 : 4; else { result.Score = string.IsNullOrEmpty(result.Result) ? 0 : 4; } } _experimentReport.PortRoyaleScore = 4; } return this; }
首先看到任务的时候, 发现功能的注释是多余的,可以通过更改方法名的方法解决。第一个方法名改为SubmitExperiment_Student()就很容易让人理解。第二个方法名则容易让人产生歧义,Revocation是废止的意思,和要实现的功能对不上,改为SubmitExperiment_Teacher()即可,同时去掉注释。第三个方法名则无须修改,只要将注释去掉即可。
其次大致扫一遍代码,发现有些名字很难懂的变量,例如_experimentReport.PortRoyaleScore让人摸不着头脑,通过询问才知道这表示的是实验结果,果断把名字给换一个_experimentReport.Experience就很容易理解了
----------------------------------------------------------------------------------------------------------------------------------分割线
以上是我最先的想法,其实完全没抓到要点。。。,
以上问题在于计算分数的功能不应该出现在这里而是应该放在service里面