Pergunta

Eu tenho tentado envolver minha cabeça em torno de como expor meus objetos de domínio para o cliente. Se eu estou usando um cliente rico ou eu estou usando a web, eu quero usar o MVP e padrões de repositório.

O que eu estou tentando envolver minha cabeça em torno é como eu expor meu repositório e modelo, que será no servidor. É mesmo possível para expor objetos de negócios complexos que têm estado através de um serviço web, ou terei de usar uma tecnologia proprietária que não é uma linguagem / plataforma agnóstica, como Remoting, EJB, COM +, DCOM, etc?

Algumas outras restrições são que eu não quero ter que continuar a carregar o objeto de domínio complexo do banco de dados ou passá-la por todo o fio cada vez que eu quero fazer uma operação. Alguns lógica complexa pode ser que certas áreas da tela pode ser desativado ou invisível com base nas permissões de usuários em combinação com o estado do objeto. Validação e informações mensagem de erro também terá de ser exibida para o usuário. Eu quero ser capaz de logicamente chamar um monte de minhas operações objeto de domínio como se estivesse rodando na mesma máquina.

Com a web, você tem as rédeas. Você não tem que expor seus objetos através de limites de serviço, para que possa torná-los um rico como você gostaria. Eu estou tentando criar uma arquitetura N-teir que é rica e funciona quando o cliente chamando o modelo está em uma máquina diferente.

Foi útil?

Solução

Você pode expor seus objetos de domínio como qualquer outro objeto através de serviços REST ou web. Acho chave é entender que você terá para expor serviços que proporcionam valor de negócios em uma única chamada, e estes não necessariamente mapa 1: 1 para seus repositórios. Então, enquanto você no servidor pode esperar uma única chamada de serviço para usar múltiplos repositórios e executar várias agregações, as coisas que você expor sobre qualquer tipo de web-service deve ser resultados mais ou menos completa. As operações que expõem sobre o serviço não deve expor repositórios individuais, mas sim se concentrar em operações significativas que fornecem um determinado valor do negócio.

Espero que isso ajude um pouco.

Outras dicas

Você pode usar um formater SOAP para Remoting, mas o serviço, resultando, provavelmente, será difícil a consumir como um serviço, e vai surly ser muito falador.

Se você quiser que o seu modelo de domínio a ser consumido como um serviço, ele deve ser concebido como um serviço.

Como se afirma no domínio driven design, um serviço é apátrida, por isso não irá expor seus objetos diretamente. Seu serviço deve expor métodos que fornece as operações de negócios significativos que serão executados como uma única unidade.

Normalmente consideram que o modelo em seu cliente está em um contexto limitado diferente, porque as suas preocupações será um pouco diferente daquele no servidor.

O que eu estou tentando envolver minha cabeça em torno É assim que eu expor meu repositório e modelo, que será no servidor. É que é mesmo possível para expor complexo objetos de negócios que têm estado por meio de um serviço web, ou eu vou ter que usar um tecnologia proprietária que não é agnóstico idioma / plataforma, como .Net comunicação remota, EJB, COM +, DCOM, etc?

Um modelo de domínio bom vai ser altamente comportamental e projetado em torno do domínio do problema (e suas discussões com especialistas de domínio), eu, portanto, argumentar contra projetá-lo para ser exposto aos consumidores remotos (da mesma forma que a concepção de que a partir do banco de dados ou GUI primeiro é uma má idéia).

Em vez disso eu olhar para usando um estilo como RESTO ou mensagens e decidir sobre a interface que você deseja expor e, em seguida, mapear de / para o domínio. Então, se você foi com RESTO você projetar seus recursos e API (URL, representações, etc) e, em seguida, você precisa cumpri-lo a partir do modelo de domínio.

Se isso se torna un-natural, então você sempre pode ter vários modelos, por exemplo, o mapeamento de um modelo de apresentação específica somente leitura separada para o mesmo fonte de dados (ou que envolve o complexo modelo de domínio comportamental) é uma abordagem que eu tenho usados ??várias vezes.

Algumas outras restrições são que eu não quero ter que manter o carregamento do objecto de domínio do complexo banco de dados ou passá-lo em todo o fio cada vez que eu quero fazer uma operação

Olhe para o cache em HTTP e apoiar múltiplas representações para um recurso, também olhar para o cache dentro de sua solução de acesso a dados.

Validação e mensagem de erro informações também terá de ser exibida para o usuário. eu quero ser capazes de logicamente chamar um monte de minha operações objecto de domínio, como se fosse rodando na mesma máquina.

Você pode representar este como um recurso ou, mais provavelmente olhada HTTP códigos de status e os corpos de resposta que você gostaria de usar nessas situações.

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