2009年5月4日星期一

DSL

不同领域的人讲着不同的语言。这些语言中的概念有特殊的语境,包含一些特殊的概念,是对话者多年潜心钻研的结果。

在考虑系统架构时,一般原则是按领域来分解系统。不同的系统组件由不同的领域专家来负责。例如,我们把系统分成三层:UI、业务、持久。

将不同领域的内容写在一段程序里,是公认的坏事。如果你看到某段代码中既有对HttpRequest的处理,又有业务规则,还有数据库连接和SQL语句,那么有两种可能:写这段程序的人是初学者或超高手(初学者不知有更好的写法,而超高手故意为之,因为写这段代码时的情形令他做出这种选择)。

业务领域可以继续划分,在一个企业里,财务、销售、生产、仓储物流等等都是不同的领域,拥有各自的领域专家。

架构师,是那种对每个领域都懂一点的人。而他懂的那一点,恰恰是这个领域的精华。这样,他就能设计出不同的领域如何组织成一个系统。

企业的CEO,也是那种对每个领域都懂一点的人。他甚至还懂信息技术。所以他知道怎么把属于不同领域的部门组合起来,形成一个系统,去实现整体的目标。

面向对象技术的强大就在于,可以形成自定义的概念抽象。然后,我们可以有一个执行引擎,执行由这些概念所组成的指令。

Groovy/JVM是个好引擎。

if ((new PriceDifference("zn0906", "zn0907") > 108)
      && new Tendency("zn0906").isUp())
{
    new KaiCangBuyIn("zn0907");
    new Delay(ONE_SECOND);
    new KaiCangSellOut("zn0906");
}

没有仔细学过Groovy,如果能把这些new去掉就更清晰了。

没有评论: