Je travaille sur un jeu client/serveur (C# .NET) où je ne veux pas faire confiance au client mon code d'application côté serveur, mais je veux partager des objets. Par exemple, imaginez que vous ayez une fente pour arme à droite et un sac à dos pour transporter des objets supplémentaires. Maintenant, il y a beaucoup de code côté serveur qui contrôlera quels éléments peuvent aller dans quels emplacements et quand vous balancez votre main droite ce qui se passe. Je ne veux pas mettre ce code dans mon client pour diverses raisons, mais je trouve souvent que si je génère une classe côté client et une classe côté serveur pour chacun d'entre eux, je vois beaucoup de duplication dans les données et une certaine duplication dans les méthodes. Je dois aussi convertir 1 classe en l'autre.Essayer de séparer du code dans un modèle de serveur client où le client n'est pas fiable et avec une duplication minimale
Un autre exemple est pour les objets dans le jeu. Les objets ont des capacités 'Utiliser' (comme Utiliser une touche, ou Utiliser une torche) et des propriétés comme Nom et Poids. Alors, quand je crée la classe Item Je préfère faire 1 classe comme ceci:
Public Class Item
{
int Weight;
string Name;
void Use() { //Do something interesting but not public to the client }
}
Finalement, des copies de cet objet sont sérialisés et envoyés au client ou serveur de l'autre que des modifications sont apportées. Si une classe partielle pouvait couvrir des projets qui seraient très prometteurs (au pire, ils ne le font pas). Je ne pense pas que le sous-classement se sent ici (comme ServerItem : Item
) compte tenu de la sérialisation/désérialisation. Je vais en jouer avec les méthodes d'extension et voir quelles sont les implications pour le sous-classement, mais si quelqu'un a des idées ou si je manque quelque chose d'évident s'il vous plaît faites le moi savoir.
Pourquoi ne pas simplement hériter article? – jgauffin
Vous avez dit que vous vouliez sérialiser les objets entre le client et le serveur –
Le seul blocage sur celui-ci est de référencer le composant "Données" vous devez aller au niveau supérieur ou ajouter un groupe d'accesseurs. Par exemple. Je dois dire currentServerItem.Item.Weight au lieu de currentServerItem.Weight. C'est une bonne solution à coup sûr, mais j'espérais un moyen d'éviter la construction d'accesseurs ou de faire Serveritem.Item.Properties. Une autre approche que je testais était d'avoir une classe ItemManager dans laquelle vous passiez l'item aux méthodes ... Comme ItemManager.Use (myItem). – deepee1