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

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

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

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 条评论
登录 后参与评论

相关文章

来自专栏日常学python

【推荐】Python教父-廖雪峰 官方『Python爬虫+数据分析』课程

爬虫技术五花八门,市面上比比皆是,但是真正能做到极致的寥寥无几,特别是能达到商业爬虫级别的几乎没有。

2862
来自专栏腾讯开源的专栏

【开源公告】腾讯生物认证平台Soter正式开源

腾讯生物认证平台Soter TENCENT SOTER是腾讯于2015年开始制定的生物认证平台与标准,通过与厂商合作,目前已经在一百余款、2.3亿部And...

3444
来自专栏WeTest质量开放平台团队的专栏

数风流人物之《游龙英雄》--说说如何脱颖而出

在2014年的腾讯游戏嘉年华盛会上,由银汉游戏开发,腾讯游戏独家代理的横板格斗手游大作《游龙英雄》重磅首发,并在之后一发不可收拾,一跃成为一代动作类手游的巅峰之...

913
来自专栏Java技术

“杀”一个程序员不需要用枪,改三次需求就可以了!

在很多软件公司,特别是一些创业型的团队中,对于这样的情景可能大家都很熟悉:项目经理或者产品经理(产品狗)口头或者简单记录一下软件产品的大致要做的功能,直接就让研...

431
来自专栏镁客网

Android N的新特性以及优化功能大盘点

1604
来自专栏BeJavaGod

前端这条路怎么走,作为一名后端er,说说我的见解

近期都游荡在各大群里看大家的讨论,经常看到关于程序员生涯的一些讨论,颇有感触,最近的国庆的确过得有些堕落,都没怎么更新,仔细相信还是应该分享点经验给大家的!想必...

3255
来自专栏Android群英传

他山之石,可以攻玉

691
来自专栏服务端技术杂谈

要成为一个 Java 架构师得学习哪些知识?

既然java架构师, 首先你要是一个高级java攻城尸, 熟练使用各种框架,并知道它们实现的原理。 jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;...

2656
来自专栏程序员互动联盟

学习哪种语言最容易找到工作?

在当前编程语言语言变化极大今天,让很多还没入门的小白傻眼了,到底选择哪种语言才能更好的就业,选择哪个语言更好的就业,都说Java是第一入门语言是真的嘛?既然这么...

3467
来自专栏Java学习网

每一个程序员都应当了解的11句话

每一个程序员都应当了解的11句话   1.技术只是解决问题的选择,而不是解决问题的根本   我们可以因为掌握了最新的JavaScript框架ahem、Angul...

2108

扫码关注云+社区