专栏首页斑斓设计匠艺 | 清晰的设计意图

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

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

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

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),作者:张逸

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 美丽的架构

    美丽的架构究竟是怎样的?架构师们上下求索,孜孜以求,始终不得其解。归根结底,美丽这个词语总还是偏于感性认识,就仿佛音乐之美,绘画之美,不能以尺度来衡量,追求的其...

    张逸
  • 重新审视演进式设计

    演进式设计是一种理念,它曾经颠覆过传统笨拙的计划式设计,如今,它依旧焕发着生命力,但我们不能以静止的眼光去看待它,而应该尝试着引入一些新的方法、框架乃至技术。 ...

    张逸
  • 软件设计的风格

    ? 1 风格对于软件系统,犹如文化对于人类社会,对于组成系统的各个要素(无论模块、组件、对象还是函数),都会施加影响,只要是在运用该风格的边界范围之内。 这种...

    张逸
  • 一篇故事告诉你什么是微服务架构!

    看到最近“微服务架构”这个概念这么火,作为一个积极上进的程序猿,成小胖忍不住想要学习学习。而架构师老王(不是隔壁老王)最近刚好在做公司基础服务的微服务化研究和落...

    Java后端技术
  • 系统架构 | 设计恰如其分的架构

    远在2009年,Martin Fowler与Rebecca Parsons在QCon SF做了一次题为Agilists and Architects: Alli...

    张逸
  • QCon精彩压轴演讲:使用微服务架构改造企业核心业务系统的实践

    明天是2015QCon|北京站的最后一天,来自ThoughtWorks西安办公室的高级咨询师 - 王磊将为您带来精彩压轴分享:《使用微服务架构改造企业核心业务系...

    ThoughtWorks
  • 5G 融合计费系统架构设计与实现(一)

    随着5G商用临近,5G的各个子系统也在加紧研发调试,本人有兴全程参与5G中的融合计费系统(CCS)的设计、开发、联调工作。接下来将用几篇文章介绍我们在CCS实...

    smartguys
  • iOS经典错误Undefined symbols for architecture XXX:

    VV木公子
  • 学界 | 百度Deep Voice作者与Bengio团队探讨五大技术细节,端到端的语音合成还有多远?

    androidauthority AI 科技评论消息,今日百度研究院在官网上正式推出了 Deep Voice:实时语音合成神经网络系统(Real-Time Ne...

    AI科技评论
  • java反射注解妙用-获取所有接口说明

    最近在做项目权限,使用shiro实现restful接口权限管理,对整个项目都进行了重构。而权限管理需要用到所有的接口配置,包括接口url地址,接口唯一编...

    物流IT圈

扫码关注云+社区

领取腾讯云代金券