《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.2 正确理解设计的含义

简介:

1.2  正确理解设计的含义

    虽然我们常常把“架构”和“设计”放在一起,总称为“架构设计”,其实从严格的意义上来说,“架构”和“设计”是两个概念,这里不是故意玩文字的游戏,而是两者的关注点确实是不一样的。
 
1.2.1  设计的重要性
 
    设计主要是指一个思考和求证的过程。在这个思考的过程中,针对某个需要解决的问题,提出一些可行方案,同时给出相应的计划。
 
    一般来说,软件就是用来解决某个问题的,因为这个问题比较大,或者比较复杂,所以往往不得不分解,“分而治之”。大的问题不断被分解,最终成为一个个可以解决的小问题。设计指明了如何解决一个个的问题,并提出了方案和计划,只有这样,才能最后确保整个软件的问题被解决,也才能确保软件按照计划来进行。
 
1.2.2  架构和设计的关系
 
    正如之前所说,架构和设计是两个不同的概念,它们也出现在不同的阶段。当软件系统的架构确定之后,设计就开始了。
 
    架构与系统的业务需求往往是紧密联系的,理论上来说,架构不是很关注系统最后搭建在哪个技术平台上例如:或是J2EE上,或是.NET上),但实际上,很多时候我们在考虑架构创建的同时,也考虑了系统将要运行的技术平台。
 
    设计是与系统的实现相关的。设计将架构所关注的那些高层抽象的需求与具体的技术实现联系起来,从而考虑如何实现系统所需要的稳定性、安全性,甚至是考虑采用哪种模式等。在设计阶段,还要决定在以后开发的过程中应采用哪种实现方法论进行开发例如,是TDD,还是DDD或是BDD
    用一张图来说明架构和设计的相互关系,如图1-5所示
1-5  架构与设计的关系图
    在图1-5中,业务需求是系统架构的决定性因素,软件设计和开发在架构确定之后开始进行,而开发过程又是在设计的基础上进行的。
 
    为了进一步说明架构和设计的关系,加深读者的理解,下面就以一个汽车制造的例子类比阐述之。
 
    汽车厂的机械工程师(可以理解为机车行业的架构师)为一款新型的汽车设计了一个蓝图,我们可以将这个蓝图理解为机械工程师为汽车创建的架构。在这个蓝图中,包含了一些高层抽象的需求:
q  汽车的规格、大小和各个组成部分。
q  汽车引擎的容量。
q  汽车的类型。
q  最大的承载能力。
 
    机械工程师在蓝图中标明了设计和生产汽车所需要的一些环境,同时也包含了一些约束条件,例如生产汽车的预算和时间期限等。但是在蓝图中没有包含设计引擎的细节,也不包含会使用什么样的钢材,使用什么的轮胎等。而这些都将会由汽车设计工程师来决定,这些工程师基于公司现有的生产能力和技术来选择最佳的策略,以确保他们的选择可以实现蓝图的需求。
 
    汽车的生产流水线将会按照汽车工程师的设计和指定的技术来进行,这个过程将包含轧钢选材、选择合适的生产设备组装各个零部件,烘烤油漆,安全测试等。
 
    图1-6把汽车的生产过程和软件开发过程做了个对比映射。
1-6  工业生产与软件开发对比图
    在设计过程中,有时候一个架构蓝图有多个可行的实现方案,而这些方案又各有利弊,那么设计人员必须在满足蓝图需求的前提下,选择尽可能地满足系统相关利益人关注点的方案。如图1-7所示。
1-7  架构蓝图实现
    京东地址: http://book.360buy.com/10893935.html
    卓越地址: http://www.amazon.cn/mn/dp/B006NS2N0S




















本文转自yanyangtian51CTO博客,原文链接:http://blog.51cto.com/yanyangtian/749112  ,如需转载请自行联系原作者


相关文章
|
2月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
125 10
|
3月前
|
数据库 开发者
.NET 异步编程之谜:async/await 模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第28天】在当今注重效率和响应性的软件开发领域,.NET 的 async/await 模式如同得力助手,简化异步代码编写,使代码更易理解和维护。通过后台执行耗时操作,如网络请求和数据库查询,避免阻塞主线程,显著提升系统响应性。此模式不仅适用于网络请求,还广泛应用于数据库操作和文件读写。合理使用 async/await 可大幅优化性能,但需注意避免过度使用、正确处理调用链及异常,以确保系统稳定性和高效性。深入探索 async/await,助您构建更出色的应用程序。
51 0
|
7天前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
20天前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
|
1月前
|
网络协议 大数据 网络架构
桥接模式和NET模式的区别
桥接模式和NET模式的区别
35 0
|
1月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
2月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
124 6
|
1月前
|
Cloud Native API C#
.NET云原生应用实践(一):从搭建项目框架结构开始
.NET云原生应用实践(一):从搭建项目框架结构开始
|
3月前
|
jenkins 测试技术 持续交付
解锁.NET项目高效秘籍:从理论迷雾到实践巅峰,持续集成与自动化测试如何悄然改变游戏规则?
【8月更文挑战第28天】在软件开发领域,持续集成(CI)与自动化测试已成为提升效率和质量的关键工具。尤其在.NET项目中,二者的结合能显著提高开发速度并保证软件稳定性。本文将从理论到实践,详细介绍CI与自动化测试的重要性,并以ASP.NET Core Web API项目为例,演示如何使用Jenkins和NUnit实现自动化构建与测试。每次代码提交后,Jenkins自动触发构建流程,通过编译和运行NUnit测试确保代码质量。这种方式不仅节省了时间,还能快速发现并解决问题,推动.NET项目开发迈向更高水平。
49 8
|
3月前
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
184 3

热门文章

最新文章