pontoNETpt
A comunidade PontoNetPT está direccionada a todos os programadores que trabalhem com a plataforma .NET.
(Anti) Pattern Happy, uma Verdadeira DELÍCIA!

Recentemente deparei-me com o termo "Pattern Happy". Imaginem alguém que aplica padrões a todos os problemas que encontra, esse é um indivíduo a sofrer do que podemos chamar de "padronite"! O padronítico é alguém que tenta alimentar o seu ego de tal forma, querendo autotitular-se de Pattern King ou algo parecido, que aplica padrões em tudo, mesmo nos casos mais bizarros...

Encontrei um texto em Java que é uma verdadeira delícia e ao mesmo tempo uma caricatura que exemplifica bem o termo. Tomei a liberdade de pegar nesse código e transformá-lo em C#.  (J#, o que é isso?)

Faço-vos o seguinte desafio, analisem o código e tentem perceber o que faz e para que serve antes de ver o final.

   1:  using System;
   2:   
   3:  interface MessageStrategy
   4:  {
   5:      void sendMessage();
   6:  }
   7:   
   8:  abstract class AbstractStrategyFactory
   9:  {
  10:      public abstract MessageStrategy createStrategy(MessageText message);
  11:  }
  12:   
  13:  sealed class MessageText
  14:  {
  15:      object contents;
  16:      public object getPayLoad()
  17:      {
  18:          return contents;
  19:      }
  20:      public void configure (object obj)
  21:      {
  22:          contents = obj;
  23:      }
  24:      public void send (MessageStrategy message)
  25:      {
  26:          message.sendMessage() ;
  27:      }
  28:  }
  29:   
  30:  class DefaultFactory : AbstractStrategyFactory
  31:  {
  32:      private DefaultFactory()
  33:      {
  34:      }
  35:      static DefaultFactory instance;
  36:      public static AbstractStrategyFactory getInstance()
  37:      {
  38:          if (instance == null)
  39:              instance = new DefaultFactory();
  40:          return instance;
  41:      }
  42:      public override MessageStrategy createStrategy(MessageText mensagem)
  43:      {
  44:          return new ConcreteMessage(mensagem); 
  45:      }
  46:  }
  47:   
  48:  class ConcreteMessage : MessageStrategy 
  49:  {
  50:      private MessageText message;
  51:      public ConcreteMessage(MessageText mt)
  52:      {
  53:          message = mt;
  54:      }
  55:      public void sendMessage()
  56:      {
  57:          object obj = message.getPayLoad();
  58:          Console.WriteLine(obj.ToString() );
  59:      }
  60:  }
 
Ainda cá estão? um pouco confusos..., não...?
Bem já falta pouco...
 
 
  61:   
  62:  public class EntryPoint
  63:  {
  64:      public static void Main ()
  65:      {
  66:          MessageText mt=new MessageText() ;
  67:          mt.configure(mt.ToString());
  68:          AbstractStrategyFactory factory = DefaultFactory.getInstance();
  69:          MessageStrategy Strategy = factory.createStrategy(mt);
  70:          mt.send(strategy );
  71:          Console.ReadLine();
  72:      }
  73:  }

Descobriram?

 

Que tal substituirem a linha 67:

mt.configure(mt.ToString());

por

mt.configure("Hello World! Yeap, it's me! Plain Good Old  - Hello World!");

ou 

mt.configure("Este é apenas mais um dos meus programas a sofrer um caso agudo de padronite!");   //  :)

Há casos graves de padronite, a necessitar de ajuda associativa dos padroníticos anónimos. Ou vendo as coisas de forma positiva, tal como customo dizer a um colega e ele a mim: aqui está uma boa oportunidade de negócio para fazer um ofuscator!


Posted 30-8-2005 0:47 por Rui Claro
Filed under:

Comments

Rui Claro wrote re: (Anti) Pattern Happy, uma Verdadeira DELÍCIA!
on 31-8-2005 10:10
Podes fazer o download do artigo "IT doesn't matter" desde:

http://www.hbsp.harvard.edu/b01/en/common/item_detail.jhtml?id=R0305B
Anonymous wrote re: (Anti) Pattern Happy, uma Verdadeira DELÍCIA!
on 1-7-2009 1:44
Muito bom :D

No livro Design Patterns Explained falam um pouco deste fenómeno. Acho que (quase) toda a gente que começa a estudar o mundo dos patterns passa por isto, e passa a ver o potencial de utilização dos patterns por todo o lado, mesmo num Hello World :P.

No livro tb referem outra situação análoga: qd um programador descobre a herança de classes. É uma subclasse para o cão, para o gato, para o passarinho... :)
Anonymous wrote re: (Anti) Pattern Happy, uma Verdadeira DELÍCIA!
on 1-7-2009 1:44
:)

Pois.. eu confesso-me culpado! Acaba por acontecer a todos, certo ? Certo ? CERTO ? (upps.. ng responde!)

Faz-me lembrar o célebre artigo que um colega me indicou "IT doesn't matter". Por vezes concentramos as nossas forças no objectivo errado.. e esquecemo-nos qual a verdadeira razão da nossa profissão.

Já agora... eu sei que já tivemos a discussão antes.. mas DefaultFactory não é thread safe :P

Anonymous wrote re: (Anti) Pattern Happy, uma Verdadeira DELÍCIA!
on 1-7-2009 1:44
Alguem pode me apontar link ao Nicholas Carr's "It doesn't matter". Tantos comentários e nem consigo achar original, sem subscrição pága.
Anonymous wrote re: (Anti) Pattern Happy, uma Verdadeira DELÍCIA!
on 2-7-2009 2:00
Muito bom :D

No livro Design Patterns Explained falam um pouco deste fenómeno. Acho que (quase) toda a gente que começa a estudar o mundo dos patterns passa por isto, e passa a ver o potencial de utilização dos patterns por todo o lado, mesmo num Hello World :P.

No livro tb referem outra situação análoga: qd um programador descobre a herança de classes. É uma subclasse para o cão, para o gato, para o passarinho... :)
Anonymous wrote re: (Anti) Pattern Happy, uma Verdadeira DELÍCIA!
on 2-7-2009 2:00
:)

Pois.. eu confesso-me culpado! Acaba por acontecer a todos, certo ? Certo ? CERTO ? (upps.. ng responde!)

Faz-me lembrar o célebre artigo que um colega me indicou "IT doesn't matter". Por vezes concentramos as nossas forças no objectivo errado.. e esquecemo-nos qual a verdadeira razão da nossa profissão.

Já agora... eu sei que já tivemos a discussão antes.. mas DefaultFactory não é thread safe :P

Anonymous wrote re: (Anti) Pattern Happy, uma Verdadeira DELÍCIA!
on 2-7-2009 2:00
Alguem pode me apontar link ao Nicholas Carr's "It doesn't matter". Tantos comentários e nem consigo achar original, sem subscrição pága.

Add a Comment

(requerido)  
(opcional)
(requerido)  
Remember Me?
If you can't read this number refresh your screen
Enter the numbers above:  
Powered by Community Server (Commercial Edition), by Telligent Systems