当前位置: 首页 > news >正文

.NET企业级应用架构设计系列之开场白

本文属spanzhang(张友邦)原创,发布地址为:http://blog.csdn.net/spanzhang。转载或引用请注明原文之出处,谢谢!

其实很久以前就想写点关于架构设计方面的东西,一直以来都没有最终落到实处。正好这段时间在做一个WEB架构,决定把和架构设计有关的内容写成一个系列文章。算是回馈CSDN提供的各种免费服务,同时给初学架构设计的朋友一点小小的提示。在我工作的六年多时间里,除了第一年是纯粹编码以外,其余时间都在做和架构设计有关的工作,当然也还一直在写各种各样的代码。也就是说,我本人其实也只有不多的经验可以分享,所以文中肯定有一些观点不能让所有人都认同。如有异议,可以发邮件和我讨论。

1、架构设计是件容易的事情。
对于不熟悉的或者没有架构设计经验的程序员来说,架构设计可能看起来很神秘,不知道究竟该如何入手,也不清楚该注意些什么问题。其实架构设计也只是软件系统开发中的一个环节而已,整个软件系统的开发和维护以及变更还涉及到很多事情,包括技术、团队、沟通、市场、环境等等。在分析和设计架构的时候也是有很多套路和原则的,只要我们按照一些最基本最简单的思路和方向去分析问题,就能得到一个大体满足实际情况的架构。前面我曾写过两篇关于人脑思考复杂系统的文章:《破解复杂性》以及《和SOA一起对抗复杂性》。这是软件开发中的方法论问题,可以贯穿于软件开发的多个阶段,包括架构设计、编码实现、后期维护等。掌握一定的原则,对架构设计能带来事半功倍的效果。

2、架构设计不是件简单的事情。
虽然架构设计是件容易的事情,但也不是大多数没有架构设计经验的程序员想象中的画画框图那么简单。把几台服务器一摆,每一台服务器运行什么软件分配好,然后用网络连接起来,似乎每个企业级应用都是如此简间单单的几步。但现实生活中的软件系统实实在在可以用复杂大系统来形容,从规划、开发、维护和变更涉及到许许多多的人和事。架构设计就是要在规划阶段都把后面的事情尽量把握进来,要为稳定性努力,还要为可维护性、扩扩展性以及诸多的性能指标而思前想后。除了技术上的考虑,还要考虑人的因素,包括人员的组织、软件过程的组织、团队的协作和沟通等。也许你会说那些都是项目管理上的事,和架构设计没关系。但一个团队成员无法实现的架构没有任何实际意义。另外,现在是解决方案满天飞的时代,很多事情都可以用多种途径来解决,如何在五花八门的选项中间做出决定,可能让很多人都头疼过。自己的经验、团队的素质、领导的要求、环境的压力以及市场的变化,够折腾了。

3、架构设计需要方法论的指导
所以,总的说来,在正确的方法论指导下,复杂的架构设计其实是件容易的事情。这些方法论的思路包括,至上而下的分析,关注点分离,横向/纵向模块划分等。有时候觉得架构设计决策就像是浏览Google Earth,实际上反映的是一种自上而下的决策过程。对问题的分解是软件思维的基本素质,可以有横向分解、纵向分解以及两者的结合。能不能有效快速准确的分解问题,是软件开发人员需要首先训练的项目。另外,架构设计中图形化的工具非常有用,它能把系统的结构和运作机制以图形化的方式表达出来。也正因为这样才有了架构设计就是画框图的误会。再者,架构设计是一个工程性质的工作,对当事人的实际从业经验要求较高。只有对市场上的各种技术有较全面的了解之后才有可能设计出一个尽可能满足各种设计约束的架构。

先说这么多吧,算是一个开场白。欢迎关注后面的详细内容。

相关文章:

  • php5.4基础教程,PHP基础教程
  • 网管还需要培训吗?
  • java sw,java-项目环境隔离实现
  • 提取不同站点下的列表内容
  • java web 服务器地址,Java web服务器内运用URLRewrite进行地址转向
  • 2008,北京读者见面会即将举行
  • 非有限结果matlab,在MATLAB中求解非线性有限元
  • 关于自动化测试的一些思考。
  • php微信小程序选项跳转,实现微信小程序路由跳转指定页面的代码实例
  • matlab图源代码,[转载]常用的一些图像处理Matlab源代码
  • 奇虎郑文彬:还原系统保护技术原理和攻防
  • php websocket class,server.php
  • 腾讯李旬保:WASL-Web应用安全的思考
  • java哈希映射干什么的,java 弱哈希映射表WeakHashMap原理
  • Java多线程Jdbc,java - jdbctemplate.batchupdate是多线程还是并发? - 堆栈内存溢出
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Brief introduction of how to 'Call, Apply and Bind'
  • CODING 缺陷管理功能正式开始公测
  • ES6 ...操作符
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • go append函数以及写入
  • Mysql5.6主从复制
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SpingCloudBus整合RabbitMQ
  • SpringBoot几种定时任务的实现方式
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • spring学习第二天
  • 大型网站性能监测、分析与优化常见问题QA
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 每天一个设计模式之命令模式
  • 模型微调
  • 前端工程化(Gulp、Webpack)-webpack
  • 三栏布局总结
  • 我这样减少了26.5M Java内存!
  • (Forward) Music Player: From UI Proposal to Code
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • []FET-430SIM508 研究日志 11.3.31
  • [20171101]rman to destination.txt
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [8481302]博弈论 斯坦福game theory stanford week 1
  • [Android]创建TabBar
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [C#C++]类CLASS