Tomada de decisões sobre a arquitetura do seu projeto; qual é o seu processo de decisão como?

StackOverflow https://stackoverflow.com/questions/1263886

Pergunta

Muitos de nós, que têm projetado e sistemas a partir do zero desenvolvido, têm sido em situações em que você tinha que tomar decisões difíceis sobre a arquitetura de um projeto. Onde é que você, ou você, traçar a linha em tomar o "próximo passo" na construção de um som de arquitetura e sistema escalável?

Eu construí um site de grande escala, que foi em vez entrou em colapso em termos de arquitetura. Havia uma camada web com o código de front-end, em seguida, de negócios e de dados camadas que tratadas o verdadeiro trabalho a ser feito. As várias camadas de separação lógica co-existia na mesma máquina física. A física, ou mesmo simplesmente lógico, a separação poderia ter existido através do uso de um web services camada / camadas. Por várias razões, não foi implementado dessa forma. Se a decisão foi certa ou errada é simplesmente uma questão de opinião. Estive em outras situações onde uma aplicação relativamente simples foi mais de engenharia, do meu ponto de vista.

O que são alguns dos fatores que você considerar ao projetar a arquitetura para um novo projeto? Você tem uma concepção do projeto consistente você costuma usar, você está n-tier desde o início, ou você avaliar como cada projeto vem em?

Tendo essas experiências repetidamente, muitas vezes eu me pergunto como outros na mesma posição justificar e fazer essas considerações. Tenho certeza que todos nós vamos ter diferentes opiniões, mas acredito que a compreensão do processo de pensamento por trás das opiniões serão esclarecedor.

Foi útil?

Solução

A arquitetura correta para um determinado problema depende inteiramente o problema. Sua pergunta é muito geral para oferecer uma resposta real, além de dizer que eu manter a arquitetura tão simples como eu posso dar conta de todos os requisitos conhecidos e esperados, mas não mais simples.

EDIT:

Para "típicos" soluções de negócios, aqui estão alguns dos fatores que eu considero:

  • UI

    • ele pode ser baseado na web? Quais são os requisitos de interação do usuário?
    • Se uma interface web clássico não é suficiente, posso usar uma tecnologia mais interativo, como Sliverlight?
    • Se ele tem que ser de espessura-cliente (sim, ainda existem cenários que justificam isso), o quão sério são os desafios de implantação? base de usuários pequena, grande base de usuários? Preciso incluir a atualização automática? Será que ela precisa ser aplicada?
  • Layer Negócios

    • Eu tenho considerações performance / escalabilidade que exigem uma camada de negócios separada fisicamente? (Meus camadas de negócios são sempre logicamente separado, e de fácil fisicamente separar se for necessário. Eu às vezes uso CSLA para permitir que a decisão em tempo de implantação quando o direcionamento do Windows, mas isso é uma estrutura pesada e nem sempre o caso).
    • Como simples ou complexos são as minhas regras de negócio? Eles são susceptíveis de evoluir consideravelmente ao longo do tempo? Vale a pena incorporar um mecanismo de regras, como Drools ?
    • Existem requisitos de processamento assíncrono? Preciso de um sistema de fila de trabalho?
    • Existem sistemas externos para fazer a interface com? Que tipos de interfaces para eles apresentam? serviço de Web, COM +, XML sobre HTTP, proprietária, DB, arquivos em lote, ...?
  • Os dados Persistência

    • Que escolhas ORM estão disponíveis para me dado todas as escolhas de plataformas pré-existentes / restrições?
    • Will I beneficiar de amplo uso de procedimentos armazenados? Haverá um DBA para manter procedimentos armazenados e modificá-los ao longo do tempo? Se nenhum DBA, eu só usar procedimentos armazenados onde realmente necessário para o desempenho. Se houver um DBA, mais amplo uso de procedimentos armazenados dá a flexibilidade DBA para gerenciar a arquitetura independente físico do aplicativo (mas como com toda complexidade adicional, que vem com um custo).
  • Cross-Cutting

    • Quais são os requisitos de segurança? Existe um mecanismo existente (Diretório / LDAP Ativa / ...) para ser integrado com? Preciso suporte de segurança baseada em funções?
    • Quais são os requisitos de monitorização operacionais? "Denunciar este bug" funcionalidade? logging simples?

Outras dicas

Bem, deixe-me ser o único a dizê-lo - basta fazê-lo. Concentrado em qualquer requisitos que você tem agora, mas não tentar resolver todos os possíveis recursos futuros, mudanças de requisitos imaginários e os vários cursos de desenvolvimento.

Há um ótimo artigo escrito por Joel: não deixe Arquitetura Astronautas susto você .

Analisar o que quer que os requisitos que você tem, tudo o que apresenta as suas necessidades de software, olhada em sua experiência anterior com projetos similares e ir para ele.

A grande arquitetura nunca nasceu a direita fora da primeira sessão de brainstorming. Você começa com uma abordagem, ajustar o seu curso como as mudanças climáticas, têm sessões de revisão de código que irão produzir ideias para melhorar a arquitetura, refatorar algumas peças de código mal em bem e componentes reutilizáveis, então, finalmente, sua garagem será transformando em um castelo.

Siga o keep it simple e evitar otimização prematura.

Você tem uma concepção do projeto consistente você costuma usar?

Claro. Um indivíduo ou uma equipe desenvolve seu próprio estilo, as técnicas para resolver problemas típicos, componentes reutilizáveis ??que em conjunto irão formar o seu conjunto de ferramentas. Por que o seu jogá-los fora cada vez que seu iniciar um novo projeto?

és tu n-tier desde o início?

Eu tento ser. Ele serve os objectivos de consistência, estrutura limpa e a separação de preocupações.

ou você avaliar como cada projeto vem em

Isso também. Pode haver uma maneira diferente de lidar com o problema e resolvê-lo da maneira mais eficiente.

Onde você fez, ou você, traçar a linha em tomar o "próximo passo" na construção de um som de arquitetura e sistema escalável?

Eu não entendo essa parte da questão.

O que são alguns dos fatores que você considerar ao projetar a arquitetura para um novo projeto? Você tem uma concepção do projeto consistente você costuma usar, você está n-tier desde o início, ou você avaliar como cada projeto vem em?

Eu tive sorte o suficiente para fazer quase todo o meu trabalho em equipes pequenas e infeliz o suficiente para fazer quase tudo em equipes com alto volume de negócios. Eu aprendi nunca tente arquiteto um sistema all by myself ; resultados são melhores com um esforço de equipe. Às vezes nós fizemos prototipagem rápida, mas se o time é bom eu descobri que você pode obter surpreendentemente longe com um quadro branco, cartões de índice, e um projeto do papel.

Nós definitivamente fazer não ter um projeto consistente projeto; cada arquitetura é potencialmente one-off para o projeto, mas eu tenho trabalhado quase exclusivamente em pesquisa e desenvolvimento avançado.

Fatores considerados:

  1. Será que a equipa acha que a arquitetura vai começar o trabalho feito? Trumps todas as outras considerações.

  2. Pode a arquitetura ser facilmente aprendido pelos membros da equipe júnior ou recém-chegados? Outros grupos vão roubar seus melhores pessoas, eles vão deixar para começar a empresas. Em um caso, tivemos um grupo que estava pedidos campo manutenção ocupado demais para aprender uma nova arquitetura, embora a arquitetura que eles tinham estava segurando-los de volta.

  3. A estrutura da arquitetura refletir a estrutura da organização que precisa criá-lo? :-) Um pouco língua na bochecha, mas precisamos de acreditar que podemos construí-lo com as pessoas e o tempo que temos, não a equipe de desenvolvimento perfeito. Portanto, ser capaz de identificar peças da arquitetura que jogo com pessoas é uma coisa boa.

  4. Existem peças que não entendemos, ou pior, existem peças que estamos com medo? Se assim for, as principais bandeiras vermelhas.

  5. é lindo? É algo que ficaria orgulhoso de falar na hora do almoço com pessoas de outras equipes? Se não, o design / arquitetura provavelmente não é bom o suficiente ainda.

  6. Existe uma nova ideia identificável? Algo que outros possam aprender com? (Isso é importante em um ambiente de pesquisa, mas eu não suspeitar de outros lugares importantes.)

Eu acho que é geralmente muito má prática para assumir gargalos de desempenho na frente. Você pode gastar um monte de até otimização frente que não faz diferença notável no final.

Nós temos algumas grandes ferramentas de refatoração estes dias e uma grande quantidade de recursos sobre os padrões de desenvolvimento. Como as ferramentas têm obtido muito melhor eu não gastar quase tanto tempo como eu costumava fazer na função arquitetura. Muito mais ou menos o meu processo é assim:

  1. reunir os requisitos
  2. requisitos Priorizar (não gastar muito tempo em características chapeamento de ouro)
  3. Eu geralmente começam com 2 níveis (UI / Data & Business lógica) a menos que eu sei que os dados & Business níveis lógicos serão separados na frente.
  4. Para cada exigência, primeiro fazê-lo funcionar. Não há padrões aqui a menos que seja dolorosamente óbvio que ela é necessária. Acho que a necessidade de padrões emerge na implementação.
  5. Depois ele funciona, limpar o código, identificar locais para padrões e implementá-las somente se você precisa
  6. Se o desempenho for um requisito, fazer testes de desempenho, refatorar, se necessário.

Se você trabalhar dessa maneira, você vai achar que você errar do lado da simplicidade. Padrões, ferramentas de 3, etc pode ser totalmente incrível na resolução de problemas específicos, mas eu gostaria de ter em mente que cada vez que adicionar algo como isso, ele levanta a barra de entendimento necessário para manter a aplicação mais tarde. Então eu começo simples, e adicionar complexidade apenas quando ele especificamente me ganha alguma coisa.

Na verdade, eu obter um sabor muito ruim na minha boca quando se lida com outros arquitetos que mesmo para uma pequena aplicação, simples vai chegar para um quadro de injeção de dependência, Nhibernate, NUnit, rolar sua própria biblioteca de registro, gravação 3x tantos testes de unidade como eles têm linhas de código, etc. Todas essas ferramentas têm instâncias específicas onde o ROI (Return on Investment, "bang para o seu buck") é muito bom, e outros casos em que não é. Um bom arquiteto fornece tanto valor quanto possível com o menor tempo / custo possível.

A minha observação é que realmente bons arquitetos tomar o tempo para compreender profundamente os requisitos conhecidos e usar julgamento considerável na compreensão de onde a flexibilidade futuro está prevista.

Eles também entendem a diferença entre a separação física e lógica de níveis.

Muitas vezes eu vejo um dos dois padrões:

  • Este trabalhou no último projeto assim que nós usá-lo aqui ... mesmo que as exigências são diferentes.
  • que não funcionou antes, então não vamos usá-lo ... mesmo que a razão não funcionou foi que a implmentation foi mal feito

(Se os únicos problemas de arquitetura que você precisa endereço são quantas camadas de ter em sua solução, então você é realmente sorte: -)

Eu uso Primavera -. Está tudo embutido

I inicialmente considerar a complexidade do domínio. Se complexa e nos negócios, comércio ou indústria, em vez de computador ou dados ciências, eu padrão para uma arquitetura baseada em um modelo de domínio objeto.

I próxima considerar o tamanho, criticidade, expectativas e outros requisitos não-funcionais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top