Ruby est un orienté objet, mais le langage typé dynamiquement. Étant un langage dynamique, les rubis ont tendance à utiliser les réflexions et la modification dynamique du code beaucoup plus que les développeurs .net. Bien sûr, parce que c'est un langage orienté objet, vous pouvez utiliser principalement les mêmes principes que dans .net, et vous devriez aussi, mais toujours regarder autour et voir comment la même chose pourrait être mise en œuvre de manière plus dynamique. Par exemple, l'ORM ActiveRecord résout la composition en utilisant un composé de method qui ajoutera dynamiquement les champs et propriétés appropriés à votre classe. Je ne dis pas que c'est comme ça que ça doit être fait (par exemple DataMapper, qui est un autre ORM pour ruby, choisissez une approche plus "conservatrice", et ressemble donc plus à (Fluent) NHibernate), c'est juste un exemple de comment les choses peuvent être faites différemment.
Des choses comme AOP, ou DI, ne sont pas un concept étranger pour les langages dynamiques, ils sont généralement faits d'une manière alternative. Gardez un esprit ouvert sur les aspects dynamiques de la langue, mais ne les exagérez pas.
Malheureusement, 'composé_of' a été retiré d'ActiveRecord il y a environ 6 mois. Voir https://github.com/rails/rails/pull/6743 – Blackcoat