Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Gerenciamento de projetos

Olá pessoal, tenho uma dúvida, existe alguma forma de fazer um "projeto pai", onde vários projetos herdam dele tanto front quanto back, pra quando precisar atualizar umas regras de negocio, não ter que alterar em todos os projetos novamente, como se fosse um aplicativo mobile que lança atualização e quem tem instalado atualiza, agradeço muito quem puder dar essa luz para eu poder pesquisar aqui. Pode ser para WebForms ou MVC.

4 respostas
solução!

Olá, Lucas

Sim, é possível, e a solução para isso é pensar num bom projeto de arquitetura de software. Eu não sei exatamente que tipo de projetos você tem em mente, então vou colocar aqui várias ideias.

Imagino que você queira manter vários projetos (um para cada cliente) construídos sobre o mesmo projeto-base, certo?

O que você pode fazer é:

  • Definir o que é o projeto-base
  • Quais são as regras de negócio comuns a todos os projetos?
  • Quais são os modelos comuns a todos os projetos?
  • Quais são os controllers comuns a todos os projetos?
  • Quais são as telas/páginas/views comuns a todos os projetos?

O .Net Core recentemente introduziu o conceito de "Razor Class Libraries", que permite empacotar os seus componentes do front-end (Model, View, e Controllers) para que você possa reutilizá-los em diversos projetos.

https://docs.microsoft.com/en-us/aspnet/core/razor-pages/ui-class?view=aspnetcore-2.1&tabs=visual-studio

Além de usar Razor Class Libraries, você deve quebrar sua solução em diversos projetos no back-end, para não misturar o código do projeto-base com os projetos custom. Por exemplo, digamos que você esteja criando um web app para controle de estoque da "Loja do Zezinho", mas quer usar um projeto-base que possa ser reaproveitado em outros projetos. Você poderia ter:

  • Projeto ControleEstoque.UI.Base.csproj (Razor Class Libraries - Front End)
  • Projeto ControleEstoque.UI.LojaDoZezinho.csproj (MVC - Front End)
  • Projeto ControleEstoque.RegrasNegocio.Base.csproj (Class Library - Back End)
  • Projeto ControleEstoque.RegrasNegocio.LojaDoZezinho.csproj (Class Library - Back End)

Agora, o que é o projeto-base e o que é específico da Loja do Zezinho? Isso depende do que você considera, por exemplo, como "regra geral" e como "regra da Loja do Zezinho". Normalmente, você só terá uma boa ideia sobre essa diferença se conhecer bem o mercado, ou quando aparecerem mais clientes do seu projeto de controle de estoque.

Além disso, pesquise sobre estes conceitos:

  • Separação de Responsabilidades
  • Princípio Open-Closed: significa que uma classe deve ser aberta para extensão, mas fechada para modificação. Isto é, deixe uma class tão bem definida que qualquer mudança nela seja desnecessária. Se você precisar modificar seu funcionamento, utilize herança, polimorfismo ou métodos de extensão
  • classe-base, modificadores virtual e override
  • O padrão de projeto (design pattern) chamado Template Method, que é muito usado nesse tipo de projeto
  • Injeção de dependência (e Inversão de controle). O ASP.NET Core já vem com essa funcionalidade embutida. Veja como criar instâncias a partir de interfaces.
  • Programação com interfaces

Enfim, tem muito assunto para tratar, e estudar, dependendo do que você já sabe sobre ASP.NET Core e do tipo de projeto que você tem em mente. O que você acha?

Marcelo,

Muito obrigado por expressar sua opinião, já me ajudou muito!

Pensando assim, no caso de publicar esses projetos como funcionaria, se eu alterar o projeto base todos os outros projetos precisaram ser "recompilados atualizando a referência"?

Sou um pouco leigo ainda na plataforma .Net, se eu tiver errado em alguma parte pode me corrigir rsrsrs.

Oi Lucas

Pensando assim, no caso de publicar esses projetos como funcionaria, se eu alterar o projeto base todos os outros projetos precisaram ser "recompilados atualizando a referência"?

Sim, com certeza é necessário recompilar os projetos cada vez que você modificar o projeto-base. Isso faz parte do ciclo de vida da aplicação.

Eu recomendo estudar aos poucos, porque são vários assuntos, e eles são extensos. Comece com um projeto bem pequeno, e vá estudando e aplicando os conceitos conforme você vai aprendendo. Boa sorte!

Obrigado Marcelo!