laravel
简洁优雅的php开发框架,采用了大量设计模式,让代码高内聚,低耦合。开发效率大幅提升,同时可维护性也大大提升。
弹性设计
简单的小项目可能会把数据库查询,业务逻辑,数据传给View几乎所有操作都放在Controller,如何项目后期需求变大,最后Controller会变得很臃肿,难懂,不易维护(同样,有些会把所有增删改查,功能类写在Model,Controller再从Model一个个的拿,导致Model很乱,Model有关联表的时候可能会引起一些不必要的数据库查询)
我们可以采用添加service层,presenter层,formatter层来对数据业务逻辑等进行处理,方便代码的优化,而这些也是java种spring的设计思想。
Repository
使用 repositories
其实完成整个repository模式需要相当多的步骤,但是一旦你完成几次就会自然而然变成了一种习惯了,下面我们将详细介绍每一步。
1.创建 Repository 文件夹
首先我们需要在app文件夹创建自己Repository 文件夹repositories(类似于Model,也可以说这就是个Model,哈哈),然后文件夹的每一个文件都要设置相应的命名空间。(这是重点,笔者就曾经进过忘记设置相应的命名空间的坑,悔恨中…)
2: 创建相应的 Interface类
第二步创建对应的接口,其决定着我们的repository类必须要实现的相关方法,如
<?php
namespace App\Repositories;
interface HouseRepositoryInterface {
public function selectAll();
public function find($id);
}
3:创建对应的 Repository类
现在我们可以创建我们repository类 来给我们干活了,在这个类文件中我们可以把我们的绝大多数的数据库查询都放进去,不论多么复杂。
(创建一个DBRepository工厂类,具体的逻辑在这里写就可以了,和数据库互动在这里写就可以)
<?php
namespace App\Repositories;
use House;
class DbHouseRepository implements HouseRepositoryInterface {
public function selectAll()
{
return House::all();
}
public function find($id)
{
return House::find($id);
}
}
4:创建后端服务提供,也就是我们经常使用的serviceprovider.
<?php
namespace App\Repositories;
use IlluminateSupportSeriveProvider;
class BackSerivePrivider extends ServiceProvider {
public function register()
{
$this->app->bind(
'App\Repositories\HouseRepositoryInterface',
'App\Repositories\DbHouseRepository');
}
}
当然你也可以新建一个文件夹主要放我们的provider相关文件。
5:更新你的Providers Array
其实在上面的代码中,我们已经实现了一个依赖注入,但如果我们要使用在此我们是需要手动去写的,为了更为方面,我们需要增加这个providers 到app/config/app.php 中的 providers数组里面,只需要在最后加上
App\Repositories\BackendServiceProvider::class,
6:最后使用依赖注入更新你的controller
当我们完成上面的那些内容之后,我们在Controller只需要简单的调用方法代替之前的复杂的数据库调用,如下面内容:
<?php
use App\repositories\HouseRepositoryInterface;
class HousesController extends BaseController {
protected $house;
public function __construct(HouseRepositoryInterface $house)
{
$this->house = $house;
}
public function index()
{
$houses = $this->house->selectAll();
return View::make('houses.index', compact('houses'));
}
public function create()
{
return View::make('houses.create');
}
public function show($id)
{
$house = $this->house->find($id);
return View::make('houses.show', compact('house'));
}
}
总结
因为将所有的业务逻辑放入到controller层会导致c层过于臃肿,因此,我们选择拆分,让controller层变得简单,这样我们就需要添加一些其它的业务逻辑层。
Comments are closed.