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

21 Авг 2019 в 06:58
236 +1
2
Ответы
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 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир