Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Mateus Silva

Arquitetura de Software

Recommended Posts

Estou iniciando um projeto que vai ser grande (bem grande) e terá constantes atualizações com novos módulos e manutenção nos já existentes!

Minha principal dúvida é: qual arquitetura utilizar ? Pela minha necessidade me veio à cabeça o MVC e, se eu usar MVC, alguém poderia me mostrar um exemplo de uma boa organização dos diretórios neste modelo ? Pois já achei vários na internet e eu mesmo já usei de umas 2 formas diferentes, enfim, me deem uma luz!

PS. O sistemas vai ser criado do zero sem utilização de frameworks.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Mateus, beleza ? Bom, não sei o que você chama de projeto grande, mais ai vai uma sugestão de estrutura MVC comum e breve para se ter um "norte", adapte às suas necessidades.

 

mvc.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites
18 horas atrás, Mateus Silva disse:

se eu usar MVC, alguém poderia me mostrar um exemplo de uma boa organização dos diretórios neste modelo ?

Uma boa organização já está presente nos próprios frameworks de ponta, tipo Laravael, Sinfony e Zend

https://github.com/laravel/laravel

Desenvolver uma aplicação, que pode vir a ser grande, sem o uso de Frameworks é no minimo insano para os dias de hoje.
 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 07/02/2017 at 00:42, Alaerte Gabriel disse:

Fala Mateus, beleza ? Bom, não sei o que você chama de projeto grande, mais ai vai uma sugestão de estrutura MVC comum e breve para se ter um "norte", adapte às suas necessidades.

 

mvc.jpg

 

Legal, tinha pensado em algo simples assim mesmo.

 

Em 07/02/2017 at 18:41, Williams Duarte disse:

Uma boa organização já está presente nos próprios frameworks de ponta, tipo Laravael, Sinfony e Zend

https://github.com/laravel/laravel

Desenvolver uma aplicação, que pode vir a ser grande, sem o uso de Frameworks é no minimo insano para os dias de hoje.
 

 

Nunca tive muito interesse em usar frameworks, até estudei alguns como o próprio Laravel e o Cake, mas ainda assim, eu gosto de ter 100% das minhas aplicações na mão, poder criar o que quiser da forma que quiser sem muita restrição, por isso não sou muito adepto de usar frameworks, mas agradeço pelo toque, vou reconsiderar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa é programar por Hobby e fazer alguns freelas, a outra é escalar um projeto, onde este demandara por profissionais qualificados mais a frente. Frameworks a grande vantagem é a agilidade no desenvolvimento e documentação extensa. 

 

Se uma empresa/aplicação cresce, pode ter certeza, os que vier a trabalhar na aplicação não pensaram igual a você, "gosto de desenvolver do zero", é você quem tem que se adequar ao mercado, e não ao mercado a você. 
 

Alguns frameworks tem suas limitações e o cake é um deles, este força a  usar suas convenções e não te ajudara a escalar o projeto. 

 

Não estou puxando sardinha pro Laravel, mas não vejo nenhuma limitação nesta obra de arte, principalmente em escalar qualquer projeto. 
"O que mais vejo em grupos é a limitação do próprio desenvolvedor", pois pulam etapas básicas e vai direto para o framework. 

 

:thumbsup:



 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 07/02/2017 at 00:13, Mateus Silva disse:

se eu usar MVC, alguém poderia me mostrar um exemplo de uma boa organização dos diretórios neste modelo ?

 

Por que raios você está preocupado com diretórios? MVC não tem absolutamente nada a ver com diretórios. Não importa a arquitetura que você vá utilizar; siga as PSR; a PSR-4 diz respeito ao autoloader: http://www.php-fig.org/psr/psr-4/

 

Em 07/02/2017 at 00:13, Mateus Silva disse:

Estou iniciando um projeto que vai ser grande (bem grande) e terá constantes atualizações com novos módulos e manutenção nos já existentes!

 

Grande é relativo; grande comparado a quê? A sugestão de trabalhar com DDD é interessante; tente visualizar cada um dos contextos da aplicação e trabalhá-los individualmente; isso evita que você se perca num emaranhado de coias.

 

