架构师:我们需要顶层设计

架构师:我们需要顶层设计
背景:

某公司,建立的程序又被推倒,外人觉得很奇怪,这个程序的主管非常敬业,关注到了程序每一个细节,甚至包括每一个按钮的文字和位置。
这个主管很委屈,他说,他完全是按照客户需求制作的,客户怎么说的,他就怎么做了,难道有错?!
但是,这个程序还是被推倒了,当然也有其公司派系斗争的因素在里面。但是,不得不引起我们的注意,这个程序败就败在了太拘泥于细节,而忽略了顶层设计被客户牵着鼻子走,想知道客户自己说什么吗?
|
|
|
|
客户说:<我说的就一定对吗?>
顶层设计——规划。
当提到这个词的时候,很多程序员很不屑,规划?不就是需求吗?和架构设计有啥区别?就写写PPT有那么重要吗?
我们说一个好的程序开发的设计应该包含如下层次,如下图所示:
一、设计分为三个层次
1、第一层次,信息系统规划(项目或产品规划)

我们称之为规划,这个层次是对整个系统在宏观中的地位的把握。如果从一个大型企业的高度看,应该包含整个企业的时间与空间的集合体。

什么是空间?
空间就是涵盖到企业中的各个数据环节以及保证关键的数据流走向的合理,并确保调度优化。顶层模块设计需要研究需要关注的各个业务块之间的结构关系,研究业务框架的整合模式。
行业内比较有名的业务框架,如:eTom业务框架,ITIL等。

什么是时间?
时间就是,企业未来发展以及企业所处行业的整体发展的预期,要兼顾发展才可以从规划的角度使应用系统不过时。
只有从时间和空间的三维角度进行思考,才可以得出合理的规划。
2、第二个层次,是架构设计
架构设计是从程序架构的设计方式角度出发,建立一种合理的程序逻辑的构架方式,也是时间与空间的集合体。
空间:
满足设计会话,利用架构设计适应各个模块的构建方法,使程序逻辑运行于程序的各个模块中而游刃有余,尽可能避免超出架构设计模块无法构建的应用需求。
时间:
满足顶层设计规划,同时兼顾程序未来发展,好的架构设计构造出的程序可能会用很多年不会变。
3、第三层,是微观设计
这个是程序员在处理具体应用程序编写程序时的创新与设计,当然其首要前提是满足上面两个层次的设计。
二、架构设计与规划的区别
架构设计是程序框架构建方式作为其关注点,更多的探讨的是该程序如何满足规划需求的结构健壮性。

而作为顶层设计的规划,更多的是从产品、系统、业务,整体宏观的角度考虑整体的模块地位与框架,并不关注其具体实现方法。
比如,业务逻辑分为几个层次这个问题是规划,这几个层次或模块之间的数据关联方式用EAI还是EDI还是WebService还是什么方式的问题就是架构设计。

三、忽略架构设计和规划设计的危害

业内相当一部分人都认为,找几个会编程序的程序员,就可以做出产品,就可以接活儿了。

可能可以,然而,如果是一个需要若干年持续进行的产品或系统,没有架构设计是短视的,其前期很快搭建后期捉襟见肘。

还有想当一部分人认为,有了架构设计和几个会编程的程序员就可以做出产品和搭建应用系统了。

这也确实可以,但是如果面对一个更复杂的系统,缺乏顶层设计就会陷入关注细节关注需求,被需求牵着鼻子走的路上去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件传输协议FTP

文件传输协议FTP提供交互式的访问&#xff0c;允许客户指明文件的类型和格式&#xff0c;并允许文件具有存取权限。它屏蔽了个计算机系统的细节&#xff0c;因而适合于在异构网络中任意计算机之间传输文件。它提供不同种类主机系统之间的文件传输能力&#xff0c;可以提供用户对…

Centos7安装Docker教程

1.首先安装必要依赖&#xff1a; sudo yum install -y yum-utils device-mapper-persistent-data lvm22.然后添加仓库源&#xff1a; sudo sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.最后安装 Docker&#xff…

String.format() 方法用法解说

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 String chargeFlowUrl _AGENT_URL "?agentAccount" _AGENT_ACCOUNT "&sequence%s &phone%s &iceUrl%s &…

Choose unique values for the 'webAppRootKey' context-param in your web.xml files! 错误的解决

大意是Log4jConfigListener在获取webapp.root值时&#xff0c;被后一context的值替换掉了&#xff0c;所以要在各个项目的web.xml中配置不同的webAppRootKey值&#xff0c;随即在其中一个web.xml中添加&#xff1a; <context-param> <param-name>webAppRootKey<…

ionic3 cordova ionic-native插件

ionic-native插件 cordova安装插件 以及 ionic-native插件使用过程以及步骤 cordova plugin add cordova-plugin-插件名称。 //安装插件npm install ionic-native/对应插件名称 --save。 //写入package.json在app.module.ts 的 providers 进行引用解释&#xff1a;cordove plug…

Diango博客--19.使用 Docker部署项目到线上服务器

文章目录1.克隆代码到服务器2.创建环境变量文件用于存放项目敏感信息3.在 .production 文件写入下面的内容并保存4.修改 Nginx 配置5.修改项目配置文件6.启动容器7.检查容器启动状况8.配置 HTTPS 证书&#xff08;没有配置域名无法配置&#xff0c;只能通过服务器 ip 以 HTTP 协…

从一生的角度看程序员的学习和发展

很多人谈学习和发展的时候&#xff0c;往往忽略人的先天自然条件&#xff0c;在这里我们从这个视角切入&#xff0c;来探讨一下程序员一生的可能轨迹。 如果把程序员的人生分为三个阶段&#xff0c;那么他们是&#xff1a; 毕业~30岁&#xff1a;这个时间段里&#xff0c;大多…

Jquery Datatable 数据填充报错:requested unknown parameter ‘XXX‘ for row xx, column xx 解决方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如图&#xff1a; 解决方法见官网&#xff1a;https://datatables.net/manual/tech-notes/4 摘要如下&#xff1a; Parameter is an…

Tarjan-缩点

$Tarjan$缩点 Tarjan的第二个应用就是求缩点啦。缩点虽然比割点麻烦一点&#xff0c;但是用处也比割点要大不少。 本来要学另外两个缩点算法的,但是似乎没什么用...$MST$里确实有只能有$prim$或者只能用$kruscal$的题目&#xff0c;但是这三种缩点...在网上没有找到介绍它们之间…

mysqldump参数详细说明(转)

Mysqldump参数大全&#xff08;参数来源于mysql5.5.19源码&#xff09; 参数 参数说明 --all-databases , -A 导出全部数据库。 mysqldump -uroot -p --all-databases --all-tablespaces , -Y 导出全部表空间。 mysqldump -uroot -p --all-databases --all-tablespaces --n…

Diango博客--20.开启 Django 博客的 RSS 功能

1.Rss简介 博客提供 RSS 订阅应该是标配&#xff0c;这样读者就可以通过一些聚合阅读工具订阅你的博客&#xff0c;时时查看是否有文章更新&#xff0c;而不必每次都跳转到博客上来查看。现在我们就来为博客添加 RSS 订阅功能。 RSS&#xff08;Really Simple Syndication&am…

什么是P2P

P2P技术又称为点对点传输技术。举个简单的例子&#xff0c;以便可以更好的理解。比如&#xff0c;以前我们要下载一个文件&#xff0c;我们一定要从服务器下载。有了P2P技术之后&#xff0c;我们可以向其它下载过这个文件的电脑获取这个文件&#xff0c;我下载完成了这个文件之…

SQL语句使用大全,最常用的sql语句

下列语句部分是Mssql语句&#xff0c;不可以在access中使用. SQL分类&#xff1a; DDL—数据定义语言(Create&#xff0c;Alter&#xff0c;Drop&#xff0c;DECLARE) DML—数据操纵语言(Select&#xff0c;Delete&#xff0c;Update&#xff0c;Insert) DCL—数据控制语言(…

Oracle 的 SQL语句中 decode()函数

decode()函数简介&#xff1a; 主要作用&#xff1a;将查询结果翻译成其他值&#xff08;即以其他形式表现出来&#xff0c;以下举例说明&#xff09;&#xff1b; 使用方法&#xff1a; Select decode&#xff08;columnname&#xff0c;值1,翻译值1,值2,翻译值2,...值n,翻译值…

百度王一男: DevOps 的前提是拆掉业务-开发-测试-运维中间的三面墙

这是一个创建于 375 天前的主题&#xff0c;其中的信息可能已经有所发展或是发生改变。由数人云、优维科技、中生代社区联合发起的 系列 Meetup 《 DevOps&SRE 超越传统运维之道》 先后在深圳、北京举行过两场 7 月 15 日上海站&#xff0c;敬请期待 ▼ 王一男老师在《 Dev…

linux上mongodb的安装与卸载

安装 1.下载安装包 wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz 下载完成后解压缩压缩包 tar zxf mongodb-linux-i686-1.8.2.tgz 2. 安装准备 将mongodb移动到/usr/local/server/mongdb文件夹 mv mongodb-linux-i686-1.8.2 /usr/local/mongodb 创建数据…

面向对象设计的准则

1.模块化 对象就是模块 把数据结构和操作这些数据的方法紧密地结合在一起 2.抽象 过程抽象 数据抽象&#xff1a;类 参数化抽象&#xff1a;C的“模板” 3.信息隐藏 通过对象的封装性实现类&#xff0c;分离了接口与实现&#xff0c;支持信息隐藏 4.弱耦合 某一部分的…

Linux触发连锁反应,惠及全球

所谓“连锁反应”是指&#xff0c;若干个相关的事物&#xff0c;只要一个发生变化&#xff0c;其他都跟着发生变化。在软件界的“圈子”里面&#xff0c;一般而言&#xff0c;“连锁反应”这个词汇是不经常使用的。 4月21日&#xff0c;芬兰科学院把2012年最高技术成就奖授予Li…

Diango博客--21.实现简单的全文搜索

文章目录1. 概述2. 模板&#xff1a;将关键词提交给服务器3. 视图&#xff1a;查找含有搜索关键词的文章4. 视图&#xff1a;绑定 URL1. 概述 搜索是一个复杂的功能&#xff0c;但对于一些简单的搜索任务&#xff0c;我们可以使用 Django Model 层提供的一些内置方法来完成&am…

解决Cannot change version of project facet Dynamic web module to 2.5

见 &#xff1a; http://blog.csdn.net/steveguoshao/article/details/38414145 我们用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp&#xff0c;由于这个catalog比较老&#xff0c;用的servlet还是2.3的&#xff0c;而一般现在至少都是2.5…