logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Abr 15

DDD

Escrito por DClick Team em 1, 4, AR, Arquitetura, arte, back, bar, BI, carregar, class, classe, classes, cliente, Componente, Componentes, configuração, control, dados, demo, Design, exemplo, Exemplos, for, futuro, ide, IE, if, int, Introdução, lista, Livro, lógica, mvc, NaN, O, on, problema, problemas, RIA, Ria’s Geral, Sem categoria, TAT, Tema, Twitter, UI, UX, XP @ 04 15th, 2011 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Twitter!


Domain Driven Design



Também conhecido como DDD, Domain Driven Design está bem alta nos tempos mais recentes pelo apelo a maior aderência do sistema a lógica de negócio. Mas mais do que uma receita, ou técnica, DDD é um conceito. Aplicar DDD é mudar a maneira de pensar em relação a modelagem (Design) do modelo de domínio. Trata-se de um maior foco no problema que o cliente quer resolver, e basear os resultados atingidos e caractrísticas do sistema com base em feedback do cliente.
A idéia não é nova, e a semelhança com as práticas ágeis é muito clara, por isso DDD veio a tona nos últimos tempos, embalado com a onda das metodologias ágeis.

Conceitos



Como foi dito anteriormente, e como é pregado no livro do Eric Evans, dito pai do DDD, se trata de uma maneira de pensar mais do que uma receita ou metodologia. Os primeiros capítulos do livro citam casos em que a modelagem da aplicação pode levar em conta um melhor entendimento do negócio, e como um modelagem muitas vezes natural e intuitiva do ponto de vista técnico pode trazer problemas futuros para a aplicação.
Um exemplo interessante presente no livro, é o exemplo de um programa para modelar um circuito eletrônico. Em tal exemplo é primeiro abordado o modelo convencional de modelagem e organização, assim como alguns padrões de projeto pensando mais do ponto de vista técnico da aplicação. Porém componenentes eletrônicos, portas lógicas por exemplo, possuem uma certa intelgência imbutida. No modelo convencional o modelo de negócio é uma camada burra da aplicação, onde somente são armazenados os dados referente ao domínio. Tal abordagem traz problemas quando é necessário simular uma execução do circito eletrônico, pois seria necessário guardar tal inteligência na camada responsável por gerenciar os componentes, tornando a aplicação mais complexa, e concentrando o conhecimento de negócio em um único lugar.
A idéia nesse caso, é tornar o modelo do domínio mais inteligente, e passar a responsabilidade de entender seu funcionamento para as entidades, espalhando mais o conhecimento do negócio, e possibilitando outras partes da aplicação de terem acesso a este mesmo conhecimento somente através do domínio.
Não focarei nesses exemplos nesse post, pois o intuito aqui é mais uma introdução aos conceitos básicos e a nomenclatura muitas vezes empregada em DDD. Vamos ver algumas definições.

Domain



Um Domain (domínio) nada mais é do que uma descrição de um conceito de negócio, contendo as informações que o modelo necessita e o comportamento do modelo. Um exemplo clássico é uma aplicação que precisa gerenciar usuários. Em uma aplicação como esta, usuários carregam informações, podem ser listados, criados, deletados, editados, associados com outras entidades, etc. Toda essa lógica determina um domínio. Então diferente de uma arquitetura convencional MVC por exemplo, onde o modelo seria os dados do usuário, o controller seria responsável por associar e e gerenciar os usuários e a view se encarregaria de mostrar o usuário, em DDD essa lógica faz parte do domínio de usuário.
Parece um pouco overkill concentrar tantas responsabilidades em um único ponto, mas mais forte do que lógica da aplicação, modelar o sistema dessa forma concentra a lógica de negócio em um único lugar também. Com isso podemos acessar o domínio de usuário em qualquer lugar do sistema, e o comportamento será o mesmo em todos os lugares, facilitanto assim quando o modelo de negócio exigir que seja feita alguma alteração no comportamento do domínio de usuário.
Domínio é o centro das atenções em DDD (óbvio), mas já é possível perceber que tanta responsabilidade em um único lugar pode dificultar criação e manutenção de tais domínios. Por isso que existem as outras definições em DDD, para facilitar a manutenção e a modelagem do domínio.

Factory



Factories são responsáveis por criar novos Domains.
Muitas vezes os domínios são complexos, e precisam do auxílio de outras classes de negócio para poder se comportar da maneira esperada. Pensando nesse ponto, os domínios podem ser criados através das Factories, delegando a responsabilidade de preencher e configurar o domínio, deixando para o domínio focar mais na parte de lógica de negócio.
Essas factories podem ser modeladas de acordo com as necessidades da aplicação. O que DDD prega é que se mantenha o conceito, para que caso os domínios precisem ser alterados, de maneira que alguma pré-configuração, ou uma nova entidade de negócio comece a fazer parte do domínio seja incorporada, fique fácil dar manutenção e testar esse novo comportamento.
Porém Factories ainda assim podem acabar tendo muitas responsabilidades no que diz respeito a organização do domínio, em termos de armazenamento de dados mesmo, ou seja, muitas vezes uma representação do domínio como entidade pode ser bem complexa, pois a representação pode ter uma série de dependências para outras entidades e assim por diante, todas dentro do mesmo conceito de domínio.
Pensando nesse possível problema, existe uma outra definição em DDD.

Aggregate



Um Aggregate, como o próprio nome traduzido diz, é um agregado de entidades do domínio.
Sua responsabilidade é respresentar um conjunto de outras entidades que identificam a entidade do domínio. Uma maneira mais prática de se pensar, é que um domínio utiliza um Aggregate para criar a entidade que representa o domínio. A idéia é concentrar a responsabilidade pela entidade do domínio no aggregate, tornando mais fácil a manutenção e alteraçao do modelo de negócio.
Tanto a factory, quanto o aggregate pertencem ao domínio, portanto são características tranparentes ao usuário do domínio, ou seja, os domínios interagem entre si apenas pelas caracterísiticas expostas pelos próprios domínio.

Conclusão



DDD não é a solução para todos os problemas de modelagem de regra de negócio, afinal a modelagem depdende muito mais das pessoas do que do conceito em si, mas é uma maneira mais concisa de pelo menos dar ao sistema uma cara mais parecida com o modelo de negócio, e criar a famosa Ubiquitous Language, onde programadores e pessoas de negócio conseguem se entender melhor.

Por @Gust4v0_H4xx0r

Mar 12

Dominando OO – Mais um livro saindo do forno

Escrito por Daniel Schmitz em .NET, 1, 4, 6, action, Action Script, Actionscript, AR, auto, back, Banco de Dados, BI, C#, class, classe, classes, código, código fonte, dados, Desenvolvimento, Diversos, Download, DRE, exemplo, Exemplos, Flex, fonte, for, framework, Frameworks, Geral, html, IE, image, int, interface, Java, live, Livro, Livros, mg, Microsoft, mvc, NaN, O, on, Orientação, Orientação a Objetos, Outros, padrão, pattern, PHP, problema, problemas, processo, programação, pt, Revisão, RIA, Ria’s Geral, server, singleton, site, Tema, UI, XP @ 03 12th, 2011 | via http://flex.etc.br | Sem comentários
Daniel Schmitz
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Abstract cube construction

O livro “Dominando Orientação a objetos” está quase pronto. Estamos na fase de diagramação e revisão do texto. Muito em breve entraremos na pré venda.

Para matar a curiosidade geral da nação Alegre, seguem algumas informações sobre o livro.

?

  • Impresso ou ebook? Impresso
  • Páginas: 200
  • Formato: 23×16, o mesmo dos outros livros
  • ISBN: em processo de registro
  • Linguagens abordadas: PHP, Java, Action Script, C#
  • Preço: por volta de R$ 49,00
  • Vai ter código fonte para download? Sim

?

Resumo dos capítulos

?

No capítulo 2, iremos com o uso da linguagem PHP explicar os principais conceitos da programação OO, conceitos estes que estão presentes em todas as linguagens que permitem a implementação de objetos.

No capítulo 3, ainda usando o PHP, iremos abordar um exemplo prático do uso da OO para facilitar o desenvolvimento de páginas HTML. Este exemplo visa reforçar os conceitos aprendidos e, o mais importante, visa mostrar que o uso do OO pode ser benéfico para o seu dia a dia.

No capítulo 4, iremos abordar o Java e exibir as suas principais características. O Java, por ser uma linguagem 100% OO, apresenta todas as funcionalidades que o OO possui, como classes abstratas, interfaces, sobrecarga de métodos, entre outros. Veremos apenas algumas teorias, que serão melhor explicadas no decorrer da obra.

No capítulo 5 apresentamos o C#, linguagem pertencente ao framework .Net da Microsoft, que é semelhante ao Java. Com esta linguagem, abordamos um exemplo para criação de SQLs para o acesso ao banco de dados.

No capítulo 6 apresentamos o Action Script, juntamente com o framework Flex, para aprendermos exclusivamente sobre Interfaces, algo tão falado e mal entendido pelos programadores. Você irá aprender a otimizar o seu código com o uso correto das interfaces.

O capítulo 7 volta a usar a linguagem PHP para introduzir o conceito de padrões de projeto. Usar somente OO não garante que o sistema está livre de problemas, é preciso combinar o conhecimento OO com os padrões (patterns) para que possamos criar sistemas com mais dinamiso e, principalmente, manuteníveis. Com o PHP iremos aprender o primeiro padrão, chamado “Factory”.

No capítulo 8 continuamos a estudar os padrões de projeto, usando agora o ActionScript e o Flex para ilustrar o padrão Observer, que apesar se ser pouco conhecido, é um ótimo aliado no desenvolvimento OO.

No capítulo 9 iremos aprender o padrão Singleton, muito usado em diversos frameworks. Inicialmente apresentamos o conceito e exibimos um exemplo em ActionScript para manipulação de janelas, além de um exemplo em PHP para leitura/escrita de um arquivo de log.

No capítulo 10 iremos, com PHP, criar um pequeno framework que envolve os conceitos de MVC e de injeção de dependência, além de usar outros padrões como o Singleton e o Factory.

No capítulo 11 criamos três exemplos que exibem inicialmente uma solução rápida para o problema proposto, mas ruim para a manutenção do código. Depois exibimos como usar a OO para melhorar cada um dos exemplos, utilizando inclusive padrões de projeto.

?

Ajuda dos leitores

Gostaria de agradecer a todos os leitores que me escreveram sugerindo temas para o livro. Conforme combinado, as pessoas a seguir ganharão 20% de desconto na compra do livro

  • Willian Mano
  • Willian Amaro de Oliveira
  • Flavio Horita
  • Andre Luis da Silveira
  • Ever Silvério
  • Luiz Henrique
  • Francisco Fernandes
  • Rafael Venâncio Lugli
  • Lazaro Fernandes

?

Onde Comprar?

Você poderá comprar o livro no site www.danielschmitz.com.br, que é a nossa loja virtual. Ainda não está disponível para venda. Siga @Daniel_Schmitz para saber exatamente quando começará a pré venda

Mar 12

Dominando OO – Mais um livro saindo do forno

Escrito por Daniel Schmitz em .NET, 1, 4, 6, action, Action Script, Actionscript, AR, auto, back, Banco de Dados, BI, C#, class, classe, classes, código, código fonte, dados, Desenvolvimento, Diversos, Download, DRE, exemplo, Exemplos, Flex, fonte, for, framework, Frameworks, Geral, html, IE, image, int, interface, Java, live, Livro, Livros, mg, Microsoft, mvc, NaN, O, on, Orientação, Orientação a Objetos, Outros, padrão, pattern, PHP, problema, problemas, processo, programação, pt, Revisão, RIA, Ria’s Geral, server, singleton, site, Tema, UI, XP @ 03 12th, 2011 | via http://flex.etc.br | Sem comentários
Daniel Schmitz
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Abstract cube construction

O livro “Dominando Orientação a objetos” está quase pronto. Estamos na fase de diagramação e revisão do texto. Muito em breve entraremos na pré venda.

Para matar a curiosidade geral da nação Alegre, seguem algumas informações sobre o livro.

?

  • Impresso ou ebook? Impresso
  • Páginas: 200
  • Formato: 23×16, o mesmo dos outros livros
  • ISBN: em processo de registro
  • Linguagens abordadas: PHP, Java, Action Script, C#
  • Preço: por volta de R$ 49,00
  • Vai ter código fonte para download? Sim

?

Resumo dos capítulos

?

No capítulo 2, iremos com o uso da linguagem PHP explicar os principais conceitos da programação OO, conceitos estes que estão presentes em todas as linguagens que permitem a implementação de objetos.

No capítulo 3, ainda usando o PHP, iremos abordar um exemplo prático do uso da OO para facilitar o desenvolvimento de páginas HTML. Este exemplo visa reforçar os conceitos aprendidos e, o mais importante, visa mostrar que o uso do OO pode ser benéfico para o seu dia a dia.

No capítulo 4, iremos abordar o Java e exibir as suas principais características. O Java, por ser uma linguagem 100% OO, apresenta todas as funcionalidades que o OO possui, como classes abstratas, interfaces, sobrecarga de métodos, entre outros. Veremos apenas algumas teorias, que serão melhor explicadas no decorrer da obra.

No capítulo 5 apresentamos o C#, linguagem pertencente ao framework .Net da Microsoft, que é semelhante ao Java. Com esta linguagem, abordamos um exemplo para criação de SQLs para o acesso ao banco de dados.

No capítulo 6 apresentamos o Action Script, juntamente com o framework Flex, para aprendermos exclusivamente sobre Interfaces, algo tão falado e mal entendido pelos programadores. Você irá aprender a otimizar o seu código com o uso correto das interfaces.

O capítulo 7 volta a usar a linguagem PHP para introduzir o conceito de padrões de projeto. Usar somente OO não garante que o sistema está livre de problemas, é preciso combinar o conhecimento OO com os padrões (patterns) para que possamos criar sistemas com mais dinamiso e, principalmente, manuteníveis. Com o PHP iremos aprender o primeiro padrão, chamado “Factory”.

No capítulo 8 continuamos a estudar os padrões de projeto, usando agora o ActionScript e o Flex para ilustrar o padrão Observer, que apesar se ser pouco conhecido, é um ótimo aliado no desenvolvimento OO.

No capítulo 9 iremos aprender o padrão Singleton, muito usado em diversos frameworks. Inicialmente apresentamos o conceito e exibimos um exemplo em ActionScript para manipulação de janelas, além de um exemplo em PHP para leitura/escrita de um arquivo de log.

No capítulo 10 iremos, com PHP, criar um pequeno framework que envolve os conceitos de MVC e de injeção de dependência, além de usar outros padrões como o Singleton e o Factory.

No capítulo 11 criamos três exemplos que exibem inicialmente uma solução rápida para o problema proposto, mas ruim para a manutenção do código. Depois exibimos como usar a OO para melhorar cada um dos exemplos, utilizando inclusive padrões de projeto.

?

Ajuda dos leitores

Gostaria de agradecer a todos os leitores que me escreveram sugerindo temas para o livro. Conforme combinado, as pessoas a seguir ganharão 20% de desconto na compra do livro

  • Willian Mano
  • Willian Amaro de Oliveira
  • Flavio Horita
  • Andre Luis da Silveira
  • Ever Silvério
  • Luiz Henrique
  • Francisco Fernandes
  • Rafael Venâncio Lugli
  • Lazaro Fernandes

?

Onde Comprar?

Você poderá comprar o livro no site www.danielschmitz.com.br, que é a nossa loja virtual. Ainda não está disponível para venda. Siga @Daniel_Schmitz para saber exatamente quando começará a pré venda

Mar 3

Spring WEBMVC – Annotations

Escrito por DClick Team em 1, 2.0, 4, 6, app, Apresentação, AR, Arquitetura, arte, BI, blog, busca, camp, class, classe, classes, configuração, control, custom, dados, demo, Desenvolvimento, Design, Design Pattern, dispatch, err, exemplo, Ferramenta, for, framework, Google, IE, if, image, int, interface, j2ee, Java, lógica, map, Mercado, mg, mvc, NaN, Negócios, O, on, Outros, padrão, pattern, procura, programação, pt, reference, rest, RIA, Ria’s Geral, screen, Screencast, server, serviço, servidor, site, Spring, SpringFramework, string, Sun, tag, TAT, Tema, Teste, Twitter, UI, uint, UX, validação, web, XML, XP, zend @ 03 3rd, 2011 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Criando a camada WEB com Spring-WEBMVC – @Annotation


Spring WebMVC é uma ferramenta poderosa para criação de aplicação com uma camada web muito utilizada no mercado.
Algumas de suas características incluem uma separação clara entre camada de apresentação, negócios e modelo, e também uma distinção clara de papéis de controllers, validators, commands, forms, models, views etc. Também é um framework altamente customisável e adaptável, disponibilizando ferramentas para controle de todo o fluxo entre as páginas e se adaptando bem a maioria dos modelos de negócio. Outra característica que é quase obrigatória em todos os módulos do Spring, é o padrão Spring de se organizar e configurar as classes de negócio como beans gerenciados pelo container.
Além das características básicas, ainda estão disponíveis bibliotecas de JSP muito úteis no dia-a-dia de desenvolvimento que facilitam a contrução de interfaces. E ainda existe a possibilidade de configurar os escopos dos beans da aplicação de acordo com o lifecycle do HTTP request que está sendo feito para a aplicação.

Neste post veremos o básico de spring-webmvc e sua configuração feita por anotações, aprendendo os conceitos base do módulo e entendendo melhor como configurar e organizar seus beans de acordo com suas necessidades. Por fim veremos um screencast com um exemplo de aplicação web feita do zero e seguindo todo o caminho desde o modelo, passando pelo controller e terminando na view.

Entendendo o DispatcherServlet


O DispatcherServlet é de fato um servlet Java que é o ponto de entrada para as aplicações Web.

É encarregado de encaminhar as chamadas feitas a aplicação para seu respectivo controller, e uma vez que a resposta do controller foi recebida, encaminhas a resposta para a view correta. Mas como DispatcherServlet faz parte do Spring, para ele e seus beans, nesse caso controllers e suas dependências, estão disponíveis todas as outras features que o container disponibiliza, como gerenciamento de beans e injeção de dependências.

O DispatcherServlet seguem um Design Pattern conhecido como Front Controller. No site do spring está disponível o seguinte diagrama exemplificando o pattern:





No diagrama fica claro o papel do DispatcherServlet.
Uma chamada que acabou de chegar na aplicação, passa pelo DispatcherServlet, que por sua vez escolhe o controller correto para tratar a chamada e delega a mesma. Feito isso o controller devolve o resultado da operação para o DispatcherServlet que dessa vez se encarrega de encontrar a view correta para tratar a resposta. Após a view ter renderizado a página de resposta, o DispatcherServlet devolve para o dono da requisição a resposta.


Configurando o DispatcherServlet



Agora que entendemos que o DispatcherServlet é peça fundamental para nossa aplicação, precisamo configurá-lo. Para isso basta adicioná-lo ao seu arquivo web.xml da seguinte forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-app xmlns=“http://java.sun.com/xml/ns/j2ee” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
? ? version=“2.4″ xsi:schemaLocation=“http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd”>

? ?
? ? >

? ? ? ? -name>servletName-name>
? ? ? ? -class>org.springframework.web.servlet.DispatcherServlet-class>
? ? ? ? -on-startup>1-on-startup>
? ? >

? ? -mapping>
? ? ? ? -name>servletName-name>
? ? ? ? -pattern>/*-pattern>
? ? -mapping>

-app>



O que fizemos foi dizer ao server, que ele deve instanciar um novo servlet, que nesse caso é o DispatcherServlet, assim que a aplicação subir no servidor. Também estamos dizendo que todas as chamadas para a aplicação, que forem feitas em / devem ser delegadas para o nosso servlet com o nome servletName. Nesse campo você pode escolher o nome que mais fizer sentido para sua aplicação, e perceba que você pode criar mais de um servlet para tratar suas chamadas.

Agora vamos à integração com o IoC do Spring.

Como eu havia dito, esse é um dos benefícios do Spring-WebMVC, e portanto vamos ver como usá-lo corretamente para tirar maior proveito do mesmo.

Todo DispatcherServlet está associado a um contexto de beans do Spring. Tal associação é feita através do nome do servlet e um arquivo de beans padrão do spring. No momento em que o DispatcherServlet for criado, o classpath será percorrido em procura de uma arquivo que, neste caso, deve se chamar /WEB-INF/servletName-servlet.xml. Neste arquivo devem estar definidos os beans específicos para que os seus controllers referentes a este servlet funcionem corretamente. Note que se estiver definido mais de um DispatcherServlet, será necessário definir um arquivo com tais beans para cada um deles.


Controllers



Controllers são parte fundamental da arquitetura MVC (se referem so ‘C’ da sigla), e no Spring-webmcv não é diferente. Saber configurá-los e atribuí-los a suas chamadas específicas é muito importante no desenvolvimento da aplicação. Pensando nisso o Spring disponibiliza várias implementações de controllers que pode ajudar no dia-a-dia e várias ferramentas para associar as chamadas a tais controllers. Como o objetivo do post é tratar da configuração por anotações, não entrarei no detalhe de tais implementações e de tais associações. Iremos utilizar um serviço qualquer da aplicação para servir de controller, e a associação será feita através das anotações.

Para tornar uma classe um controller do spring, basta anotá-lo com @Controller da seguinte forma:

1
2
3
4
? ? package br.com.dclick;

? ? @Controller
? ? public class ServicoComum {



Repare que não é necessário extender nem implementar nenhuma classe ou interface específica, o que colabora bastante para desacoplar a lógica de view de nosso sistema.

Para habilitar esse nosso controller e associá-lo ao servlet, basta pedirmos ao Spring para scannear esse pacote e deixar o bean disponível no contexto do servlet. Para fazer isso adicione o seguinte no arquivo de beans do servlet:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version=“1.0″ encoding=“UTF-8″?>
xmlns=“http://www.springframework.org/schema/beans”
? ? xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:context=“http://www.springframework.org/schema/context”
? ? xsi:schemaLocation=“http://www.springframework.org/schema/beans
? ? ? ? http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
? ? ? ? http://www.springframework.org/schema/context
? ? ? ? http://www.springframework.org/schema/context/spring-context-3.0.xsd”
>

? ? :annotation-config />

? ? :component-scan?base-package=“br.com.dclick” />

>



Perceba que coloquei a tag do contexto do spring que habilita a configuração por anotações.

Agora precisamos definir um método para que o spring faça a chamada quando o request chegar na aplicação. Para isso vamos entender o papel do ModelAndView.


ModelAndView



O ModelAndView é responsável por descrever o modelo e a view (intuitivo? ;) ) daquela chamada, portanto nele estão setados a view a qual a chamada está associada, e todos os atributos de modelo que devem chegar até a view. Tais atributos são guardados como em um Map associando chaves e valores. Veremos que esses valores ficam disponíveis em nossa view e podem ser usados nos JSPs da aplicação, mas agora vamos ao método do controller:

1
2
? ? @RequestMapping(value = “/chamada”, method = RequestMethod.GET)
? ? public ModelAndView trataChamada(@PathVariable(“var”) String var) {



Muita coisa acontecendo aqui, mas vamos por partes. A primeira coisa a se notar é que o método irá tratar todas as chamadas feitas em nomeDaAplicação/chamada, isso porque nosso servlet está associado em / e nosso método está associado com chamada. Nós poderíamos também ter definido o caminha básico para o controller ainda na anotação do controller, por exemplo:

1
2
? ? @Controller(“/base”)
? ? public class ServicoComum {



Assim nosso método trataria todas as chamadas feitas em nomeDaAplicação/base/chamada.

A segunda coisa a se notar é que nosso método só irá tratar requisições do tipo GET, podendo ser alterado para os outros tipos de requisição seguindo um modelo REST.

A terceira coisa a se notar é que nosso método devolve um ModelAndView, portanto saberemos a que view o DispatcherServlet irá direcionar, e também teremos alguns atributos do modelo disponíveis.

A última mas não menos importante, é que o método está esperando um parâmetro. Esse parâmetro foi anotado com @PathVariable, isso significa que a chamada ao controller deve esr da seguinte forma: nomeDaAplicação/chamada?var=teste e assim nosso método irá receber o valor teste. Faça alguns testes e repare que é possível configurar a obrigatoriedade do parâmetro, a validação do mesmo dentre outras coisas. Também poderíamos ter definido o parãmetro como @RequestParam, mas nesse caso a chamada deveria estar em um formato POST e o atributo deveria estar setado no request.


ViewResolver



A última configuração necessária para nossa aplicação funcionar é um ViewResolver. Vamos utilizar um bem simples para que possamos utilizar páginas em JSP em nossa aplicação. Para isso, basta adicionar o seguinte bean no contecto do servlet:

1
2
3
4
5
? ? id=“viewResolver”
? ? ? ?? ?class=“org.springframework.web.servlet.view.UrlBasedViewResolver”>

? ? ? ? name=“prefix” value=“/WEB-INF/jsp/”/>
? ? ? ? name=“suffix” value=“.jsp”/>
? ? >



O que fizemos, foi dizer ao view resolver, que ele deve buscar na pasta WEB-INF/jsp por nossos arquivos JSPs antes de renderizar as páginas de resposta. Também estamos dizendo, que ele deve procurar através do nome da view que o controller devolver, por exemplo, se nosso ModelAndView possuir uma view com nome pagina, o view resolver irá buscar por um arquivo com nome pagina.jsp para renderizá-lo com os atributos setados no ModelAndView.

Existem muitos tipos de view resolvers, e muitas maneiras de configurá-los, mas para uma primeira experiência com o framework essa configuração já é suficiente.

Por @Gust4v0_H4xx0r

Fev 27

Melhores práticas com Flex, PHP, Zend e Swiz

Escrito por Daniel Schmitz em 1, 2009, 4, 6, action, Actionscript, Adobe, AMF, amfphp, app, AR, Artigo, Artigos, auto, back, BI, botão, bug, busca, class, classe, classes, cliente, código, código fonte, Componente, Componentes, comunidade, configuração, control, Controls, Curso, Cursos, dados, Debug, demo, Desenvolvimento, dispatch, Diversos, Download, dynamic, Eclipse, email, err, erro, event, EventListener, Evento, Eventos, events, exemplo, falha, flash, flash builder, Flex, fonte, for, Formulário, Formulários, framework, function, handle, html, ide, IE, if, image, int, Java, labs, library, lista, Livro, Livros, LOB, Melhores Práticas, menu, mg, mvc, MXML, NaN, O, on, padrão, Pessoal, PHP, processo, procura, Projetos, pt, Remoting, RIA, Ria’s Geral, SDK, server, servidor, spark, string, Sun, swf, Swiz Framework, tag, Tech, Tecnologia, Tema, Teste, Twitter, UI, uint, utils, web, XML, XP, zend, Zend Framework @ 02 27th, 2011 | via http://flex.etc.br | Sem comentários
Daniel Schmitz
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Durante o ando de 2010 diversos leitores me escreveram solicitando alguma forma de “receita de bolo” para a criação de projetos em Flex. Estavam buscando uma maneira de criar uma aplicação de forma que fosse mais correta e mais fácil, baseada em padrões de projeto e definida através de uma estrutura que facilitasse o desenvolvimento.

No início de 2011 comecei a pensar mais no assunto, pois irei implementar estas regras nos próximos livros, chegando a uma série de “regras” das quais estarei apresentando neste artigo. Inicialmente, queria dizer que eu não sou o dono da verdade, e estou longe de criar alguma regra que se não usada irá causar o seu insucesso. Estou disposto a receber críticas que sejam construtivas, com o intuito de melhorar o sistema cada vez mais, possibilitando assim que a comunidade tenha em mãos um bom documento para consulta.

PHP ou Java?

Uma das perguntas que mais recebi ao longo de 2010, por isso estarei discutindo um pouco sobre qual linguagem de servidor usar. Inicialmente você deve saber que não é a linguagem que vai fazer você ter sucesso ou não em um sistema, e sim o quanto você conhece a mesma. Por exemplo, se você conhece muito bem PHP, porque aventurar-se em Java se dá conta do recado? O mesmo vale para o Java, mas não recebi emails de nenhum programador Java querendo mudar para php… (sic.. hehe).

O que? é fato nesta “briguinha” é que, não existe melhor ou pior. Java é mais complexo que php, exige mais atenção mas traz muitos benefícios, até financeiros (sim você ganha mais). PHP é mais fácil, você cria tudo mais rápido e com isso fica mais feliz :) Qual você vai escolher? Escolha a que te faz mais feliz.

Zend_AMF ou AMFPHP ?

Outra dúvida muito comum entre os programadores PHP. Eu costumo selecionar um ou outro dependendo do projeto em sí. Se o seu projeto vai usar alguns recursos do Zend Framework, e são muitos, utilize o Zend_AMF. Caso contrário, use AMFPHP.? Aqui chegamos a um impasse do qual julgo ser mais importante do que a briga entre Zend e AMFPHP: você ainda pensa em criar um projeto sem o Zend Framework? Você irá criar tudo que precisa “na mão” ou vai usar componentes de terceiros? Falo isso porque se um projeto em PHP é iniciado, o uso do Zend Framework irá acelerar muito o processo do mesmo. Rotinas como enviar email, acessar a sessão do php, gerenciar usuários com ACL, persistência de dados, acesso ao twitter… são todos muito bem implementados com o Zend e o Zend Framework é mantido pela mesma empresa que mantém o PHP, então não existe biblioteca mais segura em termos de continuidade do que esta.

E quais tecnologias vamos usar nas “melhores práticas” ?

Agora que discutimos as duas perguntas mais perguntadas em 2010 vamos a esta solução que julgo, pessoalmente, ser muito boa:

No cliente:

  • Adobe Flash Burrito e Flex SDK 4.5 (Basta baixar e instalar o Flash Burrito: http://labs.adobe.com/technologies/flashbuilder_burrito/).
  • SWIZ Framework (http://swizframework.org/)

No servidor:

  • PHP
  • Zend Framework (http://www.zend.com/community/downloads)
  • WAMP Server (para rodar o PHP na própria máquina – http://www.wampserver.com/en/download.php)
  • Netbeans ou Eclipse PDT – Eu estou gostando mais do Netbeans, então vou usá-lo.? (http://netbeans.org/downloads/index.html? – Versão PHP)

?

Certifique-se de ter tudo instalado, para que possamos dar prosseguimento no artigo.

Estrutura de pastas e projetos

Outra dúvida comum dos usuários, é definir a estrutura de pastas do projeto. Como instalamos o WAMP Server, ele nos fornece uma pasta onde é possível ter acesso pelo nacegador, através do endereço “localhost”. Isto é, ao acessarmos http://localhost/ o WAMP Server cuida de apontar para o diretório c:wampwww (que é o que chamamos de “document root”). Para que possamos entender a estrutura do projeto, é necessário compreender uma particularidade do Flex. Diferentemente do PHP, os arquivos que estão dentro do projeto Flex não precisam ser enviados ao servidor (os arquivos mxml, as, etc). veja que o Flex compila todos os mxml/as do projeto e gera um único arquivo swf. Este arquivo sim DEVE estar no diretório web do projeto!

Vamos então criar o projeto “melhoresPraticas” da seguinte forma:

  1. Crie a pasta c:wampwwwmelhoresPraticas Este é o diretório público do projeto, acessado através de http://localhost/melhoresPraticas?????????
  2. Crie a pasta c:wampwwwmelhoresPraticasclasses Este é o diretório onde iremos criar as nossas classes PHP
  3. Crie a pasta c:wampwwwmelhoresPraticasvos Este é o diretório onde as classes VOs serão criadas
  4. Crie a pasta c:wampwwwmelhoresPraticasZend Aqui você copia/cola o Zend framework, de forma que o arquivo melhoresPraticasZendLoader.php esteja acessível
  5. No Flash Builder, crie o projeto “melhoresPraticas”. Você pode deixar o DefaultLocation como está. Não clique em Finish, clique em Next, até chegar na configuração do “Compiled Flex application location”. Ou seja, aqui você irá informar para onde os aquivos compilados do flex irão ficar. Coloque o seguinte caminho: c:wampwwwmelhoresPraticasbin-debug. Não clique em Finish, clique em Next, e em Library Path, adicione a biblioteca swiz (o arquivo swc). Em “Output folder URL”, coloque: http://localhost/melhoresPraticas/bin-debug
  6. Com o projeto pronto, clique no botão RUN. Deve então surgir uma página em branco no endereço: http://localhost/melhoresPraticas/bin-debug/melhoresPraticas.html
  7. No Netbenas ou no eclipse, crie o projeto php apontando para c:wampwwwmelhoresPraticas

Testando a conexão

Com os projetos prontos, iremos inicialmente realizar uma simples conexão entre o Flex e o PHP. Isso é útil para que possamos começar com trabalho “pesado”. Para conectarmos o Flex no PHP, preciamos criar uma classe de conexão no Flex, que iremos chamar de ServiceBase, e um arquivo que recebe esta conexão no PHP, que chamaremos de gateway.php.

Para criar a classe ServiceBase, use o Flash Builder e acione o menu File > New > ActionScript Class e crie a classe de acordo com a imagem a seguir:

image

Classe ServiceBase:

package services
{
??? import mx.controls.Alert;
??? import mx.rpc.events.FaultEvent;
??? import mx.rpc.remoting.RemoteObject;
???
??? public dynamic class ServiceBase extends RemoteObject
??? {
??????? public function ServiceBase(classe:String)
??????? {
??????????? super(“zend”);
???????????
??????????? /*
???????????? * Como o arquivo swf está na pasta bin-debug,?
???????????? * precisamos subir um nível para chegarmos ao
???????????? * arquivo gateway.php
???????????? */
??????????? this.endpoint = “../gateway.php”;
???????????
??????????? this.source = classe;
??????????? this.addEventListener(FaultEvent.FAULT,OnFault);
??????? }
???????
??????? protected function OnFault(e:FaultEvent):void
??????? {
??????????? Alert.show(e.fault.faultString,”Erro” );
??????? }
??? }
}

