Modelo DDD ( Domain Driver Design )

Baseado no artigo do Diego Pacheco, que pode ser encontrado aqui escrevi uma classe em PHP para demonstrar o uso do DDD em PHP, justamente para mostrar que algumas metodologias interessantes podem ser aplicadas em qualquer situação, é tambem para quebrar o paradigma de que o PHP é “inferior” ao Java e .Net.

<?php

/**
* Implementando estudo do DDD ( Domain Driven Design )
* @author alexandre.muniz
*
* Modelos: Produto, Cliente e Pedidos
*/
class Produto
{
public $nome;
public $preco;

public function __construct($nome,$preco)
{
$this->nome = $nome;
$this->preco = $preco;
}
}

class Cliente
{
public $nome;
public $pedidos;
public $produtos;

public function __construct( $nome )
{
$this->nome = $nome;
}
public function setProdutos( $produtos )
{
$this->produtos = $produtos;
}

public function setPedido( Pedido $pedido )
{
$this->pedidos = $pedido;
}
}

class Pedido
{
protected $produtos;
protected $status;
protected $cliente;
public $total;
public $id;

public function __construct(Cliente $cliente)
{
$this->status[] = ‘Iniciando novo pedido’;
$this->cliente = $cliente;
$this->id = 1;
return $this;
}

public function adicionaProduto(Produto $produto)
{
$this->produtos[] = $produto;
$this->status[] = ‘Adicionando ‘.$produto->nome;
$this->total = $this->total+=$produto->preco;
return $this;
}

public function finalizaPedido()
{
$this->cliente->setProdutos($this->produtos);
$this->cliente->setPedido($this);

echo ‘Layout do Pedido<br />’;
echo ‘<pre>’;
print_r($this);
}

}

$p = new Pedido(new Cliente(‘ale’));

$p->adicionaProduto(new Produto(‘Celta Preto’,10))
->adicionaProduto(new Produto(‘DT 200’,30))
->adicionaProduto(new Produto(‘CB 600 Hornet’,50))
->finalizaPedido();

<?php

/**
* Implementando estudo do DDD ( Domain Driven Design )
* @author alexandre.muniz
*
* Modelos: Produto, Cliente e Pedidos
*/
class Produto
{
public $nome;
public $preco;

public function __construct($nome,$preco)
{
$this->nome = $nome;
$this->preco = $preco;
}
}

class Cliente
{
public $nome;
public $pedidos;
public $produtos;

public function __construct( $nome )
{
$this->nome = $nome;
}
public function setProdutos( $produtos )
{
$this->produtos = $produtos;
}

public function setPedido( Pedido $pedido )
{
$this->pedidos = $pedido;
}
}

class Pedido
{
protected $produtos;
protected $status;
protected $cliente;
public $total;
public $id;

public function __construct(Cliente $cliente)
{
$this->status[] = ‘Iniciando novo pedido’;
$this->cliente = $cliente;
$this->id = 1;
return $this;
}

public function adicionaProduto(Produto $produto)
{
$this->produtos[] = $produto;
$this->status[] = ‘Adicionando ‘.$produto->nome;
$this->total = $this->total+=$produto->preco;
return $this;
}

public function finalizaPedido()
{
$this->cliente->setProdutos($this->produtos);
$this->cliente->setPedido($this);

echo ‘Layout do Pedido<br />’;
echo ‘<pre>’;
print_r($this);
}

}

$p = new Pedido(new Cliente(‘ale’));

$p->adicionaProduto(new Produto(‘Celta Preto’,10))
->adicionaProduto(new Produto(‘DT 200’,30))
->adicionaProduto(new Produto(‘CB 600 Hornet’,50))
->finalizaPedido();

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s