Em 07/02/2017 at 00:13, Mateus Silva disse:

PS. O sistemas vai ser criado do zero sem utilização de frameworks.

 

Por quê?

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Williams Duarte disse:

Uma coisa é programar por Hobby e fazer alguns freelas, a outra é escalar um projeto, onde este demandara por profissionais qualificados mais a frente. Frameworks a grande vantagem é a agilidade no desenvolvimento e documentação extensa. 

 

Se uma empresa/aplicação cresce, pode ter certeza, os que vier a trabalhar na aplicação não pensaram igual a você, "gosto de desenvolver do zero", é você quem tem que se adequar ao mercado, e não ao mercado a você. 
 

Alguns frameworks tem suas limitações e o cake é um deles, este força a  usar suas convenções e não te ajudara a escalar o projeto. 

 

Não estou puxando sardinha pro Laravel, mas não vejo nenhuma limitação nesta obra de arte, principalmente em escalar qualquer projeto. 
"O que mais vejo em grupos é a limitação do próprio desenvolvedor", pois pulam etapas básicas e vai direto para o framework. 

 

:thumbsup:



 

Concordo em alguns pontos.

 

Porém, não vejo problema algum em desenvolver qualquer projeto do zero, nem vejo problema em documentá-lo, se o projeto recebe mais tarde outros profissionais para atuar, já que estes são denominados "profissionais mais a frente", eles saberão com certeza como dar continuidade, expandir o projeto em questão. Desenvolver um projeto do zero é uma arte bélica, é o verdadeiro sentido de "criar/desenvolver". O que o Mateus quer dizer, (eu acho) é que desenvolver do zero, ele puxa o controle pra ele, sem depender de limitação ou exigência da ferramenta.

 

Agora, se por exigência por parte do contratante, o "desenvolvedor do zero" tem de estar apto e preparado para utilizar um bom Framework, e não vejo porque não utilizar o Laravel, é bom framework realmente, e bem aceito no mercado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, Alaerte Gabriel disse:

Porém, não vejo problema algum em desenvolver qualquer projeto do zero, nem vejo problema em documentá-lo, se o projeto recebe mais tarde outros profissionais para atuar.

O problema é este, muitos não sabem nem como se documenta um projeto, sem falar que sai caro fazer toda está documentação, se for para futuramente deixar um vespeiro na mão de outras pessoas, que escolha um bom FW e trabalhe em cima. Já trabalhei em empresas onde os antigos desenvolvedores deixaram bombas, se mexer quebra parte da aplicação, colocar novos requisitos nem pensar.

Estou falando de sistemas de médio a grande porte, onde é mais fácil deixar o legado pra trás, e ter como base para o novo um FW e  não de microsites onde um dois mete a mão.  Pois se a equipe cresce rapidamente, já tem toda um gama de documentação. Seja o FW front ou back.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Williams Duarte esse é um problema endêmico do mundo do desenvolvimento. Trabalhei nas mais variadas empresas, desde empresa com 3 pessoas, até empresa de âmbito nacional com um número expressivo de funcionários. Todas sofreram, sofrem e/ou sofrerão com esse problema. Somente os ERPs globais (SAP, AX, etc...) eu posso considerar uma exceção, pois, você deve desenvolver neles e ponto final. E nem são tão padronizados assim.

 

@Mateus Silva  normalmente, quando encontro com pessoas com resistência a frameworks, é por um pequeno sentimento de que se tornarão "menos" programadores por estarem utilizando uma ferramenta. Pergunta, o contador deixa de ser "menos" contador por utilizar uma calculadora ao invés de realizar os cálculos de cabeça? Alguém que usa uma calculadora HP 12C tem menos controle que alguém que utilize uma calculadora sharp elsi mate el-230? Ou até outros exemplos: um pedreiro é "menos pedreiro" por usar uma betoneira em detrimento de uma enchada com uma caixa de cimento? O marceneiro é "menos" marceneiro por utilizar ferramentas elétricas ao invés de manuais?

 

Nenhum deles deixará de ter controle na ação que desenpenharem, eles ainda serão totalmente responsável pelo trabalho que realizaram, e isso tem tudo haver com confiança na ferramenta que estão utilizado. O framework não é nada mais que uma ferramenta e, sua função, não difere em nada do que qualquer outra ferramenta aqui mencionada.  O contrário também é verdadeiro, ninguém será melhor que outro apenas por utilizar inúmeras ferramentas.

 

Hoje em dia não importa qual framework você utiliza, seja X, Y ou Z ou se nem utiliza um framework. Apenas que entenda os padrões que eles estão utilizando. Eu, particularmente, aprendi apenas um framework (CodeIgniter), pois ele não segue nenhum padrão. Mas trabalho basicamente com qualquer framework, apenas porque aprendi como deve funcionar o MVC, PSRs, Design Patterns, entre outros muitos estudos ligados ao desenvolvimento de software. Caso eu tenha alguma dúvida, o manual com certeza irá me atender. Se não me atender, existem fóruns para dúvidas rápidas (tal qual iMasters). Se nem isso me ajudar, bem, por que diabos usaram esse FrameWork?

 

Se achas um framework demasiado grande, utilize um micro framework. Todos eles são escalonáveis, se necessitar de algum módulo novo, basta inserí-los. Tenho certeza que sua produtividade se multiplicará, seus sistemas serão mais seguros e confiáveis e reduzirá o custo de manutenção. Acredito, custo de manutenção é intrinsicamente relacionado ao custo de desenvolvimento.

 

Se mesmo com as vantagens do uso de um framework tiver receio em utilizá-lo, não é um problema. Apenas atente-se para seguir os padrões mundiais de desenvolvimento PHP (PSR's) e, também, os padrões de desenvolvimento de software (design principles, design patterns, DDD, TDD, etc..)

 

Para finalizar, deixo a "frase do ano" dos meus colegas desenvolvedores aonde eu trabalho:

Citar

One man's crappy software is another man's full time job. ~Jessica Gaston

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Alaerte Gabriel Exatamente isso, eu gosto de ter liberdade total no meu sistema.

@Williams Duarte Sim! Trabalho em uma empresa onde o desenvolvedor criou o software estruturado, é uma bela de uma bagunça, e é por este motivo que quero fazer o negócio bem feito, pra não dar problema pra futuros desenvolvedores que venham a trabalhar nisso também.

@Gabriel Heming Então Gabriel, não é nem isto de "me tornar menos programador" é que eu realmente ainda não vi (ou não tive a necessidade) de algo que só um framework me disponibilizasse ou que fosse realmente muito melhor utilizar um. Quanto aos padrões, na maioria das minhas aplicações eu sigo o modelo MVC e PSR-4, recorri aqui ao fórum pra realmente ver o que seria mais útil e produtivo a longo prazo pro sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E PSR-7?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A não ser que seja um sistema muito especifico, acredito que seja válido utilizar um framework, micro-framework ou então componentes que são mantidos pela comunidade PHP (Packagist/Composer), acho que assim é possível ficar mais focado em solucionar o problema da regra de negócio e não em problemas que já foram muito bem solucionados por várias pessoas da comunidade, como por exemplo: persistência no banco de dados, envio de e-mail, logs, etc.

 

No seu caso, como você disse que gostaria de ter uma "liberdade", acho que seria interessante a utilização de componentes, pois caso algum desses componentes não atenda mais a sua necessidade e você precise de algo mais especifico, acredito que terá menos dificuldade em alterá-lo; visto que realmente alguns frameworks ainda fazem com que o seu código fique acoplado ao código do framework, dificultando assim futuras modificações.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gabriel Heming Não cheguei a ver sobre, vou pesquisar!

@deoliveiralucas Sim sim, uso o composer pra algumas coisas, twig, por exemplo. E é exatamente isso, o framework fica muito "dependente", tendo o código na mão eu acredito que seja melhor de adaptar ao que eu optar pelo melhor caminho, mas, como eu disse ai à cima, não afirmo nada, a gente tá sempre aprendendo coisas novas então se eu disse algo errado ou que possa ser tratado de forma melhor estou aberto à sugestões!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.