Php 将业务逻辑实现到模型中
对于如何在域模型中实现一些业务逻辑,我有点困惑。 我将php与Laravel框架一起使用,但问题与框架无关 我有以下情况: 当我更新课程时,我应该关闭与此相关的所有注册。 产生新的评论。 我的示范课程有以下许多备注和报名:Php 将业务逻辑实现到模型中,php,laravel,tdd,domain-driven-design,Php,Laravel,Tdd,Domain Driven Design,对于如何在域模型中实现一些业务逻辑,我有点困惑。 我将php与Laravel框架一起使用,但问题与框架无关 我有以下情况: 当我更新课程时,我应该关闭与此相关的所有注册。 产生新的评论。 我的示范课程有以下许多备注和报名: ProgrammeController extendes Controller { public function update($id) { $programme = Programme::find($id); $programme->fil
ProgrammeController extendes Controller {
public function update($id)
{
$programme = Programme::find($id);
$programme->fill(Input::all());
$programme->update();
//Redirects .....
}
}
}
}
}
我的控制器调用模型程序中的函数更新。
我如何实现这种情况,使我的模型可以测试并遵循正确的模式?因为我不知道处理它的最佳方法是什么,调用函数generate in class Remark and close in class registrations
非常感谢 在PHPUnit中,您可以模拟受保护的方法或创建子类,这些子类将公开私有方法,如closeEnrollments,从而允许您创建存根进行测试-有关更多信息,请参阅
不过,我建议您改进您的体系结构,并研究TDD、SOLID、Onion体系结构等概念。这些只是DDD及其组件(如价值对象、实体、存储库、服务等)等更高概念的核心概念。在您的示例中,类程序提供持久性、验证和其他一些业务逻辑,同时也是聚合根。做得太多的类很难测试。而且,将来当业务需求发生变化时,此类类很难更改,等等 $this->closeregistrations$this->registrations;对于此行,您将传递一个查询对象。您可能希望传递包含注册的集合$此->关闭注册$此->注册;谢谢肖恩的帮助。好的,在这一点上我会改变。。。但是,要调用Remark的generate函数,我应该在程序中创建一个新实例,还是这是一个反模式?对不起,我的英语不好;非常感谢你的帮助!我会看看你提出的概念,也许会考虑改进我的架构。
Programme extends Eloquent {
public function update()
{
if(!$this->valid())
return false;
$this->save();
//Should close all enrollments
$this->closeEnrollments($this->enrollments());
//Should generate a new remark
}
private function closeEnrollments($enrollments)
{
foreach($enrollments as $enrollment)
{
$enrollment->close();
}
}
public function enrollments()
{
return $this->hasMany('Enrollment');
}
public function remarks()
{
return $this->hasMany('Remark');
}
Enrollment extends Eloquent {
public function programme()
{
return $this->belongsTo('Programme');
}
public function close()
{
//do something
}
Remark extends Eloquent {
public function programme()
{
return $this->belongsTo('Programme');
}
public function generate()
{
//do something
}