Esta classe tem como principal objetivo estabelecer o endpoint, que é o gateway.php que ainda vamos criar. O atributo source define qual a classe que iremos acessar na pasta classes. Também adicionamos um listener genérico caso haja alguma falha na conexão. Veja que a classe é dinâmica (dynamic), ou seja, podemos chamar métodos da classe sem que eles estejam implementados na classe. Isso é útil pois os métodos chamados nesta classe serão os métodos remotos do PHP.

No servidor, temos que criar o arquivo gateway.php, com o seguinte código:

//Adiciona o autoloader do Zend Framework
// Assim todas as classes do framework
//? serão carregadas quando precisarem
require_once “Zend/Loader/Autoloader.php”;
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);

//Instancia o servidor Zend_AMF
$server = new Zend_Amf_Server();

//Habilita o modo de desenvolvimento, retornando
// mensagens de erro. Comente esta linha quando
//?? estiver em modo de produção
$server->setProduction(false);

//Adiciona este diretorio como um diretorio de
// classes que podem ser usadas pelo Flex
$server->addDirectory(dirname(__FILE__).”/classes”);
set_include_path(dirname(__FILE__).”/vos”);

//TODO: Adicionar VOs

//Dependendo da requisição do Flex, irá
// chamar a classe correspondente, respondendo
//?? em formato AMF o que a classe responder.
echo $server->handle();

