armazenamento resumo dos dados para a classe com base no ambiente (web / windows)

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

  •  22-07-2019
  •  | 
  •  

Pergunta

Eu tenho uma classe e o armazenamento de suas informações vai depender se ele está ficando consumida por uma aplicação web ou janelas. Eu estava indo para usar o padrão de fábrica para passar para fora o objeto correto. Eu acho que o chamador, então, armazenar esse objeto de forma adequada, se eu não queria ter recriar o objeto. Alguém tem outras sugestões sobre abstrair fora o armazenamento de dados baseado na plataforma?

Por exemplo, eu quero armazenar dados como variáveis ??locais quando invocado por janelas aplicativo (envio de subclasse apropriada) e, salvo em Sessão quando invocado pelo aplicativo web.

Foi útil?

Solução

Como sgreeve diz, separação de interesses é algo a ter em conta, a fim de obter o código de fácil manutenção.

Usando uma idéia repositório, o aplicativo Winform eo aplicativo Web pode injetar seu próprio provedor de armazenamento. Esses provedores poderia compartilhar alguma lógica comum, se necessário por herança ou composição.

public class MyClassRepository
{
    IStorageProvider _provider;
    public MyClassRepository(IStorageProvider provider)
    {
        _provider = provider;
    }

    public void Save(MyClass o)
    {
        _provider.Save(o);
    }

    public MyClass GetBy(string id)
    {
        return _provider.GetBy(id);
    }
}

O aplicativo WinForms invocaria armazenamento através de:

var provider = new WindowsStorageProvider();
var rep = new MyClassRepository(provider);
rep.Save(myClassObject);

e o aplicativo Web:

var provider = new WebStorageProvider();
var rep = new MyClassRepository(provider);
rep.Save(myClassObject);

Outras dicas

Ele não soa para mim como se o padrão Factory é uma solução para o problema que você tem. O padrão de fábrica se destina a fornecer uma instância de um subtipo particular de uma classe, protegendo o chamador da fábrica a partir de (a) o subtipo real que está sendo retornado, e (b) a lógica que a fábrica usado para decidir qual subtipo de voltar.

Este não é o que você precisa aqui. Acho que você precisa para abstrair o armazenamento dos dados de distância da classe que modela os dados que estão sendo armazenados.

Você tem um comum classe para duas aplicações, e cada um desses aplicativos devem implementar a funcionalidade para armazenar os dados encapsulados por sua classe em uma forma adequada para essa aplicação. Isso implica duas coisas:

  1. Cada aplicação (web e janelas formulário) deve conter funcionalidade para fazer isso é armazenar afastado de dados - mas também não precisa incluir o código usado pelo outro. por exemplo. o aplicativo Windows Forms não precisa saber como armazenar dados em uma sessão web. Assim, o código que armazena os dados em uma sessão de web deve ser em um objeto que faz parte do aplicativo da web, mas não faz parte do aplicativo Windows Forms, e vice-versa.

  2. Tendo em conta que este é o caso, e dado que a classe que é dados que você está armazenando tem de ser comum a ambos os aplicativos, que a lógica de armazenamento não pode ser parte dessa classe. (Seguindo os princípios de design OO aceitas, essa classe não deve saber como armazenar-se afastado em diferentes partes do seu aplicativo de qualquer maneira, como, que introduz dependências que fazem futuro muda difícil. Veja o Responsabilidade Individual Princípio ...)

Hope isso é útil

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