Que padrão é esse? :D

Senhores, tenho o seguinte cenário:

  • Sistema desktop com banco de objetos+interface Swing;

  • uma única classe guarda as instâncias de todas as janelas, do banco e dos objetos de busca e inserção existentes; possui também métodos que são análogos a certos casos de uso, como por exemplo “inserir cliente”, e por aí vai.

  • cada janela recebe uma instância desse objeto que contém instâncias e métodos. dessa forma os ouvintes se aproveitam da interface pública desse kra pra fazer a coisa funcionar.

bom, não sei se expliquei tudo, mas gostaria de saber se isso se enquadra em algum padrão de projeto. E se sim, como melhorar a coisa toda.

grato.

Olá

Toda classe que faz mais de uma coisa viola os princípios básicos de coesão. Esta classe deve ter sido feita por alguém com pouca noção de programação estruturada, nenhum conhecimento de programação modular e pouca experiência em programação orientada a objetos.

O problema da classe errada se espalha para o resto do sistema

Isto se enquadra no padrão de programação orientada a exemplo de como não se fazer. Como melhorar? Simples: Fazer como todo mundo faz com cada classe com sua responsabilidade.

[]s
Luca

Este é o famoso Padrão de Projeto Gambis.

Veja:

Gambi Design Patterns catalogados

Static Spree: Um dos patterns mais utilizados da POG (Programação Orientada a Gambiarras). O objetivo desse padrão é que tudo fique visível em qualquer canto, porque private é coisa de gente envergonhada. Também conhecido por Public Static Spree, pois comumente tudo é feito “public static”.

Lone Wolf: Também conhecido por Highlander (só pode haver um), esse é a boa e velha “classe-faz-tudo”. O sistema todo está concentrado numa classe procedural que faz tudo, geralmente usando o padrão Static Spree.

The Hitchhiker’s Guide to the Galaxy: um objeto que trafega por tudo quanto é canto, mas normalmente só um ou dois métodos fazem alguma coisa com ele, o resto só repassa.

Nonsense Flag: Por um legítimo impulso gambiarrizador solucionador de problemas, o desenvolvedor salpica um monte de variáveis com nomes sensacionais como “newCounter2”, “jaTrocouDeAba”, “passouPorAqui”, “numeroMagico” e etc.

RCP Pattern: Significa Reuse By Copy-and-Paste (Reuso por copiar e colar). O RCP dita que, na pressa, quando não dá pra fazer a coisa por herança, basta copiar e colar, quantas vezes for necessário.

Existem vários outros. Veja em http://desciclo.pedia.ws/wiki/POG

POG é o que há de mais moderno. Lá na faculdade é só o que se fala.


Sombriks,

Do jeito que li seu texto eu já ia pensando que isso aí tá uma Gambiarra livrada. Aceite isso como uma crítica construtiva e siga os procedimentos do Mestre Luca.

Boa tarde!

Ouso dizer que há sim alguns padrões. Tais como:

Blob (ou God Object) : http://en.wikipedia.org/wiki/God_object ;
Big Ball of Mud : http://en.wikipedia.org/wiki/Big_ball_of_mud ;

mas possívelmente há outros. Podes ver mais em:

Até!

Esta classe muito provavelmente é a “interpretação” ou “tradução” dos padrões Bridge ou façade dos GoF…

por acaso é código escrito em ferramentas MS?

tá cheio de gênios … popularizando o mundo com a qualidade MS.

hehehehe…

huahuahua, eu sabia que estava ruim, mas agora eu tô vendo que está pésimo!

Ei, lembrem-se que não há framework por trás, e eu realmente gostaria de umas dicas sobre interligação de módulos; veja por exemplo a janela A e a Janela B; como trocar informações à luz dos padrões de projeto?

Seria de grande ajuda, e eu garanto repassar um dia tudo o que eu aprender, :smiley:

qq dica agradeço!

É isso aí, ninguém tem contra-cenário pra mim? Muito legal o senso de comunidade da comunidade…

Aham… senso de comunidade da comunidade… bonito isso.

Olá

Penso que você não leu minha resposta e então vou repetir:

Como melhorar? Simples: Fazer como todo mundo faz com cada classe com sua responsabilidade.

É feio dar “UP” em posts de forum.

[]s
Luca

Cara o que é esse tal de “UP” ???

Olá

Para quem não tem google, explico que fazer UP em forum é postar de novo para tentar trazer o tópico de novo para ser visto. Considera-se como falha na netiqueta.

[]s
Luca

Entendo…

Bom, e se o cara cria o tópico às 8 da manhã e algumas pessoas lêem ele durante um tempo mas ninguém responde (sei lá, por muitas razões)…vai chegar uma hora em que, de tantos tópicos criados, esse tópico vai caindo, caindo até sumir da primeira página (tópicos recentes)…então danou-se…daí o que ele faz? Acessa o tópico e coloca mais um frase desesperadora pro tópico “subir”…

Qual seria o procedimento correto nesse caso?

Putz, já fugimos do assunto original, desculpe…

O procedimento mais aceitavel eh que o autor da pergunta que nao foi respondida procure mais informacao no forum ou na net, e poste algo que acrescente valor ao topico, de forma a trazer discussao pra ele, ao inves de simplesmente chamar atencao ao topico, que eh o caso do ‘up’. :wink:

Olá

O procedimento correto é imaginar que se ninguém respondeu é porque ninguém sabe e então a gente deve ir no google mesmo. Bom é quando o cara volta aqui e coloca a solução que ele achou no google. Este é o espírito de comunidade.

[]s
Luca

[quote=Luca]Olá

O procedimento correto é imaginar que se ninguém respondeu é porque ninguém sabe e então a gente deve ir no google mesmo. Bom é quando o cara volta aqui e coloca a solução que ele achou no google. Este é o espírito de comunidade.

[]s
Luca[/quote]

Concordo plenamente, mas pode acontecer de, por um azar dos Deuses no dia em que o coitado postou não tinha ninguém conectado que soubesse a resposta pra ajudar. Por exemplo, só 2 dias depois alguém que saberia conectou e daí já era…

Ok, tá explicado.

Galera eu fio no gogle e achei uns links legais.
Também fui no gtk-gnutella e achei uns pdf’s ilegais, :smiley:

pelo que eu li (e continuo lendo) meu problema aqui é a alta acoplação dos objetos, isto é, meu GOD object sabe demais sobre os outros objetos; GOD esse, que, aliás, é um tipo de Command:

isso se reforça quando lembramos que todas as ações do sistema (abriSessao, fecharSessao, tryLogin, etc.) estão aqui. A diferença para um Command decente que você conheça é que eu só tenho um (anti-pattern GOD) e possui aquela complicação do alto acoplamento, ou seja, ele realmente sabe que os componentes com que ele lida são JFrames, Bancos, e tais objetos, que recebem instâncias dele também o conhecem muito profundamente; tem acesso a toda sua interface pública. No caso dos membros dele é pior porque não só a interface pública de uma tela de login fica exposta como também certos detalhes da classe pai (JFrame) ficam visíveis. Como eu disse alta acomplação; “só dá certo se for com esse aí”.

para sanar um pouco a solução seria quebrar a interface pública do pessoal, de forma a garantir uma certa abstração (janela de login recebe no construtor algum fulano que implemente uma interface dedicada com métodos exclusivos disso; a própria janela de login deve implementar chamadas padrão para uma tela de login; assim não importa se for feito em SWT, JCurses ou o escambau) nas funcionalidades do sistema.

Todavia ainda não encontrei uma forma decente de “dar boot” no sistema;

mesmo que meu GOD object não existisse:

1- Eu ainda ia ter de instanciar as coisas em algum lugar. ainda não li o suficiente para resolver essa parte.

2- Depois de instanciados, eles teriam de se comunicar (os dados do formuláro para o banco, por exemplo) e trocar informações. estou aqui na mesma situação do ítem antenrior.

O que eu posso dizer até agora é que do jeto que está a coisa funciona, mas seria legal a manutenção ser simplificada.

[quote=Luca]Olá

Penso que você não leu minha resposta e então vou repetir:

Como melhorar? Simples: Fazer como todo mundo faz com cada classe com sua responsabilidade.

É feio dar “UP” em posts de forum.

[]s
Luca[/quote]

Luca, eu sinto dizer mas essa forma simples de melhorar remove não mais que um pingo d’agua num oceano. Pôxa, o que custa dar links de coisas que já leu, contar situações vividas?

[quote=Luca]Olá

O procedimento correto é imaginar que se ninguém respondeu é porque ninguém sabe e então a gente deve ir no google mesmo. Bom é quando o cara volta aqui e coloca a solução que ele achou no google. Este é o espírito de comunidade.

[]s
Luca[/quote]

me desculpe pelo “UP”, realmente não cometerei esse tipo de gafe denovo, :smiley:

Pra finalizar, se alguém está, ou já passou por cenário semelhante (Objetão com tudo dentro regendo a banda de janelas e banco, :D), por favor deixe a sua contribuição.

Diga lá,

O que eu faria no seu caso seria esquecer, por enquanto, esse projeto, e me dedicar a estudar padrões de software por um tempo. Depois que você vir o monte de idéias legais que existem por aí, você vai ter ânimo pra implementar uma versão 2.0 desse sistema, agora fazendo as coisas de maneira mais organizada.

Dê uma lida no livro ‘Design Patterns’, do Gamma.
Com certeza vai te ajudar a pensar melhor. :wink:

Té mais,

[quote=iSoron]Diga lá,

O que eu faria no seu caso seria esquecer, por enquanto, esse projeto, e me dedicar a estudar padrões de software por um tempo. Depois que você vir o monte de idéias legais que existem por aí, você vai ter ânimo pra implementar uma versão 2.0 desse sistema, agora fazendo as coisas de maneira mais organizada.

Dê uma lida no livro ‘Design Patterns’, do Gamma.
Com certeza vai te ajudar a pensar melhor. :wink:

Té mais,[/quote]

Acredito que o chefe/cliente dele não vá gostar mto da idéia de deixar o projeto de lado :roll:

Vai “distribuindo os poderes” desse GOD object entre outros objetos, comece pela parte de persistencia que, acredito eu, seja a mais fácil de fazer isso

Procure algo sobre fábricas ou injeção de dependências.

Model-view-presenter, presentation model, e aqui.