Pergunta

Tenho notado ao longo dos anos que diferentes desenvolvedores têm critérios diferentes para o que constitui um nível no desenvolvimento de um sistema n-tier então eu estava curioso sobre o que o consenso é aqui no stackoverflow.

É camadas lógicas separadas suficiente para chamá-lo de uma camada separada ou faz isso tem que ser implementável em um servidor separado (física ou virtual), a fim de chamá-lo de uma camada separada?

Deixe-me frase a questão um pouco diferente. Se o mecanismo de chamar só pode estar em processo, segmento local, ou apartamento local, então é possível a reivindicação de que é dois níveis diferentes, dependendo de como as classes são organizadas em bibliotecas ou pacotes?

Foi útil?

Solução

Para mim, meios camadas físicas parte do sistema, concebido para ser executado na máquina física diferente. Sim, você pode apontar a cadeia de ligação db para outro servidor, a qualquer momento, mas se o seu DAL é muito falador, tem n + 1 e conjunto de registros unbounded problemas, do que a latência da rede irá matá-lo muito rápido.

camada lógico, por outro lado, suporta virtudes de separação de preocupações, de coesão e de acoplamento. Estritamente ele mesmo não tem que estar em assembly separado - namespace irá fazer o truque. Só não chamar classes que você sabe que não deveria, NDepend ajudá-lo.

Outras dicas

A camada de lógica separada é o suficiente para eu chamá-lo de um nível. Não tem necessariamente de estar em um servidor separado, mas a separação definida de outras camadas certamente torna possível.

Como exemplo estamos habituados a ter o que eu chamaria um sistema de 3 camadas (páginas db, dll, ASP) em execução em um único servidor. Por algumas definições este é um único sistema de níveis. Temos agora o banco de dados rodando em um servidor separado, a única alteração necessária foi uma seqüência de conexão, mas agora isso seria uma solução de dois níveis?

É por isso que eu sinto o conceito de uma camada é mais sobre a capacidade de executá-los em máquinas separadas ao invés de ter que realmente. Parece apenas mais consistente para mim.

Os conceitos de camada e camadas são muitas vezes utilizados alternadamente. Contudo, um ponto bastante comum de vista é que há de fato uma diferença, e que uma camada é uma estruturação lógica mecanismo para os elementos que fazem -se a solução de software, enquanto uma camada é um mecanismo de estruturação física para a infra-estrutura do sistema

Ref .

As camadas são um mecanismo para minimizar o acoplamento; eles são lógicos. Tiers são projetados para maximizar os riscos de desempenho ou segurança negate; eles são físicos. Eles realmente não são eles mesmo e eu não sei por que as pessoas tentam utilizá-los alternadamente.

A grande maioria das aplicações web são 3 níveis por padrão (navegador, servidor web, servidor de banco de dados). A maioria dos aplicativos de intranet são 2-tier (cliente, servidor db). Mas em ambos os casos I construir uma camada de interface do usuário, uma camada de negócios, e uma camada de dados. Eles têm separação de interesses e me ajude a estruturar meu código para manutenção. Também em ambos os casos I geralmente acabam implantá-los todos em uma caixa; servidor web ou estação de trabalho cliente. Assim, as camadas e as camadas nem sequer igualar-se.

Eu sempre acreditei uma camada é qualquer separação física em uma arquitetura, ou seja, uma máquina. Descobri que esses caras acho que o mesmo ultimamente, é um livro muito bom.

Mas, pensando bem depois de ler as outras respostas Eu concordo com o Garry em que .

Gostaria de concordar com Garry Shutler mas acrescentam que muitas camadas também podem existir em um único processo / thread ou mesmo a mesma montagem. mais importante do que o físico (hardware, isolamento executável, ou isolamento binário) a separação é o layout do código para o desenvolvedor (IMHO). como na com um aplicativo aspnet: a mesma dll poderia ter todos os três níveis em que: os dados de acesso, domínio e apresentação

.

Eu teria que dizer que as definições precisam ser martelado. Eu normalmente pensar em uma camada como uma separação lógica de funcionalidade e responsabilidade e uma camada como a exigência ou a capacidade para uma separação física. Algumas camadas podem ter várias camadas e algumas camadas pode abranger camadas. I tipicamente utilizar uma camada de camada de serviço que tem a capacidade de proporcionar a separação física, se necessário e / ou desejado por meio de configuração.

Assim, acompanhamento pergunta / comentário. Se houver um monte de lógica (de negócios ou de outra forma) em procedimentos armazenados em seu banco de dados, isso deve ser considerado um nível bem? E se você está utilizando recursos do seu motor de banco de dados como Service Broker para Microsoft SQL Server? Isso pode ser visto como tendo duas camadas em si.

Além disso, serviços de fundo e / ou daemons, eles são uma camada separada e / ou camada ou eles pertencem a um já existente?

Olhe para a história do termo "tier" em computação. Ninguém disse 1-tier computação em desktops / minis / mainframes. Ninguém disse 2-tier computação durante os dias de cliente-servidor. 3-tier se tornou o apelido de arquitectura para cliente-servidor mais middleware entre (middleware orientado a mensagem e corretores de transação). Eu acho que n-tier foi popularizado juntamente com outro termo "EAI - ou Enterprise Integration Architecture". Foi precisamente a mesma idéia que arquiteturas orientadas a serviços, exceto a maioria das implementações de fornecedores eram ou proprietária, baseada em padrões, mas muito caro, ou ambos. Depois de XML-RPC, SOAP e resto vem junto que eles chamam de "Web Services" e, em seguida, aplicar o princípio EAI por trás dele e chegar a SOA - Service Oriented Architecture and Enterprise Service Bus.

Meu ponto é que nenhum desses termos implícitos qualquer separação física ... foi sempre sobre a separação lógica de funcionalidade. Aconteceu então que muitas dessas camadas de aplicação lógicas foram projetados para ser apátrida, para que pudessem ser fisicamente separados para fins de escalabilidade horizontal.

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