Я работаю над клиент-серверной игрой (C # .NET), где я не хочу доверять клиенту хранение моего кода приложения на стороне сервера, но хочу делиться объектами.
Например, представьте, что у вас есть слот для правой руки и рюкзак, который может нести дополнительные предметы. Теперь есть много серверного кода, который будет контролировать, какие элементы могут идти, в какие слоты и когда вы поворачиваете правую руку, что происходит. Я не хочу помещать этот код в мой клиент по разным причинам, но я часто нахожу, что если я создаю класс на стороне клиента и класс на стороне сервера для каждого из них, я вижу много дублирования в данных и некоторое дублирование в методах. Я также должен преобразовать один класс в другой.
Другой пример - Для предметов в игре. У предметов есть способности «Использовать» (например, «Использовать ключ» или «Использовать факел») и такие свойства, как «Имя» и «Вес». Поэтому, когда я создаю Класс Предмета, я бы предпочел сделать 1 класс следующим образом:
Public Class Item
{
int Weight;
string Name;
void Use() { //Do something interesting but not public to the client }
}
В конечном итоге копии этого объекта сериализуются и отправляются клиенту или серверу друг от друга по мере внесения изменений. Если частичный класс мог бы охватывать проекты, это было бы очень многообещающе (для плохого они этого не делают). Я не думаю, что подклассы чувствуются прямо здесь (например, ServerItem : Item
), рассматривая сериализацию / десериализацию. Я поэкспериментирую с методами Extension и посмотрю, какие последствия это имеет для подкласса, но если у кого-то есть какие-то идеи или я просто упускаю что-то очевидное, пожалуйста, дайте мне знать.