zoukankan      html  css  js  c++  java
  • 代码重构任务一

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

  • 相关阅读:
    从Swift3的标准库协议看面向协议编程(一)
    iOS多线程到底不安全在哪里?
    typealias和泛型接口
    iOS蓝牙开发CoreBluetooth快速入门
    iOS学习路线图
    iOS开发masonry的一些使用简介
    在Swift项目中使用cocoaPods导入第三方OC库
    微信小程序开发POST请求
    一些NSArray,NSDictionary,NSSet相关的算法知识
    iOS开发中的权限
  • 原文地址:https://www.cnblogs.com/zzzying/p/8309551.html
Copyright © 2011-2022 走看看