//Não fechar a tag PHP, nunca !!

?

O arquivo gateway.php é o ponto de entrada para as classes em PHP. Veja que inicialmente fazemos um include do Autoloader.php para que todas as classes do Zend Framework sejam instanciadas sem a necessidade de realizar requeires. Criamos então a instância do Zend_AMF_Server, que irá cuidar para que o flex consiga conversar com o PHP via AMF. Adicionamos o diretório classes como um diretório do AMF, onde as classes serão expostas ao flex e usamos o set_include_path para adicionar as classes que estão na pasta “vos” no path global do php, para que não precisamos fazer include das mesmas. Depois adicionaremos mais código sobre as classes VOs.

Na pasta “classes”, criamos a classe Teste, e o método sayHelloWorld. O nome do arquivo tem que ser o mesmo nome da classe, ou seja, Teste.php.

class Teste {
??? public function sayHelloWorld($name)
??? {
??????? return “Hello World $name”;
??? }
}

//Não feche a tag PHP!

?

Agora voltaremos ao Flex para que ele possa acessar a classe teste. No arquivo melhoresPraticas.mxml, adicionamos o seguinte código:

?


http://ns.adobe.com/mxml/2009″
?????????????? xmlns:s=”library://ns.adobe.com/flex/spark”
?????????????? xmlns:mx=”library://ns.adobe.com/flex/mx” minWidth=”955″ minHeight=”600″>
???
??????? ??????????? import mx.controls.Alert;
??????????? import mx.rpc.events.ResultEvent;
???????????
??????????? import org.swizframework.utils.services.ServiceHelper;
???????????
??????????? import services.ServiceBase;
??????? ]]>
???

???
???
??????? ???????????
??????????? var testeService:ServiceBase = new ServiceBase(“Teste”);
??????????? var serviceHelper:ServiceHelper = new ServiceHelper();
???????
??????? serviceHelper.executeServiceCall(
??????????? testeService.sayHelloWorld(“Daniel”),
??????????? function(e:ResultEvent):void{
??????????????? Alert.show(e.result.toString());
??????????? });
???????
??????? ]]>
???

???

?

Como estamos realizando um teste, fazemos o acesso ao PHP no evento creationComplete da aplicação. Criamos a variável testeService que é do tipo ServiceBase, repassando o parâmetro que é o nome da classe no PHP, ou seja, “Teste”. Também criamos a variável serviceHelper que pertence ao Swiz e é um facilitador de acessos ao PHP. Usamos no serviceHelper? o método executeServiceCall, que irá chamar remotamente o método sayHelloWorld repassando o parâmetro “Daniel” e quando concluído, executará a função que está no segundo parâmetro, realizando um Alert.

Ao executar esta aplicação, quando é carregada surgirá a mensagem de retorno do PHP:

?

image

Criando as classes em Service

Com o teste de conexão realizado, podemos avançar mais no código! A primeira refatoração que faremos é em relação as classes que estão na pasta service. Até agora criamos o seguinte código:

??? var testeService:ServiceBase = new ServiceBase(“Teste”);

Ao invés de criar a instância de ServiceBase repassando uma string que é o nome da classe, iremos criar a classe TesteService, da seguinte forma:

image

package services
{
??? public dynamic class TesteService extends ServiceBase
??? {
??????? public function TesteService()
??????? {
??????????? super(“Teste”);
??????? }
??? }
}

Veja que, ao criarmos a classe TesteService, podemos alterar o código da aplicação principal da seguinte forma:

var testeService:TesteService = new TesteService();

Implementando o SWIZ

Um dos melhores benefícios que o SWIZ traz é a possibilidade de separar todo o código Flex em camadas, assim como é feito no padrão MVC. Se você ainda não conhece SWIZ, é melhor conhecer, pois se está lendo este artigo está procurando criar aplicações com uma qualidade melhor e não há como chegar a esse nível sem um framework. O Swiz é o o melhor em termos de custo/benefício, porque nao é o mais fácil de aprender nem o mais complicado, e nao é o mais simples e nem o mais completo. É o meio termo em tudo.

Para usarmos o SWIZ, preciamos estabelecer algumas pastas dentro do projeto Flex, que serão nossas camadas. São elas:

  • config: contém os arquivos que chamamos de “bean”, que são os arquivos que fornecem informações para serem injetadas em outras classes
  • controllers: contém os arquivos que “ditam” a dinamica da camada de visualização
  • services: contém os arquivos que fazem o acesso ao PHP
  • events: contém eventos que podem ser disparados e mediados pelo flex
  • valueObjects: são os VOs que iremos usar na aplicação
  • views: contém os formúlários, é a camada de visão

Na pasta config, iremos criar o arquivo Bean.mxml, com o seguinte código:

??? xmlns:fx=”http://ns.adobe.com/mxml/2009″
??? xmlns:s=”library://ns.adobe.com/flex/spark”
??? xmlns:swiz=”http://swiz.swizframework.org”
??? xmlns:services=”services.*”
??? >
???
???
???

?

Neste bean, criamos a variável “testeService”, que é o tipo TesteService. Atenção quando ao uso de letras maiúsculas e minúsculas.? Sempre voltaremos no Bean.mxml para adicionar mais variáveis e com isso, injetá-las nos formulários e controllers da aplicação. Precisamos ainda configurar o Swiz no projeto principal da aplicação (melhoresPraticas.mxml):


http://ns.adobe.com/mxml/2009″
?????????????? xmlns:s=”library://ns.adobe.com/flex/spark”
?????????????? xmlns:mx=”library://ns.adobe.com/flex/mx”
?????????????? xmlns:swiz=”http://swiz.swizframework.org”
?????????????? minWidth=”955″ minHeight=”600″ xmlns:config=”config.*”>
???
???
???????
???????????
???????????????
???????????

???????????
???????????
??????????????? ??????????????????? eventPackages=”events.*”
??????????????????? viewPackages=”views.*”
??????????????????? />
???????????

???????????
???????????
???????????????
???????????

???????????
???????

???

???

?

Esta configuração, adicionada dentro do fx:Declarations, realiza uma configuração padrão no SWIZ. Basicamente adicionamos o Bean que criamos e definimos onde as classes relacionadas a eventos e formulários ficarão. Também definimos um LOG que será apresentado na aba Console do Flex se estiver rodando em modo de Debug.

Após a configuração

Podemos por exemplo criar a tela de login, e outras telas do sistema. Deixarei o código fonte da aplicação para que você possa olhar com calma.

Pegue o código fonte aqui

Conclusão

A lista a seguir é um resumo de melhores práticas que julgo importantes

  • Use módulos/sub applications somente se precisar mesmo. Não comece um projeto de 10 telas querendo usar módulos para cada tela.
  • Separe sua aplicação em camadas. Você escreve mais e cria mais artigos, mas o projeto fica mais consistente.
  • Você não precisa criar o arquivo services-config.xml para conectar sua app no servidor. Pode-se criar uma classe cujo o endpoint é um caminho RELATIVO ao gateway.
  • Use o caminho RELATIVO sempre, para faclitar o deploy da sua app. Isto é, use “../gateway.php” ao invés de “http://localhost/gateway.php”.
  • Injete o controller na view, para passar dados à ela. Se deseja enviar mensagens para a view, então use eventos
  • Não injete a view no controller.
  • Use o dispatcher do SWIZ.
  • Use o serviceHelper do SWIZ.
  • Quando criar um formulário na view, faça o databind com uma variável do controller.
  • Use eventos com moderação. Particularmente eu uso os eventos para notificar a view de alguma mudança, nunca para passar dados, que é função do controller.
  • Se você quer chamar um método da view pelo controller, use eventos.
  • Mais?
Fev 9

Mais um treinamento presencial ministrado pela @ria_labs

Escrito por Ved em 1, 6, AR, Curso, demo, Flex, for, framework, Frameworks, Mate, mvc, O, on, RIA, Ria’s Geral, skins, Tecnologia, Treinamento, UI @ 02 9th, 2011 | via http://www.vedovelli.com.br | Sem comentários
Ved
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Desta vez fomos até a fantástica cidade de Belo Horizonte, treinar uma equipe de 12 pessoas na TSA Tecnologia. Foram 6 dias de treinamento fulltime, nos quais pudemos ver o Flex desde o mais básico até tópicos avançados, tais como Skins, FXG e 2 frameworks MVC: o Mate e o Swiz. Além de tudo isso, [...]

Dez 8

MVC para Flex

Escrito por Fabio da Silva em .NET, 1, 4, 6, Adobe, Air, AR, BI, blog, Blogs, Cairngorm, class, classe, classes, código, comunidade, control, Desenvolvedor, Flex, for, framework, Frameworks, Google, IE, int, jandersonfc, jandersonfc.com, Mate, mg, mvc, O, on, Outros, RIA, Ria’s Geral, serviço, Serviços, tag, UI, Ved @ 12 8th, 2010 | via http://fabiophx.blogspot.com | Sem comentários
Fabio da Silva
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Arrisco a dizer que hoje os três frameworks MVC mais conhecidos são: Cairngorm, Mate e Swiz.

O
Cairngorm é um dos primeiros e foi desenvolvido pela Adobe, e ao meu ver muito burocrático, muitas classes para criar uma funcionalidade. Se encontra na terceira versão.

O Mate anda desatualizado por não ser o foco principal da equipe que o desenvolveu.

O Swiz pelo que vejo é o mais atualizado e tem uma comunidade maior, este seria minha escolha neste momento.

Existem outros:
CafxFramework (Brasileiro), Parsley, PureMVC e RobotLegs.

Entre as vantagens de usar um framework MVC estão:

  • Componentização e reaproveitamento de serviços, diminuindo a quantidade de código.
  • Organização do projeto.
  • Padronização, agilizando assim a integração de um novo desenvolvedor na equipe que conheça o framework.

Nov 4

Swiz não é mais Framework MVC!

Escrito por Janderson Cardoso em Adobe Flex, Flex, mvc, Ria’s Geral, Swiz Framework @ 11 4th, 2010 | via http://www.jandersonfc.com/ | Sem comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »


 Swiz não é mais Framework MVC!

Esse post vai para galera do Flex e tem esse Título com um certo tom de contradição justamente para alertar sobre alguns equívocos que cometemos por não conhecer de verdade como um framework funciona e qual é o seu real Objetivo. Vou mostrar o caso do swiz só para vocês meditarem sobre isso.

SWIZ FRAMEWORK

Swiz é um framework muito bem organizado, podemos dizer que o swiz é:

IOC(Inversion of Control) containers – o arquivo Swiz(Classe do core do framework) é o ioc containers, que por sua vez carrega os BeanLoaders que é onde podemos colocar qualquer classe (da nossa aplicação ou não) para ser instanciada pelo swiz , quando a aplicação flex for iniciada o swiz cria intancia dos beans colocados no containers que por padrão usam o design patterns singleton para garantir apenas uma instancia desses beans(por default já que podemos escolher o padrão prototype para esse caso também). Normalmente no nosso BeanLoaders colocamos nossos RemoteObject, controladoras, delegates, presentation Model, etc…

IOC  como o próprio nome diz significa que algumas responsabilidades não será da nossa aplicação mas sim do Framework, basicamente todo framework é um IOC já que ele em algum momento assume responsabilidade sobre uma atividade na aplicação, porém nem todos frameworks tem um container como é o caso do swiz, esse container deixa o framework mais dinâmico, podemos informar as classes que queremos que ele instancie, quais packages queremos que ele intercepte caso seja disparado um evento… A metadata [Mediate] é um exemplo de como um IOC do swiz funciona, quando é disparado um evento na aplicação o swiz procura o método que possui o metadata [Mediate] que correspende aquele evento disparado e invoca o método.

DI(Dependency Injection) – Essa é uma das melhores partes do swiz, usar Metadata(no java Annotations) para injetar as dependências. Através do uso da metadata [Inject] o swiz consegue injetar qual objeto que deve ser usado naquele caso. Perceba que é responsabilidade do IOC containers comunicar para o swiz quais os objetos que devem ser instanciados e através de um metadata [Inject] o framework pega a instancia que ele já criou quando subiu a aplicação e injeta no atributo que se encontra com a metadata [Inject]. Injeção de dependência é tirar a responsabilidade daquela classe de instanciar os objetos(Atributos) que ela depende para funcionar. O swiz usa como base para injeção de dependência o IOC containers criado por nós, então é correto dizer que IOC é uma forma de injetar dependências (DI) mas é bom você ter ciência que não é a única forma.

o Swiz é isso,IOC e DI,  aonde está o MVC? em lugar nenhum. podemos não implementar um MVC e usar o swiz para desacoplar responsabilidades usando injeção de depenências e/ou facilitar a forma com que trabalhamos com os eventos no flex. O fato de usar MVC é um boa prática e a própria documentação do framework recomenda porém o swiz não é framework MVC.

Principalmente no caso do swiz é normal essa confusão, já que em suas primeiras versões se tratava de um framework MVC, porém com a maturidade de seu container e um bom uso de metadata o foco foi mudando. Por isso é muito importante você analisar  o que realmente cada framework faz, baixe o código fonte do mesmo, tente  entender e assim você não será enganado pelas aparências.

Espero que medite sobre o mesmo e logo perceberá que o Spring(AS) e Mate também não são frameworks MVC.

Cumps.


 Swiz não é mais Framework MVC!

Similar Posts:

  • Tutorial Básico Swiz Framework 1.0
  • TUTORIAL JAVA + FLEX NA PRÁTICA (9) – Atualizando o Swiz
  • TUTORIAL JAVA + FLEX NA PRÁTICA 3/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
  • #CafxFramework – Menos código, Mais café!

Out 18

Treinamento Flex Frameworks: dúvida sanada e info adicional

Escrito por Ved em AR, BI, e-genial, Flex, framework, Frameworks, IE, mvc, NaN, O, on, Ria’s Geral, Treinamento, UI, Ved @ 10 18th, 2010 | via http://www.vedovelli.com.br | Sem comentários
Ved
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Esta dúvida veio por e-mail, questionando a real necessidade da utilização de um framework MVC na camada view, neste caso, o Flex. Segue minha resposta. José Carlos, bom dia! Sou Fábio Vedovelli e serei o instrutor do treinamento Flex Frameworks pela E-genial. Apesar de eu desenvolver profissionalmente em Flex desde 2007, apenas este ano consegui [...]

Set 29

Como foi o 1º #DevDay Curitiba

Escrito por Igor Musardo em .NET, 1, 4, 6, Adobe, Adobe Flex, Air, AR, Arquitetura, Asp.Net, Banco de Dados, BI, break, business, control, Controls, CRUD, css, Curitiba, dados, demo, Desenvolvedor, desenvolvedores, event, Evento, Excel, exemplo, Flex, for, geo, ide, IE, int, internet, JQuery, mg, Microsoft, Motivação, mvc, O, on, padrão, Palestra, Palestras, rest, RIA, Ria’s Geral, server, silverlight, Software, tag, TAT, Tech, TechEd, Tecnologia, UI, Vários, Ved, Visual Studio, WCF, web, window, windows, WPF, XP, zend @ 09 29th, 2010 | via http://www.igormusardo.com.br | Sem comentários
Igor Musardo
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Sensacional!

É o melhor adjetivo para descrever como foi o 1º DevDay Curitiba, neste último sábado (25/09), tivemos um dia intenso de imersão em tecnologia Microsoft com palestrantes de altíssimo nível. Quase todos os palestrantes são MVP’s e palestraram esse ano no TechEd, maior evento organizado pela Microsoft na América Latina.

O auditório estava cheio de desenvolvedores ávidos pelo conteúdo das palestras.

O Thiago Zavaschi começou a maratona de palestras falando sobre Business Inteligence com dados Geoespaciais. Uma excelente palestra, com várias demos claras e simples!

Depois foi a minha vez de dar continuidade à imersão, contei como comecei a minha caminhada na plataforma Flex, e como aconteceu o meu primeiro contato com o WPF e Silverlight e principalmente como foi que eu abri os olhos para o Silverlight como uma plataforma realmente interessante para aplicações ricas de internet. Ao final da palestra fiz a demo de um aplicativo CRUD em Silverlight com WCF RIA Services do zero, incluindo a criação do banco de dados que você.

Tivemos uma pausa para o Coffee-break e o bate-papo.

Depois foi a vez do Djonatas Tenfen explicar para todos o que é o MVVM e quais os benefícios de se utilizar esse padrão de arquitetura em aplicações Silverlight.

Pausa para o almoço! no Mexicano!

Na volta do almoço o Rodolpho Carmo mostrou para todos como será a plataforma do Windows Phone 7 e como desenvolver um aplicativo em pouquíssimo tempo para o WP7. No final da palestra o Windows Phone 7 dançou o Ah! Muleque…

Victor Cavalcante subiu no palco logo após a palestra do Rodo e quebrou cada um dos conceitos por trás do ASP.NET WebForms comparando-o com a Matrix, pois os conceitos do WebForms simplesmente não são conceitos de Web, como por exemplo, Web não tem Estado, Web não tem Server Side Controls, etc. E nos apresentou a pílula Vermelha para conhecermos a verdade através do ASP.NET MVC + CSS + JQuery em uma palestra muito dinâmica e divertida.

E para fechar com chave de ouro o DevDay, não tinha ninguém melhor que o Giovanni Bassi. Com uma palestra extremamente provocadora, apresentando a verdade nua e crua que mexeu com vários desenvolvedores presentes fazendo-os cair na real sobre o que realmente é ser um Desenvolvedor de Software Profissional, quais as responsabilidades e obrigações de se desenvolver software! Sem dúvida foi uma palestra para a reflexão de todos.

Ao final do DevDay fizemos vários sorteios de mouse sem-fio, pen drives e uma mochila para Notebook.

Sem dúvida foi um dia sensacional!

Aguarde, pois mais DevDays virão por aí! Até o próximo…

« Entradas anteriores | Entradas recentes »

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2791 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com