Diferenças entre Arquitetura de Projetos

37 respostas
jeffmor

Olá pessoal,

É evidente que não vou achar na web alguém que diga qual arquitetura devo usar.
Ex. qdo projeto a ser desenvolvido for para a área da Saúde… use tal ! se for para área imobiliária… use fulana.

Isso eu não vou achar (pois a maioria do pessoal que manja do assunto diz q é necessário contratar um consultor, mas não é o meu caso, é apenas para um artigo), por isso estou postando aqui…

a minha dúvida mesmo é descobrir a diferença entre arquiteturas,
se alguém tiver algum material legal sobre isso ou bibliografia tambem seria bacana.

37 Respostas

guilherme.chapiewski

Cara, a diferença é a seguinte: cada projeto tem uma arquitetura! Você não vai conseguir criar uma arquitetura genérica nunca, você terá que analisar um cenário particular.

E quando digo um cenário particular não estou falando de um sistema na área de saúde somente, como você falou. Não se trata somente da área de atuação do sistema mas de uma série de outros fatores a mais.

Um sistema de saúde com 100 usuários CADASTRADOS certamente tem uma arquitetura absolutamente diferente de um sistema de saúde com 10000 usuários SIMULTÂNEOS, por exemplo.

Se você não escolher um cenário para analisar e um escopo para o seu projeto não vai conseguir chegar a conclusão nenhuma.

Abraços,
Guilherme Chapiewski

jeffmor

Perfeito Guilherme,

mas o q é fundamental para categorizar arquiteturas? (levando se em conta que já temos os requisitos levantados e o escopo definido)

Eu posso falar de arquitetura apenas por Design Patterns?

guilherme.chapiewski

Pois então… Os requisitos (tanto funcionais quanto não funcionais) e o escopo é que são a base para definição da arquitetura.

Por exemplo:

  • Se você tem um requisito que aplicação terá que suportar 10000 acessos simultâneos com certeza terá que se preocupar com escalabilidade horizontal (cluster).

  • Se você tem uma aplicação web você não poderá usar Swing, naturalmente.

  • Se você tem uma aplicação desktop não poderá usar Struts.

Enfim, como eu disse anteriormente, você definirá a arquitetura de acordo com o seu escopo.

Abraços,
Guilherme

cv1

O sistema ta em producao e os usuarios estao usando o treco o dia inteiro pra fazer o trabalho deles?

Nao?

Entao “ter requisitos levantados e escopo definido” eh mentira.

Agora para de falar de arquitetura e vai programar algo que valha a pena usar, antes de mais nada :wink:

guilherme.chapiewski

Hehehe, seria uma boa :slight_smile:

W

jeffmor wrote:

Isso eu não vou achar (pois a maioria do pessoal que manja do assunto diz q é necessário contratar um consultor, mas não é o meu caso, é apenas para um artigo), por isso estou postando aqui…
Rapaz, se é apenas para um artigo acho que já escreveram o que existe de melhor no assunto vc. tem que ler isso.:

http://fragmental.com.br/wiki/index.php?title=Desenvolvendo_Sistemas_OO_Com_Padrões_de_Negócio

http://fragmental.com.br/wiki/index.php?title=Arquitetura_de_Camadas_em_Java_EE
http://fragmental.com.br/wiki/index.php?title=MVC_e_Camadas
http://fragmental.com.br/wiki/index.php?title=Evitando_VOs_e_BOs

Te garanto que vais mudar teus conceitos e vai parar de inventar história e voltar a estudar/trabalhar.Só um detalhe não vais copiar a idéia alheia, escrever (..sic) o artigo dizendo que o conceito é seu....ok.... :?

Boa sorte.

jeffmor

Então quer dizer que eu só tenho requisitos levantados e escopo definido, qdo o sistema estiver em produção? ow louco dessa eu não sabia…

CV, na boa, o intuito do tópico não é programar!

jeffmor

ehh willian eu já havia lido e relido esse material do “shoes” (muito bom por sinal)

WilliamSilva:

Te garanto que vais mudar teus conceitos e vai parar de inventar história e voltar a estudar/trabalhar.Só um detalhe não vais copiar a idéia alheia, escrever (…sic) o artigo dizendo que o conceito é seu…ok… :?
Boa sorte.

inventar história? :roll: é conceitual velho, não estou inventando história nenhuma, só estou com dúvidas, e procurando material disponível.
Não sou do tipo de pessoa, de copiar não cara. Se eu for usar o que uma outra pessoa já disse, com certeza eu vou citar. :slight_smile:

cv1

“Requisito levantado” e “escopo definido” so poem comida no prato de quem finge que ta fazendo alguma coisa. O mundo precisa de software, nao de mais papel com diagramas.

Entao, qual eh o intuito?

jeffmor

Eu concordo contigo que existem muitas “frescuras” para desenvolver qualquer coisa, mas tem pontos que são fundamentais: entre eles análise de requisitos e escopo, com isso “pronto” a implementação se torna muito mais rápida e precisa…

o intuito:

  1. é debater é sacar conceitualmente as diferenças entre Arquiteturas.
  2. eu posso falar de arquitetura apenas por Design Patterns?

como diria gscordeiro:
se abstrato pudesse ser instanciado, eu diria que esse assunto é a instanciacao da abstração!

Menina

Pois é mas são os papéis com diagramas que fazem com que o software possa ser modificado e entendido, sem aquela costumeira bagunça de alguns programadores… deculpa ai… mas vai dar uma estudada no que vc tah malhando…

cv1

Er… nao. Pra isso se usa refactoring :wink:

Duende_Macabro

Acho q o cv quer fizer é:

:smiley:

R

Saudações a todos … acho realmente interessante os argumentos “extremistas”.

Me pergunto sempre se os desenvolvedores XP, quando um dia pensarem em construir as suas casas ou reformar um apto irão usar das mesmas heurísticas.

Diriam eles ao pedreiro (já que não precisam nem de Arquiteto ou Engenheiro) … “Bota a parede ai mesmo, e não precisa se preocupar com colunas. Se até o final da obra eu resolver fazer o segundo andar da casa, vocês quebram tudo (quer dizer, fazem um refactoring) e constroem tudo de novo.”

Abraço.

Rafael_Nunes

E onde diabos há semelhança entre construir um software e construir uma casa?

Rubem_Azenha

Renatov:

Saudações a todos … acho realmente interessante os argumentos “extremistas”.

Me pergunto sempre se os desenvolvedores XP, quando um dia pensarem em construir as suas casas ou reformar um apto irão usar das mesmas heurísticas.

Diriam eles ao pedreiro (já que não precisam nem de Arquiteto ou Engenheiro) … “Bota a parede ai mesmo, e não precisa se preocupar com colunas. Se até o final da obra eu resolver fazer o segundo andar da casa, vocês quebram tudo (quer dizer, fazem um refactoring) e constroem tudo de novo.”

Abraço.

Acredito que os programadores em geral tem um poquinho mais de estudo que os pedreiros em geral (nada contra eles).

Enfim, são tarefas totalmente diferentes :slight_smile:

Ironlynx

Há casas e casas. :wink:
Boa parte dos projetos que são descontinuados(ou desencorajados) possuem um dito “Arquiteto de Software” por trás dele.Quer bagunçar um projeto?Taca zilhões de métricas,CMM, uns medalhões(de preferência alguém fera em Análise Essencial e Estruturada que acha que AOO é uma tolice e pode projetar ‘qualquer coisa’ com seu conhecimento).
IMHO, um Arquiteto de Software seria mais uma posição, tipo um indivíduo com + de 5 anos de programação e desenvolvimento de muitos projetos.O Arquiteto apenas como um projetista, um engenheiro, a meu ver é um erro, que pode prejudicar muito um sistema.É como um técnico esportivo de natação que nunca nadou.Existem bons, mas são muito raros…

R

Olá. :smiley:

Realmente essa é uma discussão a  religião, futebol e mulher. Gera sempre muita polêmica e está recheado de opiniões diversas. Graças a Deus pois a unanimidade é burra. 

