设计匠艺 | 清晰的设计意图

如果你不能清晰地表达设计意图,追求简单无疑就是一个笑话。语言的纠缠不清,实则暴露了你思想的混乱,就像行走在陌生城市的异乡人,城市地图成了他唯一的指路明灯。糟糕的是,地图用唯一的色彩试图简单阐明简单的本质,却因为缺乏清晰的层次感让人变得无所适从。当然,还有一个重要的原因,城市本身是一种混乱的复杂。

不能简单地阐述设计意图,就有他人无法理解系统的危险。架构最好是不言自明的,至少,也是能够用语言表达清楚的。正如爱因斯坦所说:“如果你不能向一个六岁小孩解释某件事,那么你自己就没有真正理解它。”架构是团队知识传递(分享)的重要部分。聪明的做法是在架构过程中选择遵守一种设计原则,并运用一种或多种一致的模式或风格。

Ruby On Rails之所以能够得到普遍流行,正是基于这一原因。它的整个设计意图可以由“惯例优于配置”原则和MVC模式来阐释。

Rails的目的很单一,就是基于MVC模式打造一个敏捷的Web框架。Model、View与Controller之间的关系其实暗含了一种契约,并且这种契约关系是相对不变的。不变的内容总是可以通过某种方式在架构中固定下来。传统的设计方式是运用接口来稳定架构,前提是我们需要寻找到不变的契约是可以抽象的,然后再将扩展交给实现类。

Java多线程编程中的Runnable接口的设计体现了这一点。而在函数式编程语言中,这种不变性则透过基本的函数来体现,再以组合子的方式满足变化的需求。

Rails是另一种钳制变化的方式,它将契约视为一种惯例,以运行时的动态组装取代静态的配置。表面上施加了约束,限制了灵活,事实上这种牺牲换来的是无与伦比的简单之美。

UNIX的设计意图是一种哲学,即“Keep It Simple Stupid”,正是遵循了这一设计意图,UNIX才取得了成功。

你的设计意图清晰吗?

虽然Spring是Rod Johnson在几个商业项目中运用J2EE时,逐步演化出来的框架,但它的设计意图在整个演化过程中却始终如一地坚持:摒弃EJB的笨拙,转而以轻量级的框架与容器。

Datomic数据库的架构意图极为清晰,就是要创建一个不可变的数据库。“Datomic将数据库视为信息系统,而信息是一组事实(facts),事实是指一些已经发生的事情。鉴于任何人都无法改变过去,这也意味着数据库将累积这些事实,而非原地进行更新。虽然过去可以遗忘,但却是不能改变的。因此,如果某些人“修改了”他们的地址,Datomic会存储他们拥有新地址这个事实,而非替换掉老的事实(它只是在这个时间点被简单的回收了)。这个不变性(immutability)带来了很多重要的架构优势和机会。”

意图是一种导向,在架构层面,意图体现为根据架构目标遵循设计原则做出的架构决策。

原文发布于微信公众号 - 逸言(YiYan_OneWord)

原文发表时间:2014-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序你好

Java程序员必读的10本书籍

994
来自专栏我是攻城师

亚马逊工程师论各种编程语言的优缺点

3928
来自专栏风口上的猪的文章

终于,我也要出一本C#的书了 - 我的写作历程与C#书单推荐

我于2012年3月开始工作,到现在马上就满六年了。这六年里,我从一个连Sql server是什么都不知道,只会写最简单的c#的程序员开始做起,一步一步从一个籍籍...

664
来自专栏斑斓

架构模式的圣经

在模式领域里,有一部伟大著作给予软件设计领域带来的影响非常大,那就是以德国人Frank Buschmann为主要贡献者的《面向模式的软件架构》(Pattern-...

3206
来自专栏恰同学骚年

【转】我的技术学习方法 — Anytao

  关于这个问题,也有不少刚刚入行的朋友向我问起。我想可能一千个人就有一千个答案,我不能保证自己的想法适合于所有的人,但是这确实是我自己的体会和经历,希望能给你...

432
来自专栏新智元

功成身退:Yoshua Bengio宣布即将终止Theano的开发和维护

【新智元导读】今天,Theano的开发与维护者之一 Pascal Lamblin 贴出了一封邮件:Yoshua Bengio 宣布在发布Theano 1.0版本...

2538
来自专栏我是攻城师

C#系列之编程语言好坏撕逼大战

3497
来自专栏java工会

学java就两个问题

1638
来自专栏哲学驱动设计

《Framework Design Guidelines 2nd Edition》推荐

前言     最近看了《FDG 2nd Edition》,也适当做了些笔记,在这里写这篇文章的目的主要有两个,一是对自己学习的一个记录、积累;另外,还可以用这...

17410
来自专栏BestSDK

C++是程序界的“屠龙刀”,但是握刀的人经常用成“杀猪刀”

C++的初衷 1)早期C++许多的工作是对于C的强化和净化,并把完全兼容C作为强制性要求。C89、C99中许多的改进正是从C++中所引进。可见,Stroustr...

2774

扫描关注云+社区