[新手开发记录] 测试通过之后进行重构
我准备开发一个名校公开课的汉化资料下载和讨论版,功能就是站长发布信息和资料下载链接,用户可以在下面讨论,并且可以生成各种平台的分享方式分享出去。这一系列文章就记录这一过程。当然博文功能也是必不可少的。
重构
重构的意思是调整代码的结构,使得其结构更加合理,更加易于维护,减少不必要的代码重复,把合适的代码放在合适的位置实现,而这个过程中,整个应用的功能表现是不会有任何变化的。
由于我们有了测试,所以我们重构过程中可以通过测试来确保我们并没有破坏应用的功能。
简单的开发过程和重构案例:
控制器
现在我们在测试的两个路由看起来如下:
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 的含义。
参考:
我们新建一个 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 协议》,转载必须注明作者和本文链接
请问楼主,这系列文章是给自己做记录吧!