Bom,  fiz analogia a Engenharia Civil devido a nossa área ser a Engenharia de Software (acredito que não foi a toa que qualificaram assim).  

O XP é um processo de desenvolvimento que tem os seus méritos e seu valor, mas como diria o Ministério da Saúde: "Aprecie com moderação". Não acredito que ele seja a solução para todos os casos como alguns radicais insistem em apregoar.  

Entendo que o XP seja uma boa solução para projetos de pequeno porte e com equipes reduzidas. Principalmente para equipes "in-house" onde o usuário tem a "porta aberta" na área de TI, sem se preocupar com orçamentos, riscos, prazos apertados, tecnologias heterogêneas e em primeiro lugar, em ter os seus requisitos bem definidos. Nessa situação realmente fica fácil iniciar o desenvolvimento de um sistema, e ir adicionando e/ou modificando as funcionalidades durante o decorrer da programação.
jeffmor

Aí galera… só para finalizar esse tópico.
Andei pesquisando e achei dois pdfs.
Para quem se interessou pelo assunto recomendo a leitura

segue os links:
www.ime.usp.br/dcc/posgrad/teses/ane.pdf
www.rise.com.br/wdbc2006/apresentacoes/terca/arquitetura_e_DBC.pdf

Kenobi

Realmente arquitetura é definida de acordo com a exigência de comportamento da aplicação, como integração, disponibilização dos componentes de negócio como serviço, se vai haver ou não negócios orquestrados por regras de negócio e workflow - BPM e por aí vai.

Então CV é difícil colocar todas as necessidades dos clientes como algo comum, que pode ser resolvido com qualquer framework RoR por exemplo da vida.

Quero ver projetos de alta-criticidade, com loadbalance, cluster, assíncrono funcionando sem planejamento.

[]´s

Mauricio_Linhares

Kenobi:
Quero ver projetos de alta-criticidade, com loadbalance, cluster, assíncrono funcionando sem planejamento.

Engraçado ver que ainda existem pessoas que acreditam que não existe planejamento em processos ágeis. Todos os processos ágeis que eu conheço fazem reuniões de planejamento pelo menos semanais, quando elas não são diárias.

A grande diferença é que nós planejamos durante todo o projeto, porque sabemos que o nosso trabalho é entregar software que funciona, não fazer previsão do futuro.

Quanto maior a altura, maior a queda :smiley:

Edufa

Maurício acho que o problema que mesmo lendo um monte de artigos, tutoriais, cases, etc, sempre existe o dilema de São Tomé. Sem contar q as pessoas em geral são status quo, então não adianta falar, o ideal seria ver e participar de uma projeto assim, mas aí vira um círculo vicioso, não faz pq não tem experiencia e não tem experiencia pq não faz … e ainda por último mesmo q tente sem experiência, e no caso de errado, para muitas pessoas uma experiência negativa só é vista pelo lado negativo…

Kenobi

Maurício Linhares:
Kenobi:
Quero ver projetos de alta-criticidade, com loadbalance, cluster, assíncrono funcionando sem planejamento.

Engraçado ver que ainda existem pessoas que acreditam que não existe planejamento em processos ágeis. Todos os processos ágeis que eu conheço fazem reuniões de planejamento pelo menos semanais, quando elas não são diárias.

A grande diferença é que nós planejamos durante todo o projeto, porque sabemos que o nosso trabalho é entregar software que funciona, não fazer previsão do futuro.

Quanto maior a altura, maior a queda :smiley:

Não estou falando que não há planejamento. Mas uma coisa é bem diferente, no processo ágil vc faz de acordo com as iterações e entregas.
Dependendo do escopo do projeto , o tempo gasto com refactoring será 50% do tempo da construção - adicional.

Como disse anteriormente, depende do projeto. Gosto de processo ágil, principalmente onde os itens de influência são baixos, e o mesmo está muito mais atrelado à desenvolvimento de negócio, do que infra-estrutura.

R

Se é por ter experiência em projetos ágeis, já trabalho a quase 3 anos em projetos orientados a XP. Daí posso falar por vivência própria e não por leituras curiosas de artigo.

