Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将业务逻辑实现到模型中_Php_Laravel_Tdd_Domain Driven Design - Fatal编程技术网

Php 将业务逻辑实现到模型中

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

对于如何在域模型中实现一些业务逻辑,我有点困惑。 我将php与Laravel框架一起使用,但问题与框架无关

我有以下情况:

当我更新课程时,我应该关闭与此相关的所有注册。 产生新的评论。 我的示范课程有以下许多备注和报名:

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
  }