《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.1.3 架构设计

简介:

1.1.3  架构设计

前面已经介绍了什么是架构,也给出了架构师这个角色的特点,下面我们来看看架构设计流程的基础内容或特点。
1. 架构设计是一门科学
    架构设计是一门公认的学科,它正在慢慢成熟。架构师在开发一个架构时应寻找已验证的解决方案而不是重复发明,从而避免不必要的创造。在开发一个架构时,参考架构、建筑和设计模式,以及其他可重用资源方面的系统化经验也有一定的作用。
 
    然而,软件架构设计流程像土木工程中的流程一样,它在成熟之前仍然有一段路要走。这种成熟度可以从许多方面来考虑,包括标准的使用方法,以及对最佳方法、技术和流程的理解。
2. 架构设计是一门艺术
    前面说架构设计是一门学科,其实也可以说它是一门艺术,因为在构建架构时还需要有一定程度的创造力,当处理新奇和没有先例的系统时尤其如此。在这些情况下,可以借鉴非系统化的经验
 
    然而,在很大程度上,架构设计的艺术性还是很小的。即使是在最新颖的系统中,通常也是可以从其他地方找到解决方案的,或许只要将找到的解决方案稍微修改一下,就可以使其适应新的系统。
 
    随着软件架构设计流程越来越主流化,它已经不再被看作是只有极少数人能掌握的神秘方法了,而是有一定科学基础并被公认的一组定义良好且经过证实的方法,而且已被广泛接受。
3. 架构设计跨越很多方面
    在软件开发流程中,架构师除了参与架构设计以外,还要参与很多事情:
q   参与需求优先级的排定工作。
q   实现、定义用于优化源代码及可执行工作产品的实现结构。
q   确保结构可测试并被测试。
q   负责在开发环境中定义一些项目标准及指导方针。
q   帮助定义配置管理策略,因为配置管理结构(支持版本控制)经常会反映已经定义的架构。
q   和项目经理紧密合作,比如投入到项目的计划活动中。
4. 架构设计是一个渐进的活动
    经验表明:架构设计不是项目早期一次性执行的一项活动。架构设计适用于项目的整个生命周期,随着一系列递增和迭代的可执行软件的交付,架构会变得越来越完善和稳定,那么,架构师在项目的生命周期中应该关注什么呢?我们一起来看看。
 
    图1-1表示随着时间的改变项目的重心所发生的变化。正是由于项目重心在变化,所以架构师的关注点也会随着时间的改变而改变。
.NET搴旂敤鏋舵瀯璁捐锛氬師鍒欍€佹ā寮忎笌瀹炶返
1-1  架构师关注点变化图
    从图1-1可以看出,在项目早期,架构师主要关注于发现。重点是理解系统的范围、识别重要的特征及任何相关的风险,这些因素明显影响了架构。接着,关注重点会转向创造,这时,架构师最希望开发一个可以为完全实现系统提供基础的稳定架构。在大部分发现和创造都已经实现后,关注重点将变为实现。
 
    应该注意的是,对发现、创造和实现关注的顺序并不是严格不变的。在项目早期,在构建架构原型时就会有一些实现,在项目后期,在接受一些教训后,也会有一些新发现,用于实现架构特定元素的不同策略。
 
    在系统交付之前架构设计的流程一直都不会结束,因此,直至项目结束,架构师都必须参与其中。很多组织经常强烈期望在架构稳定时把架构师从项目中移走,以便把这个宝贵的资源用于其他项目上。事实上,在项目后期仍然需要进行架构决策的。
 
    所以我们经常会发现这样一个情况:在影响架构的主要决策制定完之后,架构师成为团队的兼职人员。这也算是一个妥协的办法吧!不管怎样,架构师不应该完全脱离。当架构师的角色由一个团队来担任时,就灵活多了,其中部分成员可以去负责其他项目,只要留下来的成员继续确保系统的架构完整性即可。