O Kenobi citou muito bem quando falou sobre refactorings. Isso pra mim é um dos grandes engodos do XP. Você sai acreditando que pode produzir produtos rapidamente e que possíveis distorções possam ser corrigidas com o tempo. Se vc está falando que o teu usuário pediu um ou dois campos a mais ou mesmo uma nova funcionalidade, pode até funcionar. Mas por favor não erre no seu design, as consequências são amargas. Você pode chegar no meio do caminho e perceber que a solução imaginada na primeira iteração, quando o meu foco da lanterna era muito fechado, não foi robusto suficiente para suportar as novas iterações e as funcionalidades decorrentes. Por exemplo, um problema que deveria ser solucionado por uma simples agregação, pros pares das primeiras iterações foi resolvido por herança. Vamos então dar uma de Dr. Frankstein (ou seria Dr. Pitangui) e criar o nosso monstro através de refactorings (famoso bisturi e agulha).

É claro que tudo isso tem a ver também com a experiência dos “programadores”. Mas sem ter uma visão do “todo”, como eu poderia crucificar os pares das primeiras iteração por terem adotado uma solução que não foi a melhor. Ainda mais por confiarem plenamente no “bisturi”.

Infelizmente a realidade pode ser mais amarga e a “emenda sair pior que o soneto”.

Volto a dizer: acho que podemos ter desenvolvimentos ágeis sem abrir mão de um boa definição de escopo e um bom design. Existem qualidades que podem ser mescladas e podemos colher frutos de um processo misto e que alcance um ponto de equilíbrio.

pcalcado

Defina “processos orientados a XP”. Formalmente isso não existe.

Refactoring não envolve melhorias funcionais mas sim de design. Se você criou um Frankestein é porque simplesmente não fez refatoring, para começar. Acho que o conceito não está muito claro.

Isso tudo não ‘tem a ver’ com a experiência (na verdade, qualidade) dos programadores, ela simplesmente é decorrente desta.

Bom design não tem a ver com BDUF. Até a IBM já aprendeu isso, não é a toa que contratou Scott Ambler.

Mauricio_Linhares

[sendo irônico]
Ah, mas não é BDUF, é só um pouquinho de design antes do projeto começar. Sabe, aquele pouquinho que agente fica imaginando que o mundo é perfeito, que os sumarinos são amarelos e que nós conhecemos todos os cenários que as ferramentas que nós usamos passam.

[deixando de ser irônico]

Em um projeto recente, queriam um diagrama de classes, era pra fazer uma abtração sobre toolkits gráficos (web e desktop, a idéia é escrever uma única aplicação que rode nos dois ambientes). Queriam diagrama do diabo a quatro. E aí?

E aí que da idéia inicial, nem a idéia sobrou. A implementação foi mais uma prova que imaginação demais e pouco código rodando é só isso. Imaginação demais.

Se você não tem testes nem código, não tem nada. Já passou a época em que computadores operavam consumindo cartões de papel :stuck_out_tongue:

R

pcalcado:
Defina “processos orientados a XP”. Formalmente isso não existe.

Se vc puder ler novamente lá está “projetos orientados a XP”. Formalmente “processos orientados a XP” realmente seriam o máximo. :slight_smile:

Mas em tempo corrigido pelo pcalcado, realmente errei em dizer que uma mudança de requisito é um refactoring. Thanks.

brunohansen

Questionamento aos eXtremes de plantão!

Evoquei meu livro aqui de XP e realmente não vi nenhuma menção a projeto preditivo. O lema é projeto so com refatoração! Só vale projeto adaptativo! Nada de pensar no futuro em danadinhu!

Mas na realidade será que vcs não pensam nem um pouquinho no futuro? Tudo começa com uma classe sem coesão, as refatorações vão rolando, outras classes vão sugindo, tudo vai melhorando…

Não acho que as coisas rolam de forma tão extrema assim! A meu ver se fosse tão extrema deveria rolar assim, voce deveria realmente começar com uma classe e ir refatorando. Mas como vejo que as coisas não rolam assim ainda acho que tem projeto preditivo ai no meio!

