我们经常在设计的时候,会出现设计粒度的问题。这是一个非常难以把握的。很多时候,我们处理这个问题的时候,会有来自不同方面的意见。认为再细的理由,一般来自扩展性。而来自稍微粗一点的理由,一般都是复杂度。
在最近的讨论中,经常听到的是关于扩展性的趋向。可是我们却在慢慢地忘记了一个根本问题:需求分析!
说一个大家可能不爱听的话。大部分系统分析工程师,都是从程序员转过来的。因为大家不是专业的业务专家,所以对业务的把握能力在根本上就不是很好。面对这种情况,很多系统分析工程师在骨子里有一种倾向:用更底层的抽象解决业务的扩展性。
这点虽然不是那么容易说明,但确实是因为不知,所以设计。验证这类设计的方式,就是问他们这样设计的原因,他一开始很可能告诉你是因为扩展。你再问他,是因为甚么扩展。如果他的回答不是很清晰的扩展,那么很可惜,这里的设计,很可能是因为“不知”而造成的。
程序员出生的系统分析工程师,对很多语言的框架有着很深的了解。事实上,这些都是他们成长的必要土壤,对框架他们有很深的情感。当在业务领域不能完全把握的时候,我们往往采取脱离业务的抽象方式,来逃避问题。
比如,我们经常说某个对象的属性可能会变化。那好,我们就来个根本的设计:将对象转换成彻底的类似数据库记录的形式:可以动态改变,可以进行配置。所有属性的访问,都是通过字符型的名称来访问。类似:Fields["Name"].AsString := "新的名称"。
我并不反对数据化的设计,这些灵活性确实有很大的帮助。可是我们在作类似的设计的时候,经常性的问题就是,我们不知道那些对象,到底那些属性是变化的,变化的原因是什么,变化的影响是什么。因为不知道,所以这些问题就不分析了。事实上,这些问题,可能到最后也得不到解决。
我一直倾向于基于分析而设计。对于一个业务对象,我们只有把握住其根本的,才可能正确的把握设计的粒度。对于上面这个例子,我的建议是一个折衷原则:业务对象一些根本的属性,还是一个业务对象,但是这一个业务对象聚合一个可扩展的数据对象。
不管怎么样设计,都是可取的。问题在于设计的背后,我们到底对于业务的把握度有多少。不了解或者不完全了解的情况下,设计出来的系统不能说有什么严重后果。可是对于我们这些热衷设计的人来说,是不可以原谅的。就如面向对象理念在我们心中,都已经成为一个信念!
我曾经接触过一些宣称平台的系统,发现这些平台系统在业务处理上,也是属于“不知”的情况下设计。这类平台,与其说是平台,还不如是框架,或者是架构平台的基础框架。当我们写出真正的平台的时候,我们是必须提供基础的业务实体的,不管是基于对象模型,还是特定的平台业务模型。
总的一句话,爱好设计的我们,不能因为我们的无知,而设计出对未知的软件出来。一个笨办法,好好理解业务!增加我们对业务的把握能力,对系统,对自己都是有非常好的帮助!

不要因为不知,所以设计相关推荐

  1. 设计意念的形成-如何产生灵感,创造形象

    这次给大家每个人一个演讲机会,进行模拟训练,其它同事当客户.每个人轮流讲5-10分钟的设计案例及思路,其它同事提问,当事人回答.通过这个环节增加大家的参与性,煅练设计师的提案能力.表达能力,增进互相的 ...

  2. 写给程序猿们的交互设计

    转自 http://blog.jobbole.com/39985/ 英文原文:medium.com ,编译:36kr 编者按:看到此文时恍惚回到自己学习网页的时候,那时候只知有编程,不知有设计.各个论 ...

  3. Unity架构有点乱

    Unity架构有点乱 1,没有合理的将公共的东西归入到基类中,而是分散到子类中,有许多重复. 比如 enbled的变量本应该是所有component所共有的一个属性,应该写在component.然而却 ...

  4. rabbitmq 消息长度_Spring Boot教程(29) – RabbitMQ必备基础

    RabbitMQ是使用最广泛的开源消息队列中间件之一,它是用Erlang写的,并实现了高级消息队列协议AMQP.消息队列可以在应用间交换消息,实现解耦.异步处理.削峰.缓冲等目的,应用场景还是比较丰富 ...

  5. {电脑救助站}常用知识1 来自常用知识( 网络安全中起重大作用的 Windows 命令)

    常用知识( 网络安全中起重大作用的 Windows 命令) 常用在线查毒链接 3 楼       超级兔子的在线检测功能 4楼       准确探索间谍软件或广告软件 5楼         预防间谍软 ...

  6. 1024@程序员:图灵社区福利来了,请本人签收

    自从国庆之后,沉寂了两周的群又开始变得活跃起来. 原来是又到一年一度的程序员专属节日了--1024程序员节!怪不得~~ 点个预约,不错过↓ 江湖流传:一生二,二生三,三生程序员,程序员生万物.所以,在 ...

  7. 学习文档【超详细中文版】(小甲鱼视频)

    C:\Python33\python.exe easygui.py 第35讲(后面会提到第35讲的练习):https://blog.csdn.net/qq_41556318/article/detai ...

  8. 【Python扩展阅读EasyGui 学习文档【超详细中文版】】

    转载来源:http://www.itnose.net/detail/6107761.html 0. 安装 EasyGui 官网:http://easygui.sourceforge.net 最新版: ...

  9. java小折叠车测评_java的折叠车怎么样?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 通宵加班好无聊,再写写吧,为后来人铺个路. 网上购买回家自己整的同学参考如下: 1.牙盘和碟刹盘固定是梅花螺丝,不过都上的很紧,不需要动了一般. 2.另外 ...

  10. 05.数据的深度分析(数据挖掘、机器学习)--《数据科学概论》

    前言:基于人大的<数据科学概论>第五章,数据的深度分析(数据挖掘.机器学习).主要是机器学习与数据挖掘.具体的算法.主流工具.特征选择的内容. 文章目录 一.机器学习与数据挖掘 (1)什么 ...

最新文章

  1. Laravel安装后没有vendor文件夹
  2. 一文详解「群体机器人」中的「实体进化」到底是什么?
  3. REST 架构是什么
  4. 海康威视摄像头安装插件检测不到_海康威视摄像机常见问题解答
  5. Spring注解方式配置切面类
  6. 2017-12-04HTML布局_div布局
  7. 【SQL Server 2017】18456错误/管道的另一端无任何进程错误 解决方法
  8. Annotation之二:@Inherited注解继承情况
  9. 光是无限远服务器有道馆吗,光是无限远服务器客户端
  10. 2440启动代码分析
  11. something about Socket
  12. java框架_2020年到了,你需要掌握的9大顶级Java框架
  13. Jexl表达式引擎-根据字符串动态执行JAVA
  14. 在JavaScript面向对象编程中使用继承(4)
  15. .NET回归 HTML----表单元素(1)和一些常用的标记
  16. 左程云算法Day6 图
  17. linux上编译stm32工程,Linux下如何搭建stm32开发环境
  18. 2021-11-10全球货币市场基础知识系列3
  19. little endian c语言,c语言那些细节之little-endian和big-endian
  20. 2022Java笔记

热门文章

  1. 猿创征文|【简单】微信公众号推送教程 ·可直接下载运行 ·超详细
  2. 计算机基础知识与公文写作,公文写作与计算机基础知识
  3. idea设置java-google-style
  4. 小数点化分数的过程_小数怎么化成分数
  5. rdms系统_什么是关系数据库管理系统(RDMS)?
  6. 怎么在微信公众平台上传PPT?
  7. 每年都有几个研究生,被“爸爸”逼得跳楼
  8. 用户使用移动支付的风险与防范策略
  9. Lumen (Laravel子框架) 简介及分析
  10. 外贸软件对出口公司的作用