5. 架构设计受许多利益相关者驱动
    架构是用来实现利益相关者需要的。因此,架构设计的流程必须考虑所有的利益相关者,以确保他们的关注点(尤其那些可能对架构有影响的关注点)都被捕获、阐明、协调及管理。所以,让利益相关者参与对这些关注点解决方案的复审也很有必要。
 
    考虑所有的利益相关者的要求对于确保生成一个成功的架构来说非常重要。这些利益相关者影响着架构设计流程的许多方面,例如,需求的采集方式、架构文档编写方式及架构的评定方式等。
6. 架构设计需要折中权衡
    既然有这么多因素影响着一个架构,那么,架构师肯定经常需要在冲突的需求之间进行权衡了,以便找到合适的折中方案。例如,考虑是使用这种技术还是那种技术,是使用这个第三方组件还是另一个第三方组件,包括使用模式的选择。
 
    进行折中权衡并不是架构师应该或能够避免的事情。架构师应该进行有选择地考虑,并且,在各种选择中进行折中是架构设计流程的基本方面。
 
    图1-2是对解决方案架构设计中一些影响因素的简单分类。
1-2  架构设计折中因素
    除了系统提供的功能外,还必须关注非功能性需求,包括运行期质量(如性能和可用性)、非运行期质量(如可维护性和便携性)、业务约束(如规章制度约束和资源约束)及技术约束。
7. 架构设计承认经验与重用
    架构师很少是从一张白纸开始做起的。正如先前所述,他们会积极地寻找那些可以使用的架构模式、设计模式、现有组件等。换句话说,架构师要努力寻找可重用的资源。
 
    可重用资源是对重复出现问题的解决方案,可重用资源是牢记在头脑中的已经开发过的资源。一个架构的元素在当前系统的上下文中是可以重用的,同时,架构师还会把他们的架构或架构的元素看作是可以在当前系统之外可以重用的资源。
8. 架构设计既由上而下,也由下而上
    通常,在进行架构设计时会采用由上至下的设计方式,也就是先是获取利益相关者的需求,再架构定义之前了解的需求,然后设计架构元素,最后实现这些元素。
 
    然而,很少有架构是完全由上至下驱动的。主要原因是大部分系统并不是完全从头开始的,通常会有一些遗留产品以必须采纳且影响这种架构的现有解决方案元素的形式存在。这些元素包括完全重新开发的应用,以及约束这种架构的委托设计或委托实现元素等。
 
    成功的架构师在进行架构设计时既会由上而下,也会由下而上,可以将这两种方式看作是架构设计“中间相会”的方式。
 
 
    
    京东地址: http://book.360buy.com/10893935.html
    卓越地址: http://www.amazon.cn/mn/dp/B006NS2N0S
























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





相关文章
|
1月前
|
人工智能 API 数据库
Semantic Kernel .NET 架构学习指南
本指南系统解析微软Semantic Kernel .NET架构,涵盖核心组件、设计模式与源码结构,结合实战路径与调试技巧,助你从入门到贡献开源,掌握AI编排开发全栈技能。
204 2
|
4月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
412 0
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
655 6
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
306 1
|
5月前
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
226 0
|
8月前
|
消息中间件 人工智能 数据可视化
文生图架构设计原来如此简单之用户界面架构
节点式界面是文生图工具中一种强大而灵活的设计范式,以 ComfyUI 为代表。这种设计将复杂的图像生成过程分解为可视化的模块化组件,使用户能够精确控制生成流程的每个环节。
301 2
|
10月前
|
开发框架 前端开发 .NET
一个适用于 .NET 的开源整洁架构项目模板
一个适用于 .NET 的开源整洁架构项目模板
193 26
|
10月前
|
C# Android开发 iOS开发
2025年全面的.NET跨平台应用框架推荐
2025年全面的.NET跨平台应用框架推荐
455 23
|
10月前
|
存储 消息中间件 小程序
转转平台IM系统架构设计与实践(一):整体架构设计
本文描述了转转IM为整个平台提供的支撑能力,给出了系统的整体架构设计,分析了系统架构的特性。
297 10

热门文章

最新文章