[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 

Forum Read-Only! Check the new site and forum here!

Mentawai 2.0!  XML
Forum Index -> Comentários Gerais Go to Page: Previous  1, 2, 3 Next 
Author Message
thiagoalgo



Joined: 12/01/2007 13:47:35
Messages: 138
Offline

Uma outra sugestão que tenho é de trocar a configuração programática por nenhuma configuração. Eu explico. Ao invés de termos que configrar a action no ApplicationManager poderíamos ter um a chamada diretamenta pela URL. Por exemplo: Cliente.cadastrar.mtw, chamaria o método cadastrar da classe Cliente. Esse método por sua vez retornaria uma consequência ao invés de retornar uma String.

O que vocês acham? Essa facilidade pode causar algum problema?
YkyMatt



Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline

thiagoalgo wrote:
Uma outra sugestão que tenho é de trocar a configuração programática por nenhuma configuração. Eu explico. Ao invés de termos que configrar a action no ApplicationManager poderíamos ter um a chamada diretamenta pela URL. Por exemplo: Cliente.cadastrar.mtw, chamaria o método cadastrar da classe Cliente. Esse método por sua vez retornaria uma consequência ao invés de retornar uma String.

O que vocês acham? Essa facilidade pode causar algum problema? 


Cara, se tu registrares no AppManager uma Action e acessar, exemplo: Action.cadastro.mtw, via Reflection o Menta AUTOMATICAMENTE chamará o método cadastro. Entretanto, fazer com que a própria Action retorne uma conseqüência talvez quebre o conceito de "action -> result -> consequence -> view".

Entretanto, se você realmente desejar usar isso, é possível sim. Basta que seja implementada uma camada secundária que será carregada no carregamento do AppManager e será responsável por, via Reflection, carregar as classes de Action's, adicioná-las ao AppManager.

Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais

Mentawai Evangelist
http://www.chronusteam.com
[MSN]
YkyMatt



Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline

YkyMatt wrote:
... 


E ainda, para o caso de você não querer registrar suas Action's no AppManager, essa cama que citei anteriormente poderia ler um determinado campo que tu implementarias na tua Action. Tal campo seria, talvez, um Map< String, Consequence >, de modo que a camada registraria as conseqüências para a Action no AppManager. Desse modo, os métodos da Action continuariam a retornar apenas String's, mas o registro das conseqüências seria feito por outra classe e não manualmente pelo programador no AppManager.

Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais

Mentawai Evangelist
http://www.chronusteam.com
[MSN]
thiagoalgo



Joined: 12/01/2007 13:47:35
Messages: 138
Offline

YkyMatt wrote:

Cara, se tu registrares no AppManager uma Action e acessar, exemplo: Action.cadastro.mtw, via Reflection o Menta AUTOMATICAMENTE chamará o método cadastro. Entretanto, fazer com que a própria Action retorne uma conseqüência talvez quebre o conceito de "action -> result -> consequence -> view".
 


Cara, permita-me discordar, Continuaremos tendo os passos do coneceito que você citou. A diferença é que ao invés de ter uma String como result, termos uma Consequence consequence. O passo consequence do seu conceito continua existindo normalmente como é hoje, controlado da mesma forma pelo framework. Pelo que vejo a única diferença mesmo é o fato de não ter que declarar que as ações dentro do AppManager.

YkyMatt wrote:

Entretanto, se você realmente desejar usar isso, é possível sim. Basta que seja implementada uma camada secundária que será carregada no carregamento do AppManager e será responsável por, via Reflection, carregar as classes de Action's, adicioná-las ao AppManager. 


Se você concordar com meu contra-argumento acima, não acha interessante ter uma feature como essa dentro do próprio framework, mesmo que de forma opcional? Tipo, o menta verifica existe a action registrada no AppManager, se não tiver, tenta pela url diretamente.

O que você acha? Lembrando que o objetivo aqui é discutir para, derepente, implementar uma funcionalidade que pode facilitar ainda mais o conceito de configuração do menta.
YkyMatt



Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline

thiagoalgo wrote:
... 


Desculpe, eu me expressei mal. A aplicação continuaria tendo a arquitetura correta, o que eu quis dizer é que se a Action retornasse uma Consequence, ela quebraria a arquitetura existente no Menta, Struts e outros que denota que a Action não deve conhecer o destino da requisição. Nesse modelo de request >> action -> view, a Action não deve ser responável por armazenar as informações sobre como o usuário permanecerá na aplicação, logo, ela não deve ""saber" quais são as suas consequências. Fazer com que a Action retornasse uma Consequence iria contra os princípios, creio eu, da lei do menor privilégio (aqui, levemente modificada noutro contexto), o de uma Action deve apenas processar dados e não definir exatamente para onde segue o fluxo.

Acho que teria de ser como falei e você concordou: a Action armazenaria num campo suas Consequence`s mas retornaria normalmente um result. Uma camada auxiliar deveria registrar essa Action no AppManager. Ah! Pelo entendi você queria que a Action fosse registrada apenas quando a URL fosse acessada não é? Acho isso completamene fora de cogitação, sei lá, mas acho errado.

Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais

Mentawai Evangelist
http://www.chronusteam.com
[MSN]
thiagoalgo



Joined: 12/01/2007 13:47:35
Messages: 138
Offline

YkyMatt wrote:

thiagoalgo wrote:
... 


Desculpe, eu me expressei mal. A aplicação continuaria tendo a arquitetura correta, o que eu quis dizer é que se a Action retornasse uma Consequence, ela quebraria a arquitetura existente no Menta, Struts e outros que denota que a Action não deve conhecer o destino da requisição. Nesse modelo de request >> action -> view, a Action não deve ser responável por armazenar as informações sobre como o usuário permanecerá na aplicação, logo, ela não deve ""saber" quais são as suas consequências. Fazer com que a Action retornasse uma Consequence iria contra os princípios, creio eu, da lei do menor privilégio (aqui, levemente modificada noutro contexto), o de uma Action deve apenas processar dados e não definir exatamente para onde segue o fluxo.

Acho que teria de ser como falei e você concordou: a Action armazenaria num campo suas Consequence`s mas retornaria normalmente um result. Uma camada auxiliar deveria registrar essa Action no AppManager. Ah! Pelo entendi você queria que a Action fosse registrada apenas quando a URL fosse acessada não é? Acho isso completamene fora de cogitação, sei lá, mas acho errado. 



Acho que agora você foi mais claro sim. Entendi o que você quis dizer. Acho que talvez você tenha razão.
robertwgil


[Avatar]
Joined: 23/02/2007 17:22:13
Messages: 745
Location: São Paulo - SP - Brasil
Offline

Deixe eu entrar de bicão nessa conversa aqui...

Se eu entendi voces estão sugerindo isto?
Code:
 public Consequence execute(){
    // your code here
    return new Consequence(new Forward("pagina.jsp"));
 }
 


Se for mesmo isso é até interessante e uma boa ideia heim...

Robert Gil
Coordenador de Desenvolvimento / Administrador de Redes.

Twitter
[Email] [MSN]
thiagoalgo



Joined: 12/01/2007 13:47:35
Messages: 138
Offline

robertwgil wrote:
Deixe eu entrar de bicão nessa conversa aqui...

Se eu entendi voces estão sugerindo isto?
Code:
 public Consequence execute(){
    // your code here
    return new Consequence(new Forward("pagina.jsp"));
 }
 
 



Sim Robert, era isso que eu havia sugerido. Eu estava pensando na possibilidade de não necesside registrar as consequências no AppMngr. Tipo... você tem uma classe de ação chamada MinhaAcao com um método execute. Ao invés de você informar isso no AppManager você chamaria a url MinhaAcao.mtw e o método execute retornaria a consequence. Ainda estou meio confuso sobre se isso é certo ou errado, na verdade eu acho que facilitaria muito, apesar de quebrar algum design pattern (não claramente especificado pelo nosso colega YkyMatt).
YkyMatt



Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline

robertwgil wrote:
Deixe eu entrar de bicão nessa conversa aqui...

Se eu entendi voces estão sugerindo isto?
Code:
 public Consequence execute(){
    // your code here
    return new Consequence(new Forward("pagina.jsp"));
 }
 


Se for mesmo isso é até interessante e uma boa ideia heim... 


É isso mesmo. Entretanto, eu estava dissertando com thiagoalgo que eu acho que isso quebraria sim o pattern aplicado pelo Menta, o mesmo que é visto no Struts e noutros frameworks. Eu não sei se tal design pattern tem um nome definido, mas eu me refiro à técnica de fazer com que a Action não seja responsável pelo fluxo que a requisição deve seguir, ou seja, a Action não deve saber para onde exatamente o usuário será redirecionado, sendo assim, a Action não deve retornar uma Consequence.

Outro fator para o qual apelo em dizer que o método Não deve retornar uma Consequence é que isso exigira mudanças profundas no framework bem como certa modificação massiva no entendimento que temos sobre a configuração de nossas Action's. Não teríamos mais o entendimento que uma Action retorna resultados e cabe ao controller decidir o que fazer, a Action passaria a controlar o que ocorre na requisição. Eu, por isso, acho que seria inviável permitir isso no Menta como feature padrão.

Portanto, a idéia que dei foi a seguinte:

Na Action eu teria declarado minhas conseqüências:

Code:
 package ...
 import ...
 
 public class Clients extends BaseAction implements AutoConfigurableAction
   {
    public static Map< String, Consequence > consequences;
 
    // essas informações não precisam estar em constantes
    private final String RESULT_LIST = "list";
    private final String RESULT_ADD = "add";
 
    static
      {
       consequences = new HashMap< String, Consequence >();
       consequences.put(RESULT_LIST, new Forward("/view/clients/list.page"));
       consequences.put(RESULT_ADD, new Forward("/view/clients/add.page"));
      }
 
    public String list()
      { return (RESULT_LIST); }
 
    public String add()
      { return (RESULT_ADD); }
   }
 


Tendo uma classe no padrão acima, eu registraria estaticamente no AppManager a minha Action numa classe extra (fora do Menta). Tal classe seria responsável por registrar o nome da minha Action no AppManager e carregar o Map de conseqüências também registrando-os no AppManager.

Isso evitaria qualquer mudança na estrutura do Menta bem como nos métodos que já existem para as Action's atuais. Seria necessário apenas criar as conseqüências dentro da Action e registrar a Action na classe auxiliar que seria a camada registradora.

Melhor ainda seria se a classe auxiliar recebesse uma String como parâmetro que seria um nome de pacote, exemplo net.system.mentawai.actions e, a partir disso, via Reflection, carregasse todas as classes dele e registrasse as conseqüências de cada uma.

O que acham?

PS.: neste final de semana estarei elaborando uma classe para tal fim. Não usarei, creio, mas achei interessante a idéia e postarei aqui para discutirmos sobre sua implementação mais genérica e, quem sabe, disponibilização no Menta.

Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais

Mentawai Evangelist
http://www.chronusteam.com
[MSN]
thiagoalgo



Joined: 12/01/2007 13:47:35
Messages: 138
Offline

Bem agora acho que você é que não me entendeu...rs.:

YkyMatt wrote:

É isso mesmo. Entretanto, eu estava dissertando com thiagoalgo que eu acho que isso quebraria sim o pattern aplicado pelo Menta, o mesmo que é visto no Struts e noutros frameworks. Eu não sei se tal design pattern tem um nome definido, mas eu me refiro à técnica de fazer com que a Action não seja responsável pelo fluxo que a requisição deve seguir, ou seja, a Action não deve saber para onde exatamente o usuário será redirecionado, sendo assim, a Action não deve retornar uma Consequence.
 


Da forma como você está implementado a consequência está dentro da classe Action só que com uma complexidade maior. Pelo modelo que voês está propondo a gente não declararia a consequencia no AppMngr, mas sim dentro da action e ainda teria que criar um metodo para isso. Acho que isso quebraria o design pattern (suposto) e ainda aumentaria a complexidade, espalhando configuração dentro das actions. O que eu estou propondo é basear a configuração em uma convenção. Acho que teu modelo apenas trocou 6 por meia dúzia, ou seja, você ainda precisa configurar.

YkyMatt wrote:

Outro fator para o qual apelo em dizer que o método Não deve retornar uma Consequence é que isso exigira mudanças profundas no framework bem como certa modificação massiva no entendimento que temos sobre a configuração de nossas Action's. Não teríamos mais o entendimento que uma Action retorna resultados e cabe ao controller decidir o que fazer, a Action passaria a controlar o que ocorre na requisição. Eu, por isso, acho que seria inviável permitir isso no Menta como feature padrão.
 


Como disse há alguns posts acima de forma alguma seria necessário reescrever código ou mudar um paradigma. Segundo minha sugestão o Menta deve continuar funcionando como é hoje. O que sugiro é que se nenhuma action for encontrada no AppMngr o framework deva procurar isso na url, através do formato convencionado. Não há mudanças na forma de funcionamento atual, apenas seria agregada um feature de CoC, que já usada no menta em outros casos, vide http://forum.mentaframework.org/posts/list/765.page.
YkyMatt



Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline

thiagoalgo wrote:
... 


Mas você disse que os métodos da Action deveriam retornar uma Consequence, isso necessariamente exigira uma alteração do AppManager, pois ele espera sempre receber uma String e a partir dela procurar por uma Consequence.

thiagoalgo wrote:

Da forma como você está implementado a consequência está dentro da classe Action só que com uma complexidade maior. Pelo modelo que voês está propondo a gente não declararia a consequencia no AppMngr, mas sim dentro da action e ainda teria que criar um metodo para isso. Acho que isso quebraria o design pattern (suposto) e ainda aumentaria a complexidade, espalhando configuração dentro das actions.
 


Pois é isto que eu estava tentando explicar, que não cabe a Action saber para onde a requisição deve seguir (ter a conseqüência significa saber o destino da requisição). Se você diz que o método da Action deve retornar uma Consequence, necessariamente a Action terá de saber suas Consequence's.

Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais

Mentawai Evangelist
http://www.chronusteam.com
[MSN]
thiagoalgo



Joined: 12/01/2007 13:47:35
Messages: 138
Offline

YkyMatt wrote:

thiagoalgo wrote:
... 


Mas você disse que os métodos da Action deveriam retornar uma Consequence, isso necessariamente exigira uma alteração do AppManager, pois ele espera sempre receber uma String e a partir dela procurar por uma Consequence.

thiagoalgo wrote:

Da forma como você está implementado a consequência está dentro da classe Action só que com uma complexidade maior. Pelo modelo que voês está propondo a gente não declararia a consequencia no AppMngr, mas sim dentro da action e ainda teria que criar um metodo para isso. Acho que isso quebraria o design pattern (suposto) e ainda aumentaria a complexidade, espalhando configuração dentro das actions.
 


Pois é isto que eu estava tentando explicar, que não cabe a Action saber para onde a requisição deve seguir (ter a conseqüência significa saber o destino da requisição). Se você diz que o método da Action deve retornar uma Consequence, necessariamente a Action terá de saber suas Consequence's. 


Com relação as alterações eu continuo dizendo que não é necessário nas aplicações que atualmente usam o menta. Se serão necessárias no framework, acho que esse é o menor dos problemas, pois estamos discutindo aqui melhorias para versão 2.0 e acho que a evolução e as alterações no framework são válidas, principalmente se mantiverem a compatibilidade com versões anteriores como é o caso. O importante é que agora você entendeu a minha opinião e eu entendi a sua. Apenas não concordamos um com o outro....rs. O interessante seria se mais alguém podesse opinir a respeito para formarmos melhor as nossas opiniões e daí sim chegarmos a um consenso. Mesmo assim acho que a discução valeu.

Vamos se outros, assim como o Robert também se manisfestam. Aliás alguem sabe se há alguma previsão para desenvolvimento / lançamento da nova versão?
YkyMatt



Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline

Só não entendi uma coisa. Primeiro você concordou com o Robert:

thiagoalgo wrote:

robertwgil wrote:
Deixe eu entrar de bicão nessa conversa aqui...

Se eu entendi voces estão sugerindo isto?
Code:
 public Consequence execute(){
    // your code here
    return new Consequence(new Forward("pagina.jsp"));
 }
 
 



Sim Robert, era isso que eu havia sugerido. Eu estava pensando na possibilidade de não necesside registrar as consequências no AppMngr. Tipo... você tem uma classe de ação chamada MinhaAcao com um método execute. Ao invés de você informar isso no AppManager você chamaria a url MinhaAcao.mtw e o método execute retornaria a consequence. Ainda estou meio confuso sobre se isso é certo ou errado, na verdade eu acho que facilitaria muito, apesar de quebrar algum design pattern (não claramente especificado pelo nosso colega YkyMatt). 


Depois disse que o que eu estava propondo era errado porque seria incorreto espalhar a configuração (Consequence's) na Action:

thiagoalgo wrote:

Da forma como você está implementado a consequência está dentro da classe Action só que com uma complexidade maior. Pelo modelo que voês está propondo a gente não declararia a consequencia no AppMngr, mas sim dentro da action e ainda teria que criar um metodo para isso. Acho que isso quebraria o design pattern (suposto) e ainda aumentaria a complexidade, espalhando configuração dentro das actions. O que eu estou propondo é basear a configuração em uma convenção. Acho que teu modelo apenas trocou 6 por meia dúzia, ou seja, você ainda precisa configurar.
 


??? Se retornar uma Consequence, a configuração fica espalhada. Então como fazer ???

OBS.: quanto ao retorno do método eu entendi, você está propondo um AppManager híbrido, ou seja, ligado à retrocompatibilidade para permitir que 2 tipos de carregamento (configuração de Action's) sejam usados (o antigo e o novo).

Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais

Mentawai Evangelist
http://www.chronusteam.com
[MSN]
thiagoalgo



Joined: 12/01/2007 13:47:35
Messages: 138
Offline

YkyMatt wrote:

??? Se retornar uma Consequence, a configuração fica espalhada. Então como fazer ???
 


Da maneira que estou propondo a configuração também fica espalhada. O que eu quiz dizer é que seu modelo faz exatamente o que eu estou propondo, mas ainda necessita de configuração das actions, que era inicialmente o que eu estava querendo evitar. O que eu queria era não ter necessariamente uma configuração explícita das minhas actions. Queria poder ter essa configuração implícita, baseada em uma conveção.

Com relação a compatibilidade seria isso mesmo que você falou. E ainda acho que a prioridade seria de configuração da maneira atual, apenas se ela não exisitisse seria necessário verificar se há alguma configuração baseada na configuração.
YkyMatt



Joined: 15/08/2007 15:47:05
Messages: 229
Location: RS / Brasil
Offline

thiagoalgo wrote:

YkyMatt wrote:

??? Se retornar uma Consequence, a configuração fica espalhada. Então como fazer ???
 


Da maneira que estou propondo a configuração também fica espalhada. O que eu quiz dizer é que seu modelo faz exatamente o que eu estou propondo, mas ainda necessita de configuração das actions, que era inicialmente o que eu estava querendo evitar. Assim não necessariamente eu teria uma configuração explícita das minhas actions. Poderia ter essa configuração implícita, baseada em uma conveção.  


Ok. Cara, acho que há uma maneira fácil de fazer isso. O Mentawai possui uma característica no AppManager bastante interessante. Você pode configurar a DefaultAction, que nada mais é que uma Action que será chamada toda vez que uma Action inexistente for requisitada.

Ou seja, digamos que eu registre no AppManager uma DefaultAction que mostrará uma mensagem de erro. Então, toda vez que eu acessar uma Action que não está registrada, exemplo /dsfdfigdg.mtw, o Menta carrega essa ActionDefault. O Interessante seria, por exemplo, que nessa DefaultAction eu tivesse acesso à URL que resultou nela, ou seja, dentro do meu DefaultAction.class eu deveria ter um meio (talvez um método estático do AppManager ou pelo input) de obter a URL errada (no caso, /dsfdfigdg.mtw).

Ainda, deveria ser implementado um meio de registrar Action's em tempo de execução, de modo a fazer o registro dessas Action's no momento de sua requisição. Essa possibilidade de runtime action registering poderia ser disponibilizada como um método estático para que o programador, dentro da DefaultAction, pudesse registrar a Action solicitada ou, ainda, como você sugeriu, thiagoalgo, a utilização de CoC para que o AppManager possa saber, por si só, registrar uma Action em tempo de execução.

Outra maneira de se fazer isso seria o Controller, ao ter uma Action solicitada, verificasse a existência da classe e detectasse se ela implementa Configurable. Se implementar, a Action "se configura".

Jéferson C. Flores
Compusoft - Desenv. de Sistemas Empresariais

Mentawai Evangelist
http://www.chronusteam.com
[MSN]
 
Forum Index -> Comentários Gerais Go to Page: Previous  1, 2, 3 Next 
Go to:   
Powered by JForum 2.1.6 © JForum Team