[新手开发记录] 测试通过之后进行重构

我准备开发一个名校公开课的汉化资料下载和讨论版,功能就是站长发布信息和资料下载链接,用户可以在下面讨论,并且可以生成各种平台的分享方式分享出去。这一系列文章就记录这一过程。当然博文功能也是必不可少的。

重构

重构的意思是调整代码的结构,使得其结构更加合理,更加易于维护,减少不必要的代码重复,把合适的代码放在合适的位置实现,而这个过程中,整个应用的功能表现是不会有任何变化的。
由于我们有了测试,所以我们重构过程中可以通过测试来确保我们并没有破坏应用的功能。
简单的开发过程和重构案例:

  1. 13-PDO简介-《php7 基础课程》 - Laracasts 视频教程
  2. 14-PDO重构-《php7 基础课程》 - Laracasts 视频教程

控制器

现在我们在测试的两个路由看起来如下:

Route::post('/courses', function(){

    App\Course::create(request(['title', 'description']));

});

Route::get('/courses', function(){

    $courses = App\Course::all();

    return view('courses.index', compact('courses'));

});

通过闭包实现了服务后台的数据处理,我们现在想建立一个控制器,这样模型(Model)、视图(View)、控制器(Control)就分开了,也就是 MVC 的含义。
参考:

  1. 5-分离PHP逻辑和视图 -《php7 基础课程》 - Laracasts 视频教程
  2. 23-控制器(Controller)类的重构-《php7 基础课程》 - Laracasts 视频教程

我们新建一个 CoursesController 控制器:

php artisan make:controller CoursesController

打开以后,我们给它添加两个方法,把原本路由闭包中的代码迁移到这两个方法中:

    public function index()
    {
        $courses = Course::all();

        return view('courses.index', compact('courses'));
    }

    public function store()
    {
        Course::create(request(['title', 'description']));        
    }

记得在控制器头部导入模型文件:

use App\Course;

然后路由就修改成如下,将数据处理的功能分包给了控制器:

Route::post('/courses', 'CoursesController@store');

Route::get('/courses', 'CoursesController@index');

不出意外,再次测试,仍然是通过测试,这是一个成功的重构。

新的测试

现在我们可以看到,CoursesController 中的 store() 方法,在成功储存数据之后,没有任何操作,而现实中,我们希望能够跳转到某个页面,比如跳转到 index 页面。
我们把测试其中一行从这样:

$this->post('/courses', $attributes);

改成这样:

$this->post('/courses', $attributes)->assertRedirect('/courses');

然后继续测试,显然会报错,它期待一个跳转,但是没有。
所以我们继续在控制器的 store() 方法中修改,添加跳转逻辑:

    public function store()
    {
        Course::create(request(['title', 'description']));

        return redirect('/courses');
    }

再运行测试,又一次全部通过。

视图修改

如果你记得,我的视图现在是很简单的:

<!DOCTYPE html>
<html>
<head>
    <title>Courses</title>
</head>
<body>
    <h1>Courses</h1>

    <ul>
        @foreach($courses as $course)
        <li>{{ $course->title }}</li>
        @endforeach
    </ul>
</body>
</html>

我也需要对视图进行一定的修改,这里就不展开了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 1

请问楼主,这系列文章是给自己做记录吧!

3年前 评论
Affren (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!