2010-11-21 16 views
1

私は経験豊富な.NETデベロッパー(6年)です。私は実際には、ルーツを集約し、コンストラクターパラメーターにインバリアントを入れ、より多くのメソッド、少ない公共クラス、メンバーをドメインモデリング(非貧血)モデルに入れています。.NET/JavaとRubyのドメインモデリングの主な違いは何ですか?

Rubyの同僚(私は本当に尊敬している開発者)を見せていました。彼は私が取り組んできたことを示していました。彼はRubyでは画面上のテキストの多くが必要であると述べましたが、意味した。したがって、私の質問は次のとおりです。

ドメインモデルが実際に呼び出されるほど複雑なアプリケーションの場合、.NET/J2EEのような強く型付けされたエンタープライズ向けのプラットフォームで実装されるドメインモデルと、同じモデルがRubyで実装されています(The Ruby Way)? Rubyはこの種の問題に適したツールですか?

答えて

0

私の意見では、コードの量に大きな違いはありません。私はjavascriptで複雑なドメインモデルをたくさん作成しています。通常、インスタンスフィールドの型を同じに保つ必要があります。オブジェクトと配列を別々にする必要はありません。リンゴと梨を混ぜるだけで自分や他の人が混乱することがあります。

これは適切な場合がありますが、異なる引数を取る方法です。 Javascriptにメソッドオーバーロードがないので、リンゴと梨の両方を受け入れるが適切かもしれません。

あなたの友人がルビーと何を意味していたかは、クラスを宣言するための簡潔な構文です。ルビーのすべてのインスタンスフィールドはプライベートです - 比較など、短い手構文はゲッターとセッターを宣言するためにあります、コンパレータ:

ルビー

class Person 
    attr_reader :name, :age 
    attr_writer :name, :age 
    def initialize(name, age) 
    @name, @age = name, age 
    end 
    def <=>(person) # Comparison operator for sorting 
    @age <=> person.age 
    end 
    def to_s 
    "#@name (#@age)" 
    end 
end 

のJava

public class Person implements Comparable<Person> { 
    private String name; 
    private int age; 
    public Person(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 
    public int compareTo(Person other) { 
     return this.age - other.getAge(); 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public int getAge() { 
     return age; 
    } 
    public void setAge(int age) { 
     this.age = age; 
    } 
    public String toString() { 
     return name + " ("+age+")"; 
    } 
} 
+0

ので、 C#はgetters/settersでプロパティを宣言するauto-propertiesを持っていますが、フィールドを宣言するよりもそれほど長くありません。 – CodesInChaos

+0

"強く型付けされているのと比べて、私の意見では、コードの量に大きな違いはありません。同意する。私たちはそれを補うために他のコードを書くことになります。さまざまな言語間の私の本当の違いは、違いをカバーするコードを簡単に書くことができ、それが流れるかどうか、それを選び出して詮索しなければならないことです。 –

+0

Rubyでは、.NETでやっているのと同じことをやって、クライアントが特定の方法でコードを使用できるようにしますか?ルートを集約し、不変条件を供給するように強制しますコンストラクタパラメータ、ファクトリクラスなどを介して実装されています。これは(少なくとも静的型の言語では)良いドメイン設計と見なされますが、その考えがRubyに引き継がれているのか疑問に思っていました。 –

関連する問題