// 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里面