Projeto de um aplicativo MVVM [fechado]
-
27-10-2019 - |
Pergunta
Estou muito cético quanto ao design do meu aplicativo .....
Aqui está o diagrama para meu aplicativo
isso está certo ??ou eu preciso mudar alguma coisa ...
Vou elaborar o diagrama ....:
Biblioteca comum: contém classes ErrorCodes, Utility Classes etc
Logger: estrutura de registro
Tratamento de exceções: estrutura para tratamento de exceções
Visualização: contém: todos os diferentes XAML para visualizações como UserControls, Windows, Popups
ViewModel: contém ViewModels para as visualizações diferentes.
Modelo: contém as camadas diferentes, como ... Camada de negócios, camada de acesso a dados etc.
Camada de entidade: contém os objetos de entidade como Funcionário, Empresa, etc ...
Caixa de arquivo: especifica a leitura / gravação de um arquivo / banco de dados ....
Solução
É difícil dizer o que você está tentando fazer com sua pergunta, mas na minha opinião as camadas MVVM devem ser parecidas com esta:
Modelo : dados brutos e validação de dados brutos. Talvez um
INotifyPropertyChanged
também, mas nada maisViewModel : Lógica de negócios, acesso a dados, validação avançada com base em regras de negócios, etc
Visualizações : camada bonita da IU que permite aos usuários interagir com os ViewModels. Nada mais.
Por exemplo, um modelo pode ter uma propriedade File
, mas não deve ser responsável por mostrar a caixa de diálogo do arquivo, salvá-lo no banco de dados ou verificar se o arquivo possui uma extensão .pdf. Esse tipo de coisa é trabalho do ViewModel.
Vejo a atualização que você fez em sua pergunta. É um bom começo, mas aqui estão os problemas que tenho com ele:
-
Seus modelos devem ser objetos de dados brutos. Eles não devem conter nada mais avançado do que algo como validar o comprimento de uma propriedade.
-
Sinceramente, não recomendo separar Views, Models e ViewModels em 3 camadas separadas. Eu fiz isso uma vez e acabou sendo um pesadelo de manutenção. Agora coloquei todos os objetos relacionados juntos. Por exemplo, eu colocaria
FileModel
,FileViewModel
eFileView
juntos, eSearchModel
,SearchViewModel
eSearchView
juntos -
Eu criaria uma camada de acesso a dados que seria responsável por fazer todos os dados de leitura / gravação de / para o banco de dados (suponho que esta poderia ser sua "camada de entidade").
-
Para projetos pequenos, tendo a usar meus objetos de entidade como meus modelos, então os modelos se tornam parte da minha camada DAL, embora eu saiba que isso não é recomendado.
-
Não se esqueça, com o MVVM seus ViewModels são seu aplicativo, não suas views. O View deve refletir o que está no ViewModel, e não vice-versa.