2009-04-09 11 views
0

En suivant le principe SRP et KISS, j'ai conçu un objet avec des propriétés uniquement, mais j'ai besoin de méthodes pour travailler avec les objets. Quelle est la meilleure façon de séparer les données d'objet d'entité et les méthodes d'objet d'ensemble d'entité?Séparer les méthodes objet des données objet

Actuellement, je crée les objets suivants:

objet Pet entité
Attribut Nom
Attribut Âge

Pet entité Set objet
Liste des objets pour animaux

Pet objet Engine
Méthode LoadPets of Pet Entity Set
Méthode GetPetByName de Entité d'animal familier
Méthode GetPetsByAge de Pet Entity Set

Est-ce la meilleure façon de concevoir les objets?

Je développe en .net

Merci.

Répondre

6

Vous avez implémenté l'anti-modèle Anemic Domain Model. Les classes devraient implémenter les méthodes dont elles ont besoin, qui ne cassent pas la SRP, mais la SRP IMHO est largement surévaluée.

4

L'idée générale est de garder les méthodes proches des données sur lesquelles elles opèrent. La construction qui combine les données et les opérations est connue sous le nom de classe. Sérieusement, pourquoi pensez-vous que c'est une bonne idée de séparer les données des opérations? C'est la direction opposée à celle où nous allons depuis des décennies!

+0

erm, google ne le pense pas ... http://golang.org/ –

0

Utilisez un langage fonctionnel prenant en charge la correspondance de modèle. Puisque vous êtes sur .net, F # est le choix évident.

Ceci fonctionne bien pour les systèmes orientés messages où vous avez principalement des nœuds sans état qui transforment des messages puis transmettent des messages à d'autres nœuds. Dans ces scénarios, vous ne vous souciez pas de la mutation des données dans le message ni de l'identité du message; vous vous souciez d'avancer le traitement dans chaque nœud et d'envoyer plus de messages. Vous ne faites pas de conception orientée objet, et les langages orientés objet ne supportent pas bien ce paradigme - ils lient un sac mutable de données à un objet avec identité, plutôt que de créer un système réactif de transformateurs de messages.

En effet, cela nécessite de prendre le dual du système - les messages dans un système réactif correspondent à la méthode et aux arguments dans les systèmes orientés objet. En gros, l'état qui se trouve dans les champs des objets d'un programme OO est conservé dans la pile d'appel d'un programme réactif, et l'état qui est la pile d'appel du programme OO est conservé dans les champs des messages du programme réactif .

Questions connexes