web-dev-qa-db-fra.com

Comment modéliser des cours qui peuvent être extensibles?

J'ai récemment hérité d'une base de code qui a un problème étrange et j'essaie de rechercher une solution extensible pouvant résoudre mon problème. Considérez que j'ai une classe modèle utilisée comme modèle pour remplir des données dans l'interface utilisateur qui ressemble à ceci.

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
}

Toutes les informations sont préservées via lesservices et l'objet de classe ci-dessus permettent de faire le travail requis.

Mais cette classe modèle sert un autre but et qui consiste à adopter des informations qui ne sont pas reçues dans le cadre de la réponse JSON et que de nouvelles propriétés sont introduites dans l'objet modèle qui sont ignorés JSON, alors envisagez dans un écran particulier dont j'ai besoin. Pour savoir si la personne est une nouvelle personne, puisque cette propriété n'est pas reçue de JSON, l'objet modèle ressemble maintenant à quelque chose comme ça

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    [JsonIgnore]
    public bool IsNewPerson { get; set; }
}

Maintenant, le problème est que cette classe devient la plus laidière, car de nouvelles propriétés sont introduites en raison des exigences et de ces propriétés ne font pas partie de la réponse JSON et ne contribuent qu'à l'interface utilisateur et donc l'attribut JSonfore.

Ma question est que ce qui est le moyen idéal de gérer un tel scénario où le modèle continue de changer? Selon l'OCP, la classe ne doit pas être modifiée à chaque fois. Comment prolonger cette classe modèle? Est-il une bonne pratique de créer une interface pour la classe modèle? Est-il bon de créer une classe de base?

Quelqu'un peut-il suggérer un bon design pour cela?

4
BoredToDeath

Une alternative consiste à ajouter comportement aux objets.

Vous avez dit que l'objet "sert un autre objectif", en plus de pouvoir communiquer les messages JSON. Ajoutez donc à la fois des "buts" (c'est-à-dire un comportement) explicitement dans l'objet au lieu d'essayer de "annoter votre issue" le problème.

Ajouter toApiMessage() et l'autre "but" comme méthodes explicites. L'ajout de tout le comportement dans l'objet est le seul moyen de le rendre maintenu. C'est-à-dire de pouvoir modifier les "données" et le "comportement" influence en une seule place.

C'est également coïntement de la manière orientée objet.

0
Robert Bräutigam