chuk-shirley
2/26/2016 - 9:57 PM

DDD sample

DDD sample

<?php
class MemberController
{
  private $memberService;
  
  public function __construct(MemberService $memberService)
  {
    $this->memberService = $memberService;  
  }
  
  public function enrollAction()
  {
    $name = $_POST['name'];
    $country = $_POST['country'];
    $this->memberService->enroll($name, $country);
  }
}

class MemberService
{
  public function enroll($name, $country)
  {
    $prospectiveMember = new ProspectiveMember($name, $country);
    $prospectiveMember->enroll();
    
    $emailSender = new EmailService();
    $emailSender->sendConfirmation();
  }
}

class ProspectiveMember
{
  private $name;
  private $country;
  
  public function __construct($name, $country)
  {
    $this->name = $name;
    $this->country = $country;
  }
  
  public function enroll()
  {
    $activeMember = new ActiveMember($name, $country);
    
    // Apply $20 credit
    $activeMember->setBalance(20.00);
    
    return $activeMember;
  }
}

class ActiveMember
{
  private $name;
  private $country;
  private $balance;
  
  public function __construct($name, $country)
  {
    $this->name = $name;
    $this->country = $country;
  }
  
  public function setBalance($balance)
  {
    $this->balance = $balance;
  }
}