Refactoring durchgeführt

This commit is contained in:
HuskyTeufel
2021-09-14 17:08:06 +02:00
parent 6b2ed0d5ab
commit 8eccf7c478
24 changed files with 430 additions and 57 deletions

View File

@@ -58,7 +58,7 @@ namespace DaSaSo.ViewModel
_dataService = dataService;
//LoadClient();
LoadClient();
SelectClientCommand = new RelayCommand(SelectClient, () => SelectedClient != null);
EditClientCommand = new RelayCommand(EditClient, () => SelectedClient != null);
AddNewClientCommand = new RelayCommand(AddNewClient);

View File

@@ -0,0 +1,33 @@
using DaSaSo.ViewModel.Enums;
using DaSaSo.ViewModel.Interface;
using System.Windows.Input;
namespace DaSaSo.ViewModel.Commands
{
class UpdateCurrentViewModelCommand : ICommand
{
public event EventHandler? CanExecuteChanged;
private INavigator _navigator;
private readonly IViewModelAbstractFactory _viewModelFactory;
public UpdateCurrentViewModelCommand(INavigator navigator, IViewModelAbstractFactory viewModelFactory)
{
_navigator = navigator;
_viewModelFactory = viewModelFactory;
}
public bool CanExecute(object? parameter)
{
return true;
}
public void Execute(object? parameter)
{
if(parameter is EViewType)
{
EViewType viewType = (EViewType)parameter;
_navigator.CurrentViewModel = _viewModelFactory.CreateViewModel(viewType);
}
}
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.ViewModel.Enums
{
public enum EViewType
{
Home,
Clients,
Projects,
Buildingsites,
SewerObjects
}
}

View File

@@ -0,0 +1,20 @@
using DaSaSo.Domain.Model;
using DaSaSo.EntityFramework;
using DaSaSo.EntityFramework.Services;
using DaSaSo.ViewModel.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.ViewModel.Factories
{
public class ClientListViewModelFactory : IViewModelFactory<ClientListViewModel>
{
public ClientListViewModel CreateViewModel()
{
return new ClientListViewModel(new GenericDataService<Client>(new DaSaSoDbContextFactory()));
}
}
}

View File

@@ -0,0 +1,17 @@
using DaSaSo.ViewModel.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.ViewModel.Factories
{
public class HomeViewModelFactory : IViewModelFactory<HomeViewModel>
{
public HomeViewModel CreateViewModel()
{
return new HomeViewModel();
}
}
}

View File

@@ -0,0 +1,46 @@
using DaSaSo.Domain.Model;
using DaSaSo.EntityFramework;
using DaSaSo.EntityFramework.Services;
using DaSaSo.ViewModel.Enums;
using DaSaSo.ViewModel.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.ViewModel.Factories
{
public class ViewModelAbstractFactory : IViewModelAbstractFactory
{
private IViewModelFactory<HomeViewModel> _homeViewModelFactory;
private IViewModelFactory<ClientListViewModel> _clientListViewModel;
public ViewModelAbstractFactory(IViewModelFactory<HomeViewModel> homeViewModelFactory, IViewModelFactory<ClientListViewModel> clientListViewModel)
{
_homeViewModelFactory = homeViewModelFactory;
_clientListViewModel = clientListViewModel;
}
public BaseViewModel CreateViewModel(EViewType viewType)
{
switch (viewType)
{
case EViewType.Home:
return _homeViewModelFactory.CreateViewModel();
case EViewType.Clients:
return _clientListViewModel.CreateViewModel();
/*case EViewType.Projects:
break;
case EViewType.Buildingsites:
break;
case EViewType.SewerObjects:
break;
*/
default:
throw new ArgumentException("The Viewtype dos not have a ViewModel.", "viewType");
}
}
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.ViewModel
{
public class HomeViewModel : BaseViewModel
{
public string Welcome { get => "Herzlich willkommen"; }
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace DaSaSo.ViewModel.Interface
{
public interface INavigator
{
BaseViewModel CurrentViewModel { get; set; }
ICommand UpdateViewModelCommand { get; }
}
}

View File

@@ -0,0 +1,14 @@
using DaSaSo.ViewModel.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.ViewModel.Interface
{
public interface IViewModelAbstractFactory
{
BaseViewModel CreateViewModel(EViewType viewType);
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.ViewModel.Interface
{
public interface IViewModelFactory<T> where T: BaseViewModel
{
T CreateViewModel();
}
}

View File

@@ -0,0 +1,35 @@
using DaSaSo.ViewModel.Commands;
using DaSaSo.ViewModel.Interface;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Input;
namespace DaSaSo.ViewModel.State.Navigation
{
public class Navigator : INavigator, INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
private BaseViewModel _currentViewModel;
public BaseViewModel CurrentViewModel
{
get => _currentViewModel;
set
{
_currentViewModel = value;
OnPropertyChanged();
}
}
public ICommand UpdateViewModelCommand { get; set; }
public Navigator(IViewModelAbstractFactory viewModelFactory)
{
UpdateViewModelCommand = new UpdateCurrentViewModelCommand(this, viewModelFactory);
}
protected void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}

View File

@@ -1,6 +1,9 @@
using DaSaSo.Domain.Model;
using DaSaSo.EntityFramework;
using DaSaSo.EntityFramework.Services;
using DaSaSo.ViewModel.Enums;
using DaSaSo.ViewModel.Interface;
using DaSaSo.ViewModel.State.Navigation;
using Microsoft.Toolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
@@ -18,6 +21,8 @@ namespace DaSaSo.ViewModel
private Client _selectedClient;
private Project _selectedProject;
private Buildingsite _selectedBuildingsite;
public INavigator Navigator { get; set; }
public IRelayCommand ListClientsCommand { get; set; }
public IRelayCommand ListProjectCommand { get; set; }
@@ -85,8 +90,10 @@ namespace DaSaSo.ViewModel
}
}
}
public MainWindowViewModel()
public MainWindowViewModel(INavigator navigator)
{
this.Navigator = navigator;
Navigator.UpdateViewModelCommand.Execute(EViewType.Home);
ListClientsCommand = new RelayCommand(showClients);
ListProjectCommand = new RelayCommand(listProjecte, () => SelectedClient != null);
ListBuildingsiteCommand = new RelayCommand(listBuildingsite, () => SelectedProject != null);