Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou trabalhando com MVC e fiquei na dúvida em qual a melhor maneira de modelar minha Model. Atualmente, estou fazendo algo assim:
Model
|----- userModel.php
|----- /Entity/
|----- /Storage/
|----- /MySQL/
Dentro da minha pasta Model, que representa a camada "Model" do meu MVC, eu tenho duas sub-pastas: Entity e Storage. Na sub-pasta "Entity", eu tenho meus DTOs, que apenas representam um objeto com seus atributos. Exemplo:
<?php
//model/Entity/User.php
class User
{
private $name;
private $email;
public function __construct( $name, $email )
{
$this->name = $name;
$this->email = $email;
}
//Getters...
}
E, na minha sub-pasta Storage, tenho uma outra sub-pasta chamada "MySQL". Minha pasta Storage é onde eu deixo as classes de persistência, leia-se DAO no meu caso. Exemplo:
<?php
//model/Storage/MySQL/UserMySQLStorage
class UserMySQLStorage
{
$db;
public function __construct( \PDO $pdo )
{
$this->pdo = $pdo;
}
public function create( User $user )
{
//PDO::execute()
}
public function getByEmail( $email )
{
//PDO::fetch()
}
//outros...
}
E na raiz da pasta "Model", tenho as classes quec cuidam da "Lógica" do negócio. Acredito que seriam uma espécie de BO. Exemplo:
<?php
//model/UserModel.php
class UserModel
{
private $storage;
public function __construct()
{
$this->storage = new UserMySQLStorage;
}
public function getByEmail( User $user )
{
if ( !filter_var( $user->getEmail(), FILTER_VALIDATE_EMAIL ) ) {
throw new InvalidArgumentException( 'E-mail inválido' );
}
$this->storage->getByEmail( $user->getEmail() );
}
//another methods
}
Gostaria de saber a opinião dos mais experientes. É uma boa prática "separar" a model em layers como estou fazendo? As responsabilidades estão bem definidas? Estou pecando na utilização de algum padrão?
Abraços
Obrigado cara,
A síntese do MVC é mais ou menos essa que falou mesmo, mas, minha dúvida é na organização das layers dentro da Model. No MVC, Model é uma camada, que pode conter várias layers: Service Layer, Data Access Layer etc... E estou na dúvida sobre qual o melhor caminho para seguir certos padrões nessas layers, sacou?
Abs
Gostaria de saber a opinião dos mais experientes. É uma boa prática "separar" a model em layers como estou fazendo? As responsabilidades estão bem definidas? Estou pecando na utilização de algum padrão?
Está corretíssimo, é assim mesmo que se faz. S.O.L.I.D. é tudo o que você precisa, o resto é consequência.
Não se preocupe em usar padrões. Quando eles forem necessários, surgirão naturalmente. Não tente forçar o uso deles, pois acabará utilizando-os onde não são necessários.
Olá! Eu trabalho também com MVC com PHP. Eu costumo organizar nas pasta "Model" = Lógica (Conexão DB, verificações..), "Controller" = Controla todo o tráfico do Site, 'Chamando' as minhas models, e a pasta View = Meus Layouts em Si.
Espero ter lhe Ajudado!