Как реализовать простой в использовании и масштабируемый шаблон?
В настоящее время я работаю над более крупным проектом WinForms. Раньше я программировал небольшие приложения с помощью WinForms, которые имели максимум ~20 различных окон.
Теперь я стою перед большим проектом и хочу адаптироваться к нему, переосмыслив свой подход к нему.
Я читал о MVVM и MVC и некоторых вариациях.
Кстати о вариациях: Я нашел так много вариантов, что понятия не имею, из какой реализации они возникли.
Моя идея заключается в том, что он имеет:
-возможность простого масштабирования
-четкое разделение проблем (SoC)
-интуитивно понятный способ использования
Некоторые побочные замечания по этому проекту:
-Навигация с помощью горячих клавиш (каждый вид может иметь несколько горячих клавиш для перехода к другим видам)
-Требуется быстрое время отклика (клиент не любит ждать завершения запроса дольше 1 секунды.)
Ниже вы увидите мое текущее представление о том, как использовать шаблон.
Я очень благодарен за критику и/или советы по этому поводу.
Кроме того, я был бы очень благодарен услышать ваши предложения о том, как использовать этот шаблон и если есть какие-либо ловушки, как их избежать.
Заранее спасибо :)
Что я уже пробовал:
До сих пор я разработал следующий шаблон в качестве подхода:
Занятия:
Смотреть
void SetViewModel(ViewModel viewmodel); void Clear();
Мысли:
Представление должно принимать только класс ViewModel для отображения.
Вся логика в представлении предназначена для регистрации ключевых событий, нажатий кнопок и т. д.
Если что-то подобное происходит, то запускается событие или команда перенаправляется на контроллер.
Контроллер
void AddView(View view); void RemoveView(View view); void SetModel(Model model); void SetViewModel(ViewModel viewmodel);
Мысли:
Мой контроллер будет содержать всю логику принятия решений. (пример: если нажать кнопку X на вид - открыть новый вид)
Он будет принимать представления (одно или несколько) и обновлять каждое представление.
модель представления
event PropertyChangedEventHandler PropertyChanged; T Get<T>(string property); void Set<T>(string property, T value);
Модель
event PropertyChangedEventHandler PropertyChanged; T Get<T>(string property); void Set<T>(string property, T value);
Мысли:
Модель и ViewModel почти одинаковы.
Они содержат значения объекта и события пожара при изменении свойства.
Конвертер<TVM, TM>
TM ConvertToModel(TVM viewmodel); TVM ConvertToViewModel(TM model);
Мысли:
Мой преобразователей будет отвечать на конвертировании моделей из модели представления в модель и обратно. Они должны будут обрабатывать соответствующие представлению преобразования и форматирование конкретных вещей.
Вывод:
Я не уверен, как заранее определить ловушки реализации и возможные ошибочные варианты дизайна, и мне нужны некоторые рекомендации о том, как подойти к большому проекту с четким шаблоном, чтобы следовать ему.