Dúvidas de Boas Práticas

31 views
Skip to first unread message

Paulo Dev

unread,
Feb 19, 2021, 9:23:18 AM2/19/21
to Django Brasil
Olá Pessoal, 
Preciso de uma orientação dos mais experientes em projetos grandes.

Eu desenvolvo software a 30 anos, tive uma janela de 8 anos sem desenvolver e a 1 ano peguei duas grandes plataformas e resolvi desenvolve-las em Python/Django.

Agora que os projetos já tem corpo estou desconfortável com a estrutura do Django: models.py, admin.py, utils.py, urls.py e views.py

Para cada app instalado o django cria esses arquivos e acabei distribuindo a programação dentro desses programas. A View virou um programa gigante com diversas funções. Utils tem pouca coisa. Mas o que mais me incomoda são os models (tabelas) distribuídas nos apps. Recentemente tive um problema com inclusão circular, o que me obrigou a mudar uma tabela de model.

Eu tenho algumas dúvidas, se puderem me ajudar eu seria imensamente grato:

1 - Eu já ouvi falar que dentro da View só deve ter view e não códigos grandes. E também em alguns programas que eu vi no git, tem um main.py... qual é a melhor maneira de distribuir as funcionalidades pelos fontes?

2 - Programas grandes deixam o sistema lento? Pergunto porque muitas funcionalidades chamam somente pequenas linhas de fontes grantes.

3 - Eu posso escolher colocar todas as tabelas dentro do core/model.py ? Sem fazer a distribuição nos models dentro dos apps?

4 - É comum criar diversos apps no programa?

Se alguém tiver uma documentação ou uma orientação de boas práticas para sistemas grandes em python que eu já deveria conhecer e puder me orientar agradeço muito

Grato pelo apoio

Rafael Henter

unread,
Feb 19, 2021, 9:49:19 AM2/19/21
to django...@googlegroups.com
Bom dia Paulo,

Aqui vou estar falando opniões pessoais de alguém que trabalha a muitos anos com isso.



1 - Eu já ouvi falar que dentro da View só deve ter view e não códigos grandes. E também em alguns programas que eu vi no git, tem um main.py... qual é a melhor maneira de distribuir as funcionalidades pelos fontes?
Costumo orientar a seguirem a os Princípios Solid* que embora fale de orientação a objetos você pode aplicar em qualquer coisa na área de desenvolvimento.

Sendo assim:
-  separe as suas views por responsabilidade. Uma view grande é horrível de dar manutenção alem de ser um sinal de “mal cheiro” dizendo que tem algo errado ali para ter concentrado código demais em um ponto.
- Se preciso crie uma pasta(modulo python) views e nesta pasta separe suas views por responsabilidade que ja vai deixar elas bem menores
- Não se se ja usa, mas CBV é bem menos verboso que as FBV que você tem de fazer tudo na mão.
- Utilize Fat Models ou caso não goste desta abordagem, use o seu Form ou Serializador para a responsabilidade de criar e alterar para não fazer este código na view. Assim a view vai ter o trabalho somente de orquestrar as necessidades.

 2 - Programas grandes deixam o sistema lento? Pergunto porque muitas funcionalidades chamam somente pequenas linhas de fontes grandes.

Não necessariamente, tudo depende da forma como você usa e arquiteta seus sistema. Vários pontos podem deixar seu sistema lento, como uma modelagem ruim, muitos dados em um só contexto ou serializador (caso use DRF)

3 - Eu posso escolher colocar todas as tabelas dentro do core/model.py ? Sem fazer a distribuição nos models dentro dos apps?

ja vi pessoas recomendando isso para não ter problemas de "imports circular”, mas isso fere totalmente quase todos os 5 princípios do Solid. Se você mantem tudo separado por responsabilidade ao mesmo tempo você deixa suas Apps Plugaveis, ou seja, se você precisar da mesma funcionalidade você pode apenas copiar e colocar que vai funcionar sem muito trabalho. Se você acopla tudo, te gere um super re-trabalho e dificulta a re-utilização do seu codigo

4 - É comum criar diversos apps no programa?
É super comum. Você pode ter quantos forem necessários. Se você tiver uma boa estrutura de pastas, isso vai até te ajudar a mexer somente no que é necessário.


Exemplo de um dos meus projetos:







Espero ter ajudado. 

Abraço,

Rafael Henter




--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/django-brasil/a1df8e26-154f-4247-89f3-2f6c8dd78afcn%40googlegroups.com.

Rafael Henter

unread,
Feb 19, 2021, 9:52:26 AM2/19/21
to django...@googlegroups.com
On Feb 19, 2021, at 11:49 AM, Rafael Henter <hent...@gmail.com> wrote:

Bom dia Paulo,

Aqui vou estar falando opniões pessoais de alguém que trabalha a muitos anos com isso.



1 - Eu já ouvi falar que dentro da View só deve ter view e não códigos grandes. E também em alguns programas que eu vi no git, tem um main.py... qual é a melhor maneira de distribuir as funcionalidades pelos fontes?
Costumo orientar a seguirem a os Princípios Solid* que embora fale de orientação a objetos você pode aplicar em qualquer coisa na área de desenvolvimento.

Sendo assim:
-  separe as suas views por responsabilidade. Uma view grande é horrível de dar manutenção alem de ser um sinal de “mal cheiro” dizendo que tem algo errado ali para ter concentrado código demais em um ponto.
- Se preciso crie uma pasta(modulo python) views e nesta pasta separe suas views por responsabilidade que ja vai deixar elas bem menores
- Não se se ja usa, mas CBV é bem menos verboso que as FBV que você tem de fazer tudo na mão.
- Utilize Fat Models ou caso não goste desta abordagem, use o seu Form ou Serializador para a responsabilidade de criar e alterar para não fazer este código na view. Assim a view vai ter o trabalho somente de orquestrar as necessidades.

 2 - Programas grandes deixam o sistema lento? Pergunto porque muitas funcionalidades chamam somente pequenas linhas de fontes grandes.

Não necessariamente, tudo depende da forma como você usa e arquiteta seus sistema. Vários pontos podem deixar seu sistema lento, como uma modelagem ruim, muitos dados em um só contexto ou serializador (caso use DRF)

3 - Eu posso escolher colocar todas as tabelas dentro do core/model.py ? Sem fazer a distribuição nos models dentro dos apps?

ja vi pessoas recomendando isso para não ter problemas de "imports circular”, mas isso fere totalmente quase todos os 5 princípios do Solid. Se você mantem tudo separado por responsabilidade ao mesmo tempo você deixa suas Apps Plugaveis, ou seja, se você precisar da mesma funcionalidade você pode apenas copiar e colocar que vai funcionar sem muito trabalho. Se você acopla tudo, te gere um super re-trabalho e dificulta a re-utilização do seu codigo

4 - É comum criar diversos apps no programa?
É super comum. Você pode ter quantos forem necessários. Se você tiver uma boa estrutura de pastas, isso vai até te ajudar a mexer somente no que é necessário.


Exemplo de um dos meus projetos:

<Screen Shot 2021-02-19 at 11.42.51 AM.png>

Paulo Dev

unread,
Feb 19, 2021, 12:44:53 PM2/19/21
to django...@googlegroups.com

Rafael,

 

Grato pela orientação e pelo seu tempo!

 

Abs

Reply all
Reply to author
Forward
0 new messages