2010-05-07 8 views
0

Je veux implémenter le concept d'un espace de travail. C'est un concept global - tout autre code interagira avec une instance de cet espace de travail. L'espace de travail sera responsable du maintien de l'état actuel du système (interaction avec le système, persistance de l'état du système, etc.)Dans Ruby, comment implémenter un comportement global?

Quelle est la meilleure stratégie de conception pour mon espace de travail, sachant que cela devra être testable (en utilisant RSpec maintenant, mais heureux de regarder des alternatives).

Après avoir lu quelques projets open source là-bas et j'ai vu 3 stratégies. Aucun de ceux que je peux identifier comme "la meilleure pratique".

Ils sont:

  1. Inclure la classe singleton. Mais comment est-ce testable? L'état global de Workspace changera-t-il entre les tests?
  2. Implémenter tous les comportements en tant que méthodes de classe. Encore une fois, comment testez-vous cela?
  3. Implémenté tout comportement en tant que méthodes de module. Pas sûr du tout!

Lequel est le meilleur? Ou y a-t-il un autre moyen?

Merci, Gordon

Modifier

Comme je l'ai commencé à inclure le module « singleton » dans tout mon code et je j'ai réalisé à quel point étroitement couplé avais fait mon code, avec des références à ces mondiale instances partout.

J'ai donc commencé à les supprimer entièrement et à passer des références aux instances globales à la place. Mais maintenant je suis sur la route du CIO - en passant les dépendances à travers mes constructeurs.

Est-ce une bonne idée dans Ruby? Ou est-ce que je manque quelque chose?

BTW vous pouvez avoir compris je suis nouveau à Ruby!

Répondre

0

Peut-être que le Singleton module de la bibliothèque standard serait utile? Si vous incluez ce module dans votre classe, une seule instance peut être créée. Vous pouvez ensuite utiliser des variables d'instance pour gérer l'état de votre espace de travail, etc.

Si c'était ce que vous vouliez dire par "Inclure la classe singleton", alors je suis désolé, mais le terme "singleton" est jeté autour d'un peu en terre rubis, habituellement au this context.

+0

Ouais! J'ai essayé de ne pas utiliser le terme du tout! Mais hélas ... Cheers! –

0

L'approche singleton est le meilleur choix, la performance sage. Pour ne pas changer pendant les tests, vous pouvez utiliser une maquette.

+0

Oui mais comment testez-vous le singleton? –