私は新しい Ruby ですが、長年 .net 開発者でした。いくつかのモデル内でコンポジションを実装して、それらが可能な限り疎結合であることを確認したいのですが、どこから始めればよいのか、またはこれが本当に必要なのかどうか、まだ .net 開発者のように考えています。
どこから始めればよいか、誰かが私にいくつかの指針を教えてもらえますか。
乾杯コリン G
私は新しい Ruby ですが、長年 .net 開発者でした。いくつかのモデル内でコンポジションを実装して、それらが可能な限り疎結合であることを確認したいのですが、どこから始めればよいのか、またはこれが本当に必要なのかどうか、まだ .net 開発者のように考えています。
どこから始めればよいか、誰かが私にいくつかの指針を教えてもらえますか。
乾杯コリン G
こういうことですか?
クラス エンジン attr_reader :馬力、:リットル 終わり クラスギアボックス attr_reader :manufacturer、:model_no 終わり クラスカー def initialize(エンジン、ギアボックス) !engine.kind_of(Engine) の場合、「無効なエンジン オブジェクト」を発生させます !gearbox.kind_of(Gearbox) の場合、「無効なギアボックス オブジェクト」を発生させます @engine = エンジン @ギアボックス = ギアボックス 終わり 終わり car = Car.new(Engine.new, Gearbox.new)
Ruby はオブジェクト指向ですが、動的に型付けされる言語です。動的言語であるため、ルビストは .net 開発者よりもリフレクションとコードの動的変更を使用する傾向があります。もちろん、これはオブジェクト指向言語であるため、.net とほとんど同じ原則を使用できますが、同じことをより動的な方法で実装する方法を常に調べてください。
たとえば、ActiveRecord ORMは、適切なフィールドとプロパティをクラスに動的に追加する composer_ofメソッドを使用して合成を解決します。これがそうあるべきだと言っているのではありません (たとえば、Ruby の別の ORM である DataMapper は、より「保守的な」アプローチを選択するため、(Fluent)NHibernate に似ています)、これは単なる例です。物事がどのように異なる方法で行われるか。
AOP や DI などは、動的言語にとって異質な概念ではなく、通常は別の方法で行われます。言語の動的な側面に心を開いてください。ただし、無理をしないでください。