Specifications则是一种规格说明,不会用太多的专业词汇,用于指导之后开发者的设计,是一种系统system的要求
Functional vs Non-Functional:功能性是系统能做什么,非功能性要求则是基于产品,组织,外部的一些基准的要求,必须加密用什么方式之类的
machine:硬件需求
一个好的构架师,一个好的PM,都应该首先是一个优秀的技术者,从细节到上层全面把握
好的构架在之后很容易维护和进化
好的设计构架都会有好的doc,作为使用接口的人,阅读文档太重要了
graph LR;
subgraph UI[User Interface]
A1[Web Application]
A2[Mobile Application]
end
subgraph UMS[User Management System]
B1[Authentication]
B2[Profile Management]
B3[Notifications]
end
subgraph CMS[Course Management System]
C1[Course Creation]
C2[Content Management]
C3[Course Enrollment]
end
subgraph CDN[Content Delivery Network]
D1[Video Streaming]
D2[File Hosting]
D3[Load Balancing]
end
subgraph AES[Assessment & Evaluation System]
E1[Quiz Module]
E2[Automated Grading]
E3[Peer Review]
end
subgraph DCP[Discussion & Communication Platform]
F1[Forums]
F2[Live Chat]
F3[Webinars]
end
subgraph AR[Analytics & Reporting]
G1[Progress Tracking]
G2[Engagement Metrics]
G3[Dashboard]
end
subgraph PSS[Payment & Subscription System]
H1[Payment Gateway]
H2[Subscription Management]
H3[Coupons]
end
subgraph BI[Backend Infrastructure]
I1[Database]
I2[API Services]
I3[Microservices]
end
subgraph SC[Security & Compliance]
J1[Data Encryption]
J2[Compliance]
J3[Audits]
end
UI --> UMS
UI --> CMS
UI --> CDN
UI --> AES
UI --> DCP
UI --> AR
UI --> PSS
UI --> SC
UMS --> BI
CMS --> BI
CDN --> BI
AES --> BI
DCP --> BI
AR --> BI
PSS --> BI
SC --> BI
管道和过滤器(Pipe and Filter)是在软件架构和设计模式中,一种非常常见的设计模式。它被用来处理数据流,并将复杂的处理过程分解为一系列简单的步骤。
Client-Server(客户端-服务器)是一种经典的软件设计模型。它是分布式计算架构的一种,其中任务和负载被分配到两个主要的组件:客户端和服务器。这种模型被广泛用于各种网络应用程序和系统设计中。
Client-Server 的应用示例
Client-Server 与其他模型的对比
Master-Slave 模式是一种分布式计算架构,广泛应用于数据库、计算任务调度和系统管理中。它将任务和数据在主服务器(Master)和从服务器(Slave)之间进行分配,以提高系统的可用性、性能和容错性。
Master-Slave 模式的应用示例
优点:
缺点:
Master-Slave 模式通过角色分配和任务调度,实现了高效的数据处理和系统管理。它在性能优化和高可用性方面表现出色,但也面临单点故障和数据一致性等挑战。通过合理的设计和实施,Master-Slave 模式能够为复杂的分布式系统提供强大的支持。
想起了k8s和Airflow的scheduler
分层模型是一种软件架构设计模式,通过将系统划分为多个层次,每个层次承担不同的职责,以实现更好的结构化和模块化。这种模型通常用于设计复杂的软件系统,使系统更易于开发、维护和扩展。
Layered Model 通常由以下几个主要层次组成:
以一个电子商务应用为例,Layered Model 的各层可能包含以下内容:
优点:
缺点:
Layered Model 被广泛应用于各种软件系统,包括但不限于:
Layered Model 与其他架构的对比:
Layered Model 是一种经典的架构模式,通过分层实现系统的职责分离和模块化,适用于大多数复杂的业务系统。虽然在性能和灵活性上存在一些挑战,但其易于理解、维护和扩展的特点,使得它在软件设计中具有重要地位。通过合理的分层和接口设计,Layered Model 可以为复杂的系统提供清晰的结构和强大的支持。
Microservices Architecture(微服务架构)
Event-Driven Architecture(事件驱动架构)
Service-Oriented Architecture(面向服务架构)
Repository Pattern(仓储模式)
模块化是一种软件设计原则,旨在将软件系统分解为子系统,然后再分解为若干个相对独立的模块(Module),以便于开发、理解、维护和重用。这些模块可以是代码、组件、功能模块或子系统,它们通过清晰的接口进行交互。
和上一部分的系统构架不同,这部分专注于系统内部的,功能分离的设计模式
何为设计?:设计行动本身,和设计文档
Design is not coding, coding is not design.What important is the real world solutions.
模块化的基本概念:
module
和 Java 的 package
。软件设计是一个神奇的世界,就像是造物主,从抽象的混沌的阴阳中,创造了世界
Information Hiding:
Method
Data Encapsulation:
get
和set
方法,就是为了数据保存和封装存在,比如在get
的时候获取用户的认证,比如在set
的时候,设置某些必要条件强内聚(Strong Cohesion):意味着模块内的代码和功能高度相关,目标明确,通常关注单一职责。这种设计使模块更专注于其核心功能,避免了混杂不同功能的代码。
低耦合(Loose Coupling):强调模块间的独立性和灵活性。低耦合设计允许模块在互不干扰的情况下演变和发展,使得系统的修改和扩展变得更加容易。
降低耦合是软件设计中的重要原则,有助于提高系统的可维护性和扩展性。
外部耦合:模块依赖于外部环境、系统配置或外部设备。比如分享同一个I/O之类,系统移植和部署变得困难。
数据结构耦合:模块之间通过共享复杂数据结构进行交互,从而导致对数据结构的具体实现有较强依赖的一种耦合形式。
简单来说,内聚描述的是一个模块内部的功能是如何彼此关联和协作完成任务的。
逻辑内聚(Logical Cohesion):模块中的功能属于同一逻辑类别,但并不直接相关。比如处理多种不同格式的输入(如 XML、JSON)的函数集合。
顺序内聚(Sequential Cohesion):模块内的功能按顺序执行,其中一个功能的输出作为下一个功能的输入。流水线式的数据处理(如数据解析、处理、输出)。似乎像是过程内聚和通信内聚的结合体。
built with the idea of retreat
瀑布开发模型是一种线性和顺序的软件开发方法,常用于项目管理。其名称来源于开发过程像瀑布一样逐步向前推进。整个过程分为多个阶段,每个阶段必须完成后才能进入下一个阶段。这些阶段通常包括需求分析、系统设计、实现、集成与测试、部署、以及维护。
瀑布模型的优点在于其结构化和系统化的流程,使项目计划和管理相对简单,同时适合需求明确且变化较少的项目。然而,它的缺点在于灵活性不足,难以适应需求变化,可能导致后期问题修复的成本高昂。因此,瀑布模型适合于需求稳定且项目定义清晰的项目。
V-Model,又称为V字模型,是一种软件开发流程模型,体现了开发和测试的紧密结合。它是瀑布模型的扩展,将测试阶段与开发阶段并行进行,形成一个V字形的结构。模型左侧是开发阶段,包括需求分析、系统设计、详细设计和编码,而右侧是与这些阶段对应的测试阶段,分别是单元测试、集成测试、系统测试和验收测试。
每个开发阶段都有相应的测试阶段,以确保每个部分都按预期工作。V-Model的优点在于,它强调了在早期阶段进行验证和验证,从而减少了后期的错误和修复成本。然而,与瀑布模型相似,V-Model不易适应需求频繁变化的项目,适用于需求明确、变更较少的项目。它通过早期测试规划提高了项目的质量和可靠性。
Sashimi(刺身)模型是一种项目管理方法论,与瀑布模型相似但更灵活。其核心思想是通过并行的方式逐步构建软件,将整个开发过程分成多个小的、可重叠的阶段,如同制作生鱼片时将鱼切成薄片。每个阶段包含了分析、设计、编码、测试等活动,允许团队在开发的不同阶段同时进行某些工作。这样,团队可以更快地发现问题,并在整个开发周期中保持灵活性和敏捷性。Sashimi模型适用于需要快速迭代和反馈的项目,并在应对需求变化时具有一定优势。
(统一过程框架,简称 UP 或 RUP)是一个面向对象的软件开发过程框架,最初由 Rational Software 公司开发,因此常被称为 Rational Unified Process (RUP)。它是一个迭代的、面向架构的、以用例驱动的软件开发过程框架。RUP 的目标是帮助开发团队以结构化和规范化的方式开发高质量的软件系统。
主要特点:
核心工作流:(一个轴)
RUP 包含多种核心工作流(也称为活动流或流程),其中主要包括:
业务建模(Business Modeling): 理解和分析业务环境以及系统所需的业务功能。
需求(Requirements): 通过用例来捕获和定义系统的需求。
分析与设计(Analysis and Design): 创建系统的架构,并设计实现需求的解决方案。
实现(Implementation): 编写代码,将设计转化为实际的软件系统。
测试(Test): 验证系统是否符合需求,并找出和修复缺陷。
部署(Deployment): 将系统交付给最终用户并进行安装、配置和用户培训。
生命周期阶段:(另一个轴)
RUP 将整个软件开发过程分为四个阶段,每个阶段由多个迭代组成:
RUP 的优势:
Unified Process Framework(特别是 RUP)是一种结构化的、面向对象的软件开发框架,强调迭代开发、用例驱动、架构为中心以及风险管理。它适用于需要高质量软件开发的中大型项目,通过其灵活和结构化的流程,有助于管理复杂性并确保项目成功。
是一种风险驱动的软件开发模型,结合了瀑布模型的系统性和迭代模型的灵活性,特别适用于大型、复杂和高风险项目。其核心特点是通过多次迭代进行开发,每个迭代包含需求分析、设计、实现、测试和评估等阶段,并在每个阶段进行明确的风险评估和管理。与其他模型相比,Spiral Model强调风险控制和客户反馈,每个迭代结束后都会根据反馈调整开发计划,使项目能够灵活应对变化和不确定性。
Agile开发是一种灵活、迭代的软件开发方法,强调在不断变化的需求下,通过小步快跑的方式快速交付高质量的软件产品。它起源于2001年发布的《敏捷宣言》,核心理念包括以人为核心、协作为重、适应变化和持续交付。
与传统的瀑布模型相比,Agile开发更具灵活性和响应速度,适合需要快速适应变化并且注重客户满意度的项目。
Kanban是一种视觉化的工作管理方法,起源于制造业,特别是丰田生产系统,后来被广泛应用于软件开发和其他领域。Kanban的核心理念是通过可视化的任务流动和持续改进,帮助团队高效管理工作、减少浪费、优化流程。
Kanban特别适合持续交付环境、维护和支持团队,或需要灵活应对变化和多样化需求的项目。它可以单独使用,也可以与其他敏捷方法(如Scrum)结合使用,帮助团队实现更高的工作效率和质量。
Lean Startup是一种创业方法论,旨在通过持续创新、快速实验和数据驱动的决策来创建成功的创业公司。由埃里克·莱斯(Eric Ries)在其同名书籍《The Lean Startup》中提出,Lean Startup的核心理念是以最小化资源浪费为目标,通过快速验证市场需求和迭代开发来打造产品。
Lean Startup的适用场景:
Lean Startup方法特别适合初创公司,以及希望在不确定环境中快速验证和开发新产品的大型企业。通过这种方法,团队能够快速确定市场需求,降低失败的风险,提高成功的可能性。
Scrum是一种敏捷开发框架,广泛用于软件开发中以管理复杂项目。它通过短周期的迭代(称为“Sprint”)来促进持续改进和交付高质量产品。Scrum强调团队合作、自组织和灵活应对变化。
在Scrum中,经验主义是其核心原则,强调通过实际经验和持续反馈来指导决策和行动。Scrum基于“试验-观察-调整”的循环,通过透明性、检视和适应这三个支柱来实施经验主义。
经验主义在Scrum中体现为一种以数据和实际经验为基础的工作方式,团队不断通过实践获得反馈,并根据这些反馈做出调整。这种方法确保了团队能够在不确定和复杂的环境中灵活应对变化,持续改进并交付高质量的产品。
Scrum通过明确的角色分工和周期性迭代,帮助团队在不确定和变化的环境中高效工作,是敏捷开发最广泛使用的框架之一。