代码之家  ›  专栏  ›  技术社区  ›  Josh Kodroff

在.NET/Java和Ruby中,域建模的主要区别是什么?

  •  1
  • Josh Kodroff  · 技术社区  · 14 年前

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

    我向我的rubyst同事(一个我非常尊敬的开发人员)展示了我一直在做的工作,他表示屏幕上的大部分文本都是Ruby所必需的,但我不明白他到底是什么意思。所以我的问题是:

    对于一个足够复杂的应用程序,一个真正需要域模型的应用程序,在像.NET/J2EE这样的强类型的enterprise-y平台上实现的域模型与在Ruby中实现的相同模型(以Ruby的方式)之间的主要区别是什么?Ruby是解决这类问题的合适工具吗?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Martin Algesten    14 年前

    在我看来,强类型vs对代码量没有多大影响。我用javascript做了很多复杂的域模型,你不能真正利用松散的类型和维护正常的代码。通常情况下,您应该保持实例字段的类型不变,有时没有对象,而在其他时间数组-苹果和梨混合只是混淆了您和其他人。

    可以 要适当。

    你的朋友可能对ruby的意思是声明类的简洁语法。ruby中的所有实例字段都是私有的,并且有一个简单的语法用于声明getter和setter、comparators等

    红宝石

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