我很难理解如何才能做到最好。我了解外观如何作为语法糖工作,以呈现清晰的静态代码布局风格,同时保持代码松耦合和可测试。
但是我有以下问题。每当我有一个控制器时,控制器都依赖于类的负载。让我们以输入类为例。每个控制器都是一个 IoC 容器,所以实际上这很好。因为如果我想用另一个类更改输入类。我只需要创建一个实现正确接口的新类。然而,这意味着我的应用程序中的每个控制器都依赖于相同的输入类。我理解对吗?
所以我读了这篇非常好的文章: http: //www.nathandavison.com/posts/view/16/using-dependency-injection-and-ioc-in-laravel-4-controllers
简而言之,它建议在您的控制器中使用依赖注入 (DI)。例如
class UsersController extends BaseController
{
protected $response;
protected $request;
protected $validator;
protected $hasher;
protected $user;
public function __construct(
Response $response,
\Illuminate\Http\Request $request,
\Illuminate\Validation\Factory $validator,
\Illuminate\Hashing\BcryptHasher $hasher,
User $user
) {
$this->response = $response;
$this->request = $request;
$this->validator = $validator;
$this->hasher = $hasher;
$this->user = $user;
}
public function getIndex()
{
return $this->response->make('Hello World!');
}
}
和
$app->bind('UsersController', function($app) {
$controller = new UsersController(
new Response,
$app->make('request'),
$app->make('validator'),
$app->make('hash'),
new User
);
return $controller;
});
这确实是有道理的,但这不是框架的理念,因为它绕过了外观......我想听听关于这种方法的意见。这是好习惯吗?