Laravel com conceitos de DDD [Domain Driven Design (DDD)]

400 views
Skip to first unread message

Alexandre

unread,
Nov 22, 2018, 10:00:19 AM11/22/18
to Laravel Brasil
Estou desenvolvendo uma API seguindo os conceitos DDD [Domain Driven Design (DDD)]
Estou desenvolvendo a camada de Domínio,
Porém estou tendo um erro no meu projeto quando carrego uma interface em um método em meu controle.
A mensagem é:

Target [Domain\Interfaces\Repositories\IRepositoryUsuario] is not instantiable.

Eu realmente não sei se estou fazendo o acesso as classes  que estão dentro da pasta DOMAIN da forma correta a traves deste controle, mas a ideia é somente testar a minha regra de negocio como validações de uma entidade.
a pasta Domain esta fora da pasta App do laravel acho que isso  que torna as coisas mais dificeis

porem no meu composer ja tinha definido este diretorio

.
"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"                  
        ],
        "psr-4": {
            "App\\": "app/",
            "Domain\\": "Domain/"          
        }


no controle que crie para acessar as classes da pasta Domain esta assim :



<?php

namespace App\Http\Controllers;

use Domain\Arguments\Usuario\AutenticarUsuarioRequest;

use Domain\Interfaces\Repositories\IRepositoryUsuario;
use Domain\Services\ServiceUsuario;
use Illuminate\Http\Request;


class TesteController extends Controller
{

    public function index(IRepositoryUsuario $_repositoryUsuario){

        $service = new ServiceUsuario($_repositoryUsuario);

        $request = new  AutenticarUsuarioRequest();

        //$request->getEmail()

        return $service->AutenticarUsuario($request);
    }
}


ao acessar a traves da rota  :

Route::get('/teste', 'TesteController@index');

retorna este erro :

Filipe Pires

unread,
Nov 26, 2018, 6:33:52 PM11/26/18
to Laravel Brasil
Olá Alexandre,

Depois de definires o teu namespace no composer.json, digitaste o comando: composer dump-autoload ?

Alexandre

unread,
Nov 28, 2018, 8:20:13 AM11/28/18
to laravel...@googlegroups.com
Bom dia
resolvi o meu problema assim :
criando uma classe que seria o meu repositório tipo UsuarioRepositoty
e nesta classe implementei a minha interface IRepository
no meu controller criei uma instância desta classe
e passei esta instância para minha classe AdicionarUsuarioRequest

public function index(){


        $usuario_repo = New UsuarioRepository();
        $service = new ServiceUsuario($usuario_repo);

        $adicionarRequest = new adicionarUsuarioRequest();

       $adicionarRequest->primeiroNome = "jose";
       $adicionarRequest->ultimoNome = "da silva  pereira";
        $adicionarRequest->email = "jo...@gmail.com";
        $adicionarRequest->senha = "123456789";

        $response = $service->AdicionarUsuario($adicionarRequest);

        return $response;
}

de fato não implementei nada na classe UsuarioRepositoty somente estendi a minha interface
mas desta forma parei de receber o erro, para o que eu queria que era tentar testar a minha regra de negocio implementada na pata domain funcionou,
ate onde eu vi não será necessário implementar a cada de infra pois é a parte onde se faz as conexões com o banco, cria-se a migration e outras coisas de infra estrutura
que no caso do LARAVEL já ocorre na pasta App,
ficando então a pasta DOMAIN com o core do projeto onde é definido as regras de negocio
e o controller que seria a minha camada de aplicação, a API propriamente dita.

--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "Laravel Brasil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/laravel-brasil/B9jNb-4Joas/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para laravel-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages