【发布时间】:2013-10-23 15:37:25
【问题描述】:
我对如何在我的领域模型中实现一些业务逻辑有点困惑。 我在 Laravel 框架中使用 php,但问题与框架无关。
我有以下情况:
- 当我更新程序时,我应该关闭所有与之相关的注册。
- 生成新的备注。
我的示范项目有很多备注和报名如下:
ProgrammeController extendes Controller {
public function update($id)
{
$programme = Programme::find($id);
$programme->fill(Input::all());
$programme->update();
//Redirects .....
}
}
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
}
}
我的控制器调用模型程序中的函数 update()。 我怎样才能实现这种情况,以便我的模型可以测试并遵循正确的模式?因为我不知道处理它的最佳方法是什么,以及在 Remark 类中调用函数 generate() 和在 Enrollments 类中调用 close()。
非常感谢!
【问题讨论】:
-
$this->closeEnrollments($this->enrollments());对于这一行,您将传递一个查询对象。您可能想要传递一个包含注册的集合.. $this->closeEnrollments($this->enrollments);
-
感谢肖恩的帮助。好的,在那一点我会改变......但是,要调用 Remark 的 generate() 函数,我应该在程序中创建一个新实例(或者这是一个反模式)?对不起,我的英语不好! ;)
标签: php laravel tdd domain-driven-design