【发布时间】:2016-12-18 04:40:22
【问题描述】:
我正在使用 Laravel 5.2 构建一个抽象系统。当客户需要一些特定的实现时,我需要覆盖代码的某些部分。
我的想法是这样的场景:
默认情况下,控制器依赖于一些自定义请求(具体)。当客户问我另一个业务规则时,我必须扩展这个自定义请求并将这个子实现绑定到父实现。在我的 Provider 上做这样的事情:
$this->app->bind(ParentImpl::class, ChildImpl::class);
谈软件架构概念,能行吗?对吗?
[编辑]
一个具体的例子,我有一个使用这样的请求的操作:
class SomeController extends Controller
{
public function someAction(ParentRequest $request)
{
# perform action
}
}
我的请求有一些业务验证逻辑:
class ParentRequest extends Request
{
public function rules()
{
return [
'a_field' => 'required',
'b_field' => 'max:100'
];
}
}
现在一切正常,我的默认系统逻辑正常! 但我的软件是其他项目的基础,我们将通过 composer 使用它,在最终项目中只是特定代码将属于应用路径。
当客户要求对业务逻辑进行一些修改时,我们需要覆盖旧的。我的问题是:它正确吗?从概念上讲,我可以执行以下代码吗?
class ChildRequest extends ParentRequest
{
public function rules()
{
return [
'a_field' => '',
'b_field' => 'max:255'
];
}
}
然后,绑定它以覆盖项目的所有依赖项:
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(ParentImpl::class, ChildImpl::class);
}
}
【问题讨论】:
-
您能否更具体地解释一下这个问题?你的解释太抽象了,很难理解。
-
@SupunWijerathne 我编辑了它:)
标签: php oop design-patterns architecture laravel-5.2