[ create a new paste ] login | about

Link: http://codepad.org/t0jtmESE    [ raw code | fork ]

PHP, pasted on Jan 23:
<?php

interface DataAccessFactory
{

  /**
   * @return UserDataAccess
   */
  public function createUserDataAccess();

}

interface UserDataAccess
{

  /**
   * @return boolean
   */
  public function insert($user);

}

abstract class AbstractMySQLDataAccess
{

  protected $dbh;

  /**
   * @param PDO $dbh PHP data object
   */
  public function __construct(PDO $dbh)
  {
    $this->dbh = $dbh;
  }

}

class MySQLUserDataAccess extends AbstractMySQLDataAccess implements UserDataAccess
{

  public function insert($user)
  {
    // ...
  }

}

class MySQLDataAccessFactory implements DataAccessFactory
{

  private $dbh;

  public function __construct()
  {
    $this->dbh = new PDO('mysql:host=localhost;', '<user>', '<pswd>');
  }

  /**
   * @see DataAccessFactory::createUserDataAccess()
   * @return MySQLUserDataAccess
   */
  public function createUserDataAccess()
  {
    return new MySQLUserDataAccess($this->dbh);
  }

}

class UserModel
{

  private $factory;

  public function __construct(DataAccessFactory $factory)
  {
    $this->factory = $factory;
  }

  public function insert()
  {
    $dataAccess = $this->factory->createUserDataAccess();

    if ($dataAccess->insert()) {
      // ...
      // <business logic />
    }
  }

}

$model = new UserModel(new MySQLDataAccessFactory());
// ...


Create a new paste based on this one


Comments: