Pergunta

Eu sou um programador novato bastante que está tentando aprender o básico de arquitetura n-camadas (DAL, BLL, UI). A aplicação eu sou programação é uma camada única, a aplicação de 3 camadas escrita em VB.NET (Net 3.5). Camadas da seguinte forma:

DAL

BLL

UI

COMUM -. Contém DTO de agora

Estou tendo problemas para determinar o que passar entre o meu BLL e UI. Meu instinto me diz que eu só deve passar dados para a interface do usuário, e não o objeto de negócios total da BLL. Considere dois cenários:

1) Passe o BO diretamente de BLL para UI. Isso expõe BO métodos e permite que a interface do usuário acesso directo ao BO, o que parece ruim.

2) Passe apenas os dados pertinentes do BO para a interface do usuário. Por exemplo, um cliente tem um nome e endereço. Estes dados são realmente o que queremos mostrar / editar na interface do usuário, de modo que só voltaria esses dados para a interface do usuário em vez do BO completo. A interface do usuário, então, chamar a BLL para atualizar um BO específico.

Eu estou inclinado a usar # 2, mas eu não sei a melhor maneira de implementá-lo. A maneira que eu tê-lo programado agora, se eu só retornar dados da BLL, todas as referências a minha BO de serão perdidos eo GC vai reivindicá-los. Com base nisso, eu tenho algumas perguntas:

1) Devo negócio Mantenha objetos vivos entre chamadas para a BLL? A alternativa é re-criá-los cada vez que eu passar dados através da BLL, que parece errado.

2) Qual é a melhor maneira de manter um BO vivo em uma única arquitetura camadas (como segurar uma referência, se nós não passá-lo para a interface do usuário?)

3) Como as aplicações n-tier fazer isso? Será que eles manter o BO vivo na BLL e esperar por uma atualização a partir da interface do usuário? Isso não requer um monte de "livro de manutenção" na BLL para certificar-se de Bo são liberados quando eles não são mais necessários?

Obrigado por qualquer insight, eo perdão me se eu estou pedindo algo estúpido. Eu me ensinou o pouco de programação eu sei, para que eu possa ser uma pergunta estúpida e não sabem disso.

Foi útil?

Solução

Pet Shop como um exemplo de 3 arquitetura camada. Vou implementar tanto BLL e DAL como serviço de objeto, o que por si só não detém quaisquer estados. Uma vez que eles são apátridas, posso usar Singleton padrão e deixar que um fábrica segurá-lo para fácil referência.

Aqui estão alguns métodos CRUD exemplo você poderia ter:

FooInfo DALFactory.FooService.Retrieve(int id);
FooInfo BLLFactory.FooService.Retrieve(int id);

IList<FooInfo> DALFactory.FooService.RetrieveAll;
IList<FooInfo> BLLFactory.FooService.RetrieveAll;

FooInfo DALFactory.FooService.Create(FooInfo entity);
FooInfo BLLFactory.FooService.Create(FooInfo entity);

FooInfo DALFactory.FooService.Edit(FooInfo entity);
FooInfo BLLFactory.FooService.Edit(FooInfo entity);

void DALFactory.FooService.Delete(FooInfo entity);
void BLLFactory.FooService.Delete(FooInfo entity);

Como você pode ver em ambos os casos, você passa o mesmo objeto de entidade (aka objeto de transferência de dados) que não tem lógica alguma. Esta arquitetura permite desconectar camada UI de BLL para baixo da linha de ricos serviços de cliente e web combinação.

A intenção do método Retrieve e RetrieveAll é pegar os dados do banco de dados e enchê-lo em objeto de entidade. método Create adiciona uma nova linha no banco de dados baseado na entidade dada. Nesta arquitetura, não existe um "objeto de negócios" além BLLFactory.FooService de Business Logic Layer e o objeto de entidade FooInfo.

Em termos de tempo de vida desses objetos, o BLLFactory.FooService apátrida é criada uma vez, e será reutilizado, enquanto o aplicativo está vivo. FooInfo poderia ser criada uma vez por objeto, em seguida, persistiu na sessão ASP.NET ou algo assim.

Outras dicas

Aqui está como eu sempre fiz isso:

UI - ASP.Net ou Windows faz chamada para um serviço web
SERVIÇO - Esta é a camada de serviço que as chamadas UI
COMUM - DTO - Transferência de dados objeto a chave está no nome
BLL - Contém Business Objects e código para mapear DTOs a Business Objects e volta apenas DTOs são passados ??para a camada de serviço
DAL - Acesso a dados

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