| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 11:51:08
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline
|
Plugins são componentes feitos para serem acoplados a sua aplicação depois do código já compilado.
Eles precisam ser ainda mais desacoplados do que um modelo de componentes tradicional, pois não se sabe o que um terceiro, implementador do plugin, vai querer colocar por lá.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 11:55:02
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline
|
Ferryman wrote:Eu uso DI com o objetivo de obter um maior desacoplamento... agora o resultado disso é que ficou muito fácil pra criar mocks pros testes unitários, o que prova que código que segue as boas práticas de OO é fácil de testar  .
Acho que é esse mesmo o questionamento do autor do artigo. Por que você usa DI e não outro padrão qualquer? Existem vários padrões (muitos deles mais simples) que geram desacoplamento (ele mesmo cita um exemplo com o provider no artigo).
Ou o motivo é só por causa dos testes unitários?
Eu vou admitir.
Um dos grandes motivos pelo qual eu uso DI são, exclusivamente, os testes unitários.
O outro é pq é conveniente. Como uso muito o spring, acabo usando DI pq o spring foi feito para trabalhar com ela.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 11:58:21
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline
|
Aliás, que bom que alguém citou o Fowler. Já notou que ele mesmo diz na descrição do padrão:
"Inversion of control is a common feature of frameworks, but it's something that comes at a price. It tends to be hard to understand and leads to problems when you are trying to debug. So on the whole I prefer to avoid it unless I need it. This isn't to say it's a bad thing, just that I think it needs to justify itself over the more straightforward alternative.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 15:21:29
|
BiraBoy
JavaChild
![[Avatar]](/images/avatar/7050094b04fd9aa310d3d5efde279058.jpg)
Membro desde: 26/10/2006 11:52:14
Mensagens: 149
Localização: Natal
Offline
|
Está começando a melhorar. Pena que poucos aqui, como o Vini, estão postando sua experiência própria e a razão pela qual estão utilizando DI.
Quem utiliza DI, posta ae sua experiência vá lá
|
There are only 10 kinds of people in the world: those who understand binary and those who don't. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 15:40:54
|
rodrigoallemand
GUJ Ranger
![[Avatar]](/images/avatar/d7b431b1a0cc5f032399870ff4710743.jpg)
Membro desde: 21/02/2005 20:19:47
Mensagens: 972
Localização: Rio de Janeiro, Recreio!!!
Offline
|
fabeen wrote:Componentes, Serviços, etc. Os nomes podem ser os mais variados. Mas a utilização do conceito não depende de plataforma.
Correto! Concordo com vc... mas esse termo "Modelo de Componentes" é bastante utilizado pelo pessoal de .NET focados em orientação a eventos e os seus "maravilhosos" componentes e controllers por componente...
|
Rodrigo Allemand
A culpa é minha e eu a coloco em quem eu quizer!. (Homer Simpson)
http://blog.rodrigoallemand.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 17:26:02
|
agodinhost
Virtual Machine Man
![[Avatar]](/images/avatar/b8ffa41d4e492f0fad2f13e29e1762eb.jpg)
Membro desde: 28/03/2006 21:19:16
Mensagens: 590
Localização: RJ, Tijuca
Offline
|
Eu pessoalmente não estou usando, muito por causa de restrições de ambiente e performance. Vi alguns amigos (arquitetos) pulando pra dentro do Spring (convencidos pela galera aqui do guj e pelo tio Rod) e alguns desses quebraram a cara, não no debug, mas no treinamento da galera que daria manutenção. IoC é um assunto muito extenso, a grande maioria dos desenvolvedores ainda nem sabe desenvolver bem com OO pura e simples, vixe maria!!!
Meus testes unitários são sacais, tá tudo muito amarrado, concordo que esses poderiam melhorar bastante só pelo fato de usar um framework IoC mas não acho que pro me caso isso justifique.
|
"The difference between theory and practice is that, in theory, there is no difference between theory and practice". |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 19:59:23
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Que problemas de performance Dependency Injection tem te dado?
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 20:29:49
|
WilliamSilva
Moderador
Membro desde: 02/03/2005 11:08:44
Mensagens: 1747
Localização: Santos -SP.
Offline
|
agodinhost wrote
Vi alguns amigos (arquitetos) pulando pra dentro do Spring (convencidos pela galera aqui do guj e pelo tio Rod)
Vc. vai ter que ser mais objetivo nesse "convencidos pela galera aqui do guj".???
mas no treinamento da galera que daria manutenção.
Então o problema foi outro.
|
= William Silva =
iSHARE - Document Management System
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 22:18:26
|
agodinhost
Virtual Machine Man
![[Avatar]](/images/avatar/b8ffa41d4e492f0fad2f13e29e1762eb.jpg)
Membro desde: 28/03/2006 21:19:16
Mensagens: 590
Localização: RJ, Tijuca
Offline
|
pcalcado wrote:Que problemas de performance Dependency Injection tem te dado?
A aplicação que utilizei como base para a minha medição foi uma aplicação utilizando Spring com Hibernate. O pessoal que desenvolveu essa aplicação usou os templates do spring pra hibernate e tal mas eles não tinham grandes conhecimentos de hibernate SQL (IMO, seis meses atrás) - não sei se tinham pro Spring, não olhei o código à fundo. Sei que, dado o tempo que EU tinha pra avaliar o risco decidi por não por minha bunda na janela (fora o fato de não ter uma equipe com skill "real" pra dar manutenção IoC/Spring).
Concordo que minha afirmação inicial dá idéia, incorreta, de quê o problema de performance que mencionei era puramente do Spring (IoC), mas medi o que tinha em mãos na época. Antes de decidir por não utilizar percorri a web em busca de opiniões diversas e encontrei algumas reclamações de performance específicas pro Spring (principalmente para aquelas aplicações com grande números de classes injetadas). Não fui a fundo no assunto.
Para o meu caso, até agora, Spring não vai ajudar muito. Trabalho, hoje, numa fábrica onde a maioria do pessoal é júnior e quando o cara ganha algum skill novo ele acaba pulando fora para uma proposta melhor. Se eu optar por usar Spring nesse ambiente terei de adicionar no meu risco a provável incapacidade técnica tanto minha quanto da minha equipe, para, no tempo dado, levar esses projetos até o final.
Como disse antes: nossos testes de unidade são muito simples, amarrados, mas simples. Os de integração quase nem existem. Pode ser que, num futuro bem longe de onde estou hoje (empresa) eu use Spring da forma como ele merece - mas hoje ele não se justifica pra minha realidade.
Quanto à restrição de ambiente foi algo bem específico: nosso cliente (vale) simplesmente não "permite" a utilização de "frameworks" não homologados.
|
"The difference between theory and practice is that, in theory, there is no difference between theory and practice". |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 22:23:23
|
agodinhost
Virtual Machine Man
![[Avatar]](/images/avatar/b8ffa41d4e492f0fad2f13e29e1762eb.jpg)
Membro desde: 28/03/2006 21:19:16
Mensagens: 590
Localização: RJ, Tijuca
Offline
|
WilliamSilva wrote:Vc. vai ter que ser mais objetivo nesse "convencidos pela galera aqui do guj".???
Preciso mesmo? A galera aqui do guj defende o spring como se ele fosse a nona maravilha do mundo (a oitava agora é o cristo certo?)
WilliamSilva wrote:Então o problema foi outro.
Pra esse exemplo eu concordo, mas vc realmente acha que eu preciso de Spring pra todo tipo de aplicação?
|
"The difference between theory and practice is that, in theory, there is no difference between theory and practice". |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 22:29:39
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2668
Localização: Chicago, EUA
Offline
|
Minha visão disso é:
IoC = Inversão de Controle = ao invés de suas classes decidirem por si só quais implementações elas irão utilizar, isso é configurado num lugar central. O caso clássico são os DAOs ou Repositórios.
Todas as suas classes vão utilizar um userDAO (interface) e o container de IoC vai injetar a implementação que vc deseja em todas elas, por exemplo um OracleUserDAO. Se amanhã vc quiser trocar a implementação para DummyUserDAO, por exemplo para testes, vc pode muito facilmente e comodamente fazer isso, alterando apenas uma linha de código nas suas configurações.
AutoWiring = DAOs precisam de Connection, ou Session do Hibernate, ou DataSource, ou sei lá o que... É muito comodo vc definir em apenas um lugar que o que precisar de uma connection vai receber uma connection e pronto. O trabalho sujo de ligamento e injeção é o container/framework que faz isso pra vc.
IoC e Autowiring promovem um belo desacoplamento, facilitam a manutenção, evolução, separação de responsabilidades e promovem um melhor entendimento do sistema, ao meu ver. Não é algo ESSENCIAL/FUNDAMENTAL, mas é uma bela boa prática hoje em dia. Se o framework que vc está usando suporta IoC/DI/Autowiring, então seria bem recomendável que vc faça uso desses recursos.
This message was edited 1 time. Last update was at 18/12/2007 22:31:56
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 23:44:31
|
BiraBoy
JavaChild
![[Avatar]](/images/avatar/7050094b04fd9aa310d3d5efde279058.jpg)
Membro desde: 26/10/2006 11:52:14
Mensagens: 149
Localização: Natal
Offline
|
Eu gostaria muito da experiência pessoal de todos, sobretudo os mais antigos daqui sobre em que contexto e com que objetivo utilizaram isso. Esse é o principal objetivo do tópico.
pcalcado, saoj, vcs não gostariam de falar da experiência de vocês?
Vini, entre outros, fez isso. Achei massa e tá enriquecendo muito.
|
There are only 10 kinds of people in the world: those who understand binary and those who don't. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2007 23:56:10
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
DI existe pois Java é uma linguagem muito fraca quando o assunto é abstração. Não é possivel criar qualquer forma de abstração sobre tipos, tão pouco é possivel criar sistemas realmente paramétricos. Não existe real motivo para não usar new diretamente, o problema é que não existe uma construção de instanciação paramétrica, e tão pouco existe o conceito real modulos, só existem namespaces.
Linguagens como NewSpeak permitem construção de modulos paramétricos os quais podem ser instanciados com suas dependencias informadas. É simples e intuitivo, módulos não são permitidos terem dependencias externas fixas, todas tevem ser paramétricas.
DI é apenas uma gambiarra para resolver mais um dos problemas de uma linguagem pobre.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/12/2007 00:23:15
|
WilliamSilva
Moderador
Membro desde: 02/03/2005 11:08:44
Mensagens: 1747
Localização: Santos -SP.
Offline
|
agodinhost wrote
Pra esse exemplo eu concordo, mas vc realmente acha que eu preciso de Spring pra todo tipo de aplicação?
Não, há outros recursos e digo o mesmo para o hibernate. Agora uma coisa é certa, há muita gente da área de TI usando ferramentas, frameworks etc. pela frequencia com que os assuntos são gerados pelos foruns. Alguns em sua maioria nem sabem se a ferramenta é adequada ao projeto, mais vc. colocou alguns pontos interessantes que devem ser reavaliados em um projeto.
sds.
This message was edited 2 times. Last update was at 19/12/2007 00:31:40
|
= William Silva =
iSHARE - Document Management System
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/12/2007 00:55:18
|
Alessandro Lazarotti
Virtual Machine Man
![[Avatar]](/images/avatar/2aaaddf27344ee54058548dc081c6541.jpg)
Membro desde: 21/01/2004 14:12:54
Mensagens: 719
Offline
|
Já no início, programadores ouvem que é uma boa prática desenvolverem para interfaces... "abstração" é a palavra da ordem (o sistema "pode" mudar de implementação em determinado serviço, mudar de frameworks e etc ).
O próximo passo é como abstrair: o coração disso...."Factories".
Então, com embasamento e as "motivações" propostas pelos gurus dos Design Patterns (gambiarras catalogadas para suprir deficiências semânticas ou de paradigmas), surgem os mais diversos nomes e códigos para garantir que seu sistema saia o mais burocrático, extensível e "abstrato" do mundo.
Então você vaga pela internet, encontra um Portal de malucos falando sobre Injeção de Dependência e resolve ler um pouco mais a respeito:
"Hey, mas peraê, ca-ca-ca-cadê os sssingletons nas classes de vocês? Suas AbstractFactories e seus respectivos produtos-fábricas? Onde vocês estâo gerenciando/instanciado estas interfaces? Vocês não precisam se preocupar com nada disso, tão de sacanagem comigo? E ainda por cima isso facilita o desenvolvimento seus Testes Unitários?"
É, eu acho DIP uma boa ...
|
... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/
|
|
|
 |
|
|