Ou será que as coisas rolam assim?

[]s

R

… aproveitando e concordando com o Maurício, realmente “software sem código não é software” e software que não possue um conjunto de testes não pode nem sair do ambiente de desenvolvimento. Os testes são um dos meios efetivos para se comprovar a não conformidade de um produto mas não o meio de “garantir a sua qualidade”. Um bom exemplo de garantia da qualidade é a programação em pares.

O fato da IBM ter desenvolvido e apostado no OS2 comprovou que nem sempre ela acerta. A ida do Scott eu encaro muito mais como o aproveitamento de boas práticas (incorporação) do que uma mudança radical, desprezando o passado. Realmente não tenho acompanhado de perto para ter essa certeza mas não me parece uma atitude típica da Big Blue.

Kenobi

Sinceramente acredito que um projeto no modelo XP sem ter um planejamento inicial, corre o risco de gastar muito esforço e o ROI do mesmo acaba não justificando ao fim do mesmo.

Acredito num modelo intermediário, onde o planejamento vai até um ponto X das iterações, e aí vc começa a desenvolver e evoluir sua arquitetura.

Mas se não abrir um pouco o foco, vai correr o risco de gastar muito em processos de refactoring.

Mauricio_Linhares

Aí depois do ponto X você para de planejar né?

Prefiro planejar até o fim.

louds

Os exemplos que deram aqui para metologias ageis fracassarem não tem muita base. O exemplo de ter que refatorar tudo porque saiu de um modelo single-server para cluster não tem cabimento, isso vai ocorrer da mesma forma em um projeto BUFD.

Se o sistema vai realmente rodar em um cluster, isso já estaria definido na primeira iteração, da mesma forma que com metodologias waterfall. Além disso, o impacto de introduzir clustering no software no meio do projeto vai custar a mesma coisa com XP que com RUP.

Processos ageis não é ‘sai fazendo qualquer coisa e danesse planejamento’, mas simplesmente eliminar perdas e postergar as decisões que não são necessárias para a iteração corrente.

Minha experiência com BUFD só mostrou fracassos, em nenhum caso o arquiteto/projetista foi capaz de construir uma solução que prestasse. Mesmo quanto o cara vinha de consultorias AAA e tinha fama de ser MUITO bom. Projetos estes, que em sua maioria, tinham líderes míopes, de não assumir os erros iniciais e continuar com um projeto manco.

dreamspeaker

O mundo precisa de mais gente que faça e entenda os papeis com diagramas direito.

Mauricio_Linhares

Esse é um dos grandes desastres de processos que querem planejar demais antes de começar, tomam decisões cedo demais, sem informação o suficiente e dificilmente uma decisão dessas é a melhor.

danieldestro

Cheguei tarde, mas…

Sinceramente, IMHO, essa coisa de deixar “as decisões” a cargo dos desenvolvedores funciona em pequenos times e com pessoal realmente capacitado.

O que não é a realidade de muitos projetos, que envolve times médios/grandes, onde a maioria dos desenvolvedores são limitados (vulgo meia-boca). Mesmo com treinamento não dá pra homogenizar um grupo todo.

E voltando ao comentário inicial.

Arquitetura não se limita apenas ao desenho do software, mas sim de um sistema, envolvendo ferramentas, máquinas, etc.

Talvez design patterns caiba mais dentro de decisões de desenho de SW do que de arquitetura.

Rodrigo_Manhaes

E, do contrário, o que poderia ser produzido com profissionais que não sejam realmente capacitados além de sacos de bugs, anti-pattern collections ou gambiarras?

A

O mundo precisa de mais gente que faça e entenda os papeis com diagramas direito.

Não que eu seja um defensor de projetos com carriolas de documentação, mas, dentre as práticas do XP (ou de outros métodos ágeis) existe alguma que elimina o uso do documentação, diagramas, etc…!? :evil:

Criado 26 de janeiro de 2007
Ultima resposta 22 de mar. de 2007
Respostas 37
Participantes 20