.NET / Java中的域建模与Ruby相比有哪些主要区别?

时间:2010-11-21 18:35:18

标签: .net ruby domain-driven-design

我是一位经验丰富的.NET开发人员(6年),我真正进入(非贫血)领域建模:聚合根,在构造函数参数中放置不变量,更多方法,更少公共类和成员。

我正在向我的Rubyist同事(我非常尊重的开发人员)展示我一直在做的事情,他表示屏幕上的大部分文字在Ruby中是必要的,但我并不完全明白他的意思。所以我的问题是:

对于足够复杂以至于真正需要域模型的应用程序,在强类型的企业级平台(如.NET / J2EE)中实现的域模型与在Ruby中实现的相同模型之间的主要区别是什么?在红宝石方式)? Ruby是一个非常适合这类问题的工具吗?

1 个答案:

答案 0 :(得分:0)

强烈打字vs在我看来,并没有对代码量产生太大影响。我在javascript中做了很多复杂的域模型,你无法真正利用松散的输入和维护合理的代码。通常你应该保持一个实例字段的类型相同,有时候没有对象和其他时间的数组 - 混合苹果和梨只会让你自己和其他人混淆。

可能适当的一次是采用不同论点的方法。 Javascript没有方法重载,所以接受苹果和梨可能是合适的。

你的朋友对ruby的意思是用于声明类的简洁语法。 ruby中的所有实例字段都是私有的 - 并且有一个用于声明getter和setter,比较器等的简短语法。比较:

<强>红宝石

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

<强>爪哇

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+")";
    }
}