Question

Comme je dessine les modèles pour un domaine, ils finissent presque toujours avoir une fonctionnalité de .IsSomething sur eux. IsNew et IsDirty sont communs pour la persistance des données fins, IsValid pour la validation de règles métier, même IsFraudulent dans un projet en cours (plus de validation de règles métier), etc. Chaque fois que je vois ces mises en œuvre par d'autres, ils sont presque toujours fait afin que les méthodes. Mais je me demande s'il y a une raison particulière pour cela.

J'ai tendance à voir les propriétés comme décrivant un objet et des méthodes d'effectuer une sorte d'action. Ceux-ci ne fonctionnent pas vraiment une action. Ils impliquent le code parce qu'ils sont déterminés dynamiquement lorsqu'ils sont appelés, et ils sont en lecture seule clairement, mais pour moi, ils intègrent toujours comme des propriétés plutôt que des méthodes.

Il pourrait être un problème de sérialisation propriétés, je suppose. Bien qu'un modèle riche de domaine tend à ne pas sérialiser bien de toute façon étant donné qu'il contient la logique et la fonctionnalité, de sorte que tout le temps que je dois passer quelque chose à travers un j'aplatis généralement limite le service dans une structure définie DTO première de toute façon.

Mais je me demande si quelqu'un d'autre a une idée sur le sujet? Y at-il une bonne raison de les mettre en œuvre que les méthodes plutôt que comme des propriétés?

(qu'accessoirement, si une réponse a déjà été donnée , les propriétés d'extension pourrait vraiment aider avec cohérence quelque chose comme ça. J'ai un certain nombre de méthodes d'extension de IsSomething(), généralement sur System.String, pour la mise en œuvre logique spécifique à domaine. Mais même si les propriétés sont le chemin à parcourir, je veux rester avec des méthodes seulement pour la cohérence avec les extensions).

Était-ce utile?

La solution

J'utiliser une propriété parce que:

  1. Il décrit l'objet d'une certaine façon, de manière conceptuelle sa caractéristique, sa propriété

  2. Il ne demande pas les paramètres

  3. Il fondamentalement juste récupère certaines données, ne réalise aucune action autonomes ou modifications

Autres conseils

En supposant que l'accès à la propriété:

  • n'a pas d'effets secondaires
  • est "raisonnablement rapide" (oui, très laineux ...)

alors je ne vois aucune raison de ne pas en faire une propriété. La sérialisation ne devrait pas être un problème -. La plupart des systèmes de sérialisation fournissent des moyens de marquer une propriété comme transitoire (à savoir pas à être sérialisés)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top