Как правильно использовать MVC паттерн в сетевой игре? Создаю сетевую игру на C# для конкурса. Нужно использовать MVC подход. Интересующий процесс игры: подключаемся, получаем данные от сервера для создание объектов, отрисовываем объекты, обновляем данные, отрисовываем изменения.
Сейчас при получении данных, объекты создаются в контроллере и помещаются в модель(игровые объекты храню в словаре). В контроллере также вызываю событие, что изменили модель.
Появились сомнения на счет правильности реализации MVC. Может стоит добавить метод для модели(сейчас идет прямое обращение к словарю) на добавление объектов, в этом методе также вызывать событие на обновление модели. И где тогда хранить логику с определением типа объекта при получении данных от сервера? Или вообще не стоит заморачиваться над данной темой и оставить все как есть?
ПсевдокодМодель
{
Словарь объекты;
Событие изменение;
}
Контроллер
{
ОбработчикСообщенийотСервера(Сообщение сообщение)
{
Если(сообщение.тип== Объект1)
{
модель.объекты[сообщение.ID] = создатьОбъект1(сообщение как СостояниеОбъект1);
модель.Изменение();
}
}
Объект1 создатьОбъект1(СостояниеОбъект1 состояние)
{
Объект1 объект = new Объект1();
объект.УстановитьСостояние(состояние);
вернуть объект;
}
}

21 Авг 2019 в 06:58
199 +1
1
Ответы
1

Предлагаю следующий подход для использования MVC паттерна в вашей сетевой игре:

Модель: создайте метод в модели для добавления объектов, вместо прямого обращения к словарю. Этот метод будет добавлять объекты в словарь и вызывать событие об изменении модели. Кроме того, вы можете добавить методы для обновления и удаления объектов.class Модель
{
Dictionary<int, ИгровойОбъект> объекты = new Dictionary<int, ИгровойОбъект>();
public event EventHandler Изменение;
public void ДобавитьОбъект(int id, ИгровойОбъект объект)
{
объекты[id] = объект;
Изменение?.Invoke(this, EventArgs.Empty);
}
// Методы для обновления и удаления объектов
}Контроллер: в контроллере оставьте логику определения типа объекта при получении данных от сервера. Ваш метод должен создавать объект с помощью фабрики объектов (может быть интерфейсом или базовым классом), а затем добавлять его в модель с помощью нового метода.class Контроллер
{
Модель модель;
public void ОбработчикСообщенийотСервера(Сообщение сообщение)
{
if (сообщение.тип == Объект1)
{
ИгровойОбъект объект = ФабрикаОбъектов.СоздатьОбъект(сообщение);
модель.ДобавитьОбъект(сообщение.ID, объект);
}
}
}Фабрика объектов: создайте класс или интерфейс для создания объектов различных типов на основе полученных данных от сервера.

Этот подход позволяет разделить ответственности между компонентами модели, контроллера и фабрики объектов. Модель отвечает за хранение и управление игровыми объектами, контроллер обрабатывает данные и добавляет их в модель, а фабрика объектов создает объекты на основе полученных данных.

Таким образом, вы сможете соблюсти принципы MVC и упростить структуру вашего приложения, делая его более гибким и масштабируемым.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 948 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир