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

网站建设 尚品中国营销型网站设计价格

网站建设 尚品中国,营销型网站设计价格,宠物狗网站建设分析,网线制作顺序图解一、引言 在软件开发的广袤领域中#xff0c;领域驱动设计#xff08;Domain-Driven Design#xff0c;简称 DDD#xff09;犹如一颗璀璨的明星#xff0c;备受瞩目。对于期望运用 DDD 开展项目的研发人员而言#xff0c;明晰 DDD 的本质是实现其有效应用的基石。需注意…一、引言 在软件开发的广袤领域中领域驱动设计Domain-Driven Design简称 DDD犹如一颗璀璨的明星备受瞩目。对于期望运用 DDD 开展项目的研发人员而言明晰 DDD 的本质是实现其有效应用的基石。需注意的是DDD 并非 MVC 式的工程结构也非等同于微服务架构更非单纯的设计模式。那么DDD 究竟为何物 二、DDD 的定义与核心概念 一DDD 的定义 DDD 即领域驱动设计Domain-Driven Design是一种举足轻重的软件开发方法由 Eric Evans 在其著作《领域驱动设计软件核心复杂性应对之道》中率先提出。DDD 着重于创建与业务领域紧密相连的软件模型以确保软件能够精准地化解实际问题。 二DDD 的核心理念 领域模型Domain Model是对特定业务领域知识的精准阐释涵盖实体Entities、值对象Value Objects、服务Services、聚合Aggregates、聚合根Aggregate Roots等概念。领域模型乃 DDD 的核心之所在它反映了业务专家的语言和决策。统一语言Ubiquitous Language是开发团队与业务专家共同运用的语言在整个项目中保持一致确保所有人对业务概念达成相同的理解从而降低沟通成本并减少误解。限界上下文Bounded Context是明确界定的系统边界在此边界内部存有一套统一的模型和语言。不同的限界上下文之间可能存在不同的模型它们通过上下文映射Context Mapping来实现交互与集成。聚合Aggregate是一组相关对象的集合被视作数据修改的单元。每个聚合都具有一个聚合根它是外部对象与聚合内部对象交互的唯一入口。领域服务Domain Services当某些行为不自然地归属于任何实体或值对象时这些行为可被定义为领域服务。领域服务通常代表着领域中的一些操作或业务逻辑。应用服务Application Services作为软件的组成部分它协调领域对象来执行任务。应用服务负责应用程序的工作流程但并不包含业务规则或知识。基础设施Infrastructure包含为领域模型提供持久化机制如数据库、消息传递、应用程序的配置等技术组件。领域事件Domain Events是领域中发生的具有意义的业务事件它们能够触发其他子系统的反应或流程。 DDD 的目标在于将软件的关注点聚焦于核心领域并借助丰富的领域模型来管控复杂性进而提升软件的质量和可维护性。DDD 强调与业务专家的紧密协作以确保软件解决方案能够精准地反映业务需求。通过此种方式软件开发团队能够打造出更为灵活、可扩展且与业务紧密融合的系统。 三、DDD 中的软件设计方法 一范式 (Paradigms) 范式乃是软件设计与开发的基本风格或哲学它界定了编程的基本原则与模式。常见的软件设计范式包括 结构化编程强调程序结构的重要性运用顺序、选择和循环控制结构。面向对象编程 (OOP)立足于对象的概念将数据和处理数据的方法进行封装。函数式编程将计算视作数学函数的评估规避状态改变和可变数据。事件驱动编程以事件为核心响应用户操作、消息或其他系统事件。 二模型 (Models) 模型是对软件系统的抽象表述用于助力理解、设计和测试系统。常用的软件设计模型包含 UML (统一建模语言)一套图形化的建模语言用于描述、设计和文档化软件项目。ER 模型 (实体 - 关系模型)应用于数据库设计描绘数据的实体及其之间的关系。状态机模型描述系统可能的状态、事件以及在这些事件发生时的转换。 三框架 (Frameworks) 框架是一套预先设定的代码库和组件用于为软件开发提供骨架。框架通常定义了应用程序的结构提供了一组通用的功能和模式以便开发者能够专注于实现特定的业务逻辑。例如 Spring Framework一个针对 Java 应用程序的全面编程和配置模型。Ruby on Rails一个用于快速开发 Web 应用程序的 Ruby 框架。Django一个高级 Python Web 框架鼓励快速开发和干净、实用的设计。   四方法论 (Methodologies) 方法论是一套指引软件开发过程的规则和实践涵盖项目管理、开发流程、团队协作等方面。常见的软件开发方法论有 敏捷开发一种迭代和增量的开发方法强调灵活性和客户合作。Scrum一种敏捷开发框架用于管理复杂的软件和产品开发。瀑布模型一种线性顺序的开发方法将项目划分为不同阶段每个阶段完成后才可进入下一个阶段。 五主要活动 软件设计的主要活动涵盖建模、测试、工程、开发、部署和维护。 建模 (Modeling)通过创建模型来呈现系统的不同方面例如运用 UML 图来描述系统架构。测试 (Testing)确保软件的质量包含单元测试、集成测试、系统测试和验收测试。工程 (Engineering)应用工程原则和实践来构建软件包括需求分析、设计、实现和测试。开发 (Development)编写代码并实现功能将设计转化为实际的软件产品。部署 (Deployment)将软件发布到生产环境使其可供用户使用。维护 (Maintenance)在软件发布后对其进行更新和改进修复缺陷提升性能和适应性。 每个活动均是软件开发生命周期的重要构成部分它们相互依存共同保障软件项目的成功。 四、DDD 的设计手段与概念 一DDD 是什么 DDD 作为一种软件设计方法是指导软件工程设计的有效手段它提供了各类切割工程模型的技巧如领域、界限上下文、实体、值对象、聚合、工厂、仓储等。通过 DDD 的指导思想我们能够在前期投入更多时间更为合理地规划出可持续迭代的工程设计。 在 DDD 中存在一套共识的工程两阶段设计手段分别为战略设计和战术设计。 战略设计主要应对繁杂的业务需求通过抽象、分治的过程将其合理地拆分为独立的多个微服务从而实现分而治之。评估拆分是否合理的标准在于需求开发上线时是否每次都需要大量操作多个微服务的开发和上线。倘若出现此种情况那么这种战略设计便是一种失败的微服务单体设计。因此少数几个中等规模的单体应用周边环绕着一个服务生态系统的设计更具实际意义。战术设计在此范畴下主要探讨如何基于面向对象思维运用领域模型来表达业务概念。在未进行领域模型设计的架构中通常映射到 MVC 三层架构下Service 数据模型的开发模式会致使 Service 变得扁平且包含大量复杂的业务逻辑代码。加之行为对象与功能逻辑的分离贫血模型的开发方式使得行为对象的不断交叉使用这是导致系统复杂度持续增加且难以维护的根本原因。故而在这一阶段需要设计每一个能够表达领域概念的模型并运用实体、聚合、领域服务来承载。 二DDD 的概念 充血模型 定义充血模型是将对象的属性信息与行为逻辑汇聚到一个类中常用的手段如在对象内提供属于当前对象的信息校验、拼装缓存 Key、不含服务接口调用的逻辑处理等。扩展充血不仅可以是一个类的设计和一个类内的方法设计也可以是整个包结构。一个包下包括了用于实现此包 Service 服务所需的各类零部件模型、仓储、工厂也可被视为充血模型。同时我们还会在一个同类的类下提供对应的内部类如用户实名包括通信类、实名卡、银行卡、四要素等。如此在代码编写中能够更清晰地看到子类的所属信息更易于理解代码逻辑也便于维护迭代。 领域模型 定义领域模型是指特定业务领域内业务规则、策略以及业务流程的抽象与封装。在设计手段上通过风暴模型拆分领域模块形成界限上下文。其最大的区别在于将原有的众多 Service 数据模型的方式拆分为独立的有边界的领域模块。每个领域内创建自身所属的领域对象实体、聚合、值对象、仓储服务(DAO 操作)、工厂、端口适配器 调用外部接口的手段等。演变在原本的 Service 贫血的数据模型开发指导下Service 串联调用每一个功能模块。这些基础设施对象、方法、接口是相互调用的。这是由于贫血模型未进行面向对象的设计所有的需求开发仅有详细设计。转换到充血模型下以一个领域功能为聚合将拆分一个领域内所需的 Service 作为领域服务将 VO、Req、Res 重新设计为领域对象将 DAO、Redis 等持久化操作为仓储等。例如一套账户服务中的授信认证、开户、提额降额等每一个均是一个独立的领域在每个独立的领域内创建自身领域所需的各项信息。特点领域模型自身仅关注业务功能的实现不与外部任何接口和服务直接连接。而是通过仓库和端口适配器定义调用外部数据的含有出入参对象的接口标准让基础设施层进行具体的调用实现。通过这样的方式使领域只关心业务实现同时做好防腐工作。 实体、聚合、值对象 实体 概念实体是以领域服务功能目标为导向依托于持久化层数据设计的领域对象。持久化 PO 对象是原子类对象不具备业务语义而实体对象是具有业务语义且具有唯一标识的对象伴随于领域服务方法的全生命周期对象。特征 唯一标识实体具有一个能够区分其他实体的标识符可以是 ID、复合键或自然键关键在于能够唯一地标识实体实例。领域标识实体的标识通常来源于业务领域在系统中是独一无二的。委派标识在某些情况下实体的标识可能是由 ORM 框架自动生成的如数据库中的自增主键。 用途 表达业务概念用于在软件中表达具体的业务概念如用户、订单、交易等。封装业务逻辑实体不仅承载数据还封装了业务规则和逻辑。保持数据一致性负责维护自身的状态和数据一致性。 实现手段 定义实体类包含实体的属性、构造函数、方法等。实现唯一标识为实体类提供一个唯一标识的属性如 ID并确保在实体的生命周期中这个标识保持不变。封装行为在实体类中实现业务逻辑的方法。使用 ORM 框架将实体映射到数据库表中简化数据持久化的操作。实现领域服务对于跨实体或跨聚合的操作实现领域服务来处理。使用领域事件当实体的状态发生变化时发布领域事件通知其他部分的系统进行相应的处理。 值对象 概念值对象是由一组属性构成的它们共同描绘了一个领域概念。与实体不同值对象无需具有一个唯一的标识符来对其进行区分。值对象通常是不可变的一旦创建其状态不应改变。特征 不可变性值对象一旦被创建其状态就不应发生变化。等价性值对象的等价性是基于对象的属性值而非对象的引用。替换性任何需要改变值对象的操作都会导致创建一个新的值对象实例而非修改现有的实例。侧重于描述事物的状态通常用于描述事物的状态而非事物的唯一身份。可复用性值对象可以在不同的领域实体或其他值对象中重复使用。 用途 金额和货币如价格、工资、费用等。度量和数据如重量、长度、体积等。范围或区间如日期范围、温度区间等。复杂的数学模型如坐标、向量等。任何其他需要封装的属性集合。 实现手段 定义不可变类确保类的所有属性都是私有的并且只能通过构造函数来设置。重写 equals 和 hashCode 方法确保值对象的等价性是基于它们的属性值而非对象的引用。提供只读访问器只提供获取属性值的方法不提供修改属性值的方法。使用工厂方法或构造函数创建实例确保值对象的有效性和一致性。考虑序列化支持若值对象需要在网络上传输或存储到数据库中需要提供序列化和反序列化的支持。 聚合 概念聚合是领域模型中的关键概念它是一组具有内聚性的相关对象的集合这些对象共同协作以执行某些业务规则或操作。聚合定义了一组对象的边界这些对象可被视为一个单一的单元进行处理。特征 一致性边界确保其内部对象的状态变化是一致的。根实体每个聚合都有一个根实体Aggregate Root它是聚合的入口点拥有一个全局唯一的标识符其他对象通过根实体与聚合进行交互。事务边界聚合也定义了事务的边界在聚合内部所有的变更操作应当是原子的即它们要么全部成功要么全部失败以此来保证数据的一致性。 用途 封装业务逻辑通过将相关的对象和操作封装在一起提供了一个清晰的业务逻辑模型有助于业务规则的实施和维护。保证一致性确保内部状态的一致性通过定义清晰的边界和规则聚合可以在内部强制执行业务规则从而保证数据的一致性。简化复杂性通过组织相关的对象简化了领域模型的复杂性。这有助于开发者更好地理解和扩展系统。 实现手段 定义聚合根选择合适的聚合根是实现聚合的首要步骤聚合根应当是能够代表整个聚合的实体并且拥有唯一标识。限制访问路径只能通过聚合根来修改聚合内的对象不允许直接修改聚合内部对象的状态以此来维护边界和一致性。设计事务策略在聚合内部实现事务一致性确保操作要么全部完成要么全部回滚。对于聚合之间的交互可以采用领域事件或其他机制来实现最终一致性。封装业务规则在聚合内部实现业务规则和逻辑确保所有的业务操作都遵循这些规则。持久化聚合根通常与数据持久化层进行交互以保存聚合的状态。这通常涉及到对象 - 关系映射ORM或其他数据映射技术。 仓储和适配器 特征 封装持久化操作Repository 负责封装所有与数据源交互的操作如创建、读取、更新和删除CRUD操作。领域对象的集合管理Repository 通常被视为领域对象的集合提供了查询和过滤这些对象的方法使得领域对象的获取和管理更为便捷。抽象接口Repository 定义了一个与持久化机制无关的接口使得领域层的代码能够在不同的持久化机制之间进行切换而无需修改业务逻辑。 用途 数据访问抽象为领域层提供了一个清晰的数据访问接口使得领域对象能够专注于业务逻辑的实现而非数据访问的细节。领域对象的查询和管理使得对领域对象的查询和管理变得更加方便和灵活支持复杂的查询逻辑。领域逻辑与数据存储分离通过 Repository 模式领域逻辑与数据存储逻辑分离提高了领域模型的纯粹性和可测试性。优化数据访问Repository 实现可以包含数据访问的优化策略如缓存、批处理操作等以提升应用程序的性能。 实现手段 定义 Repository 接口在领域层定义一个或多个 Repository 接口这些接口声明了所需的数据访问方法。实现 Repository 接口在基础设施层或数据访问层实现这些接口具体实现可能是使用 ORM 框架如 MyBatis、Hibernate 等或者直接使用数据库访问 API如 JDBC 等。依赖注入在应用程序中使用依赖注入DI来将具体的 Repository 实现注入到需要它们的领域服务或应用服务中。使用规范模式Specification Pattern为了构建复杂的查询可以结合使用规范模式将业务规则封装为单独的业务逻辑单元这些单元可以被 Repository 用来构建查询。仓储解耦仓储解耦的手段运用了依赖倒置的设计所有领域需要的外部服务不再直接引入外部的服务而是通过定义接口的方式在领域层定义在基础设施层实现。这样做的好处是当外部服务发生变化时领域层的代码不需要进行修改只需要修改基础设施层的实现即可。   五、DDD 在实际项目中的应用 一项目背景 以一个电商平台为例随着业务的不断发展系统变得越来越复杂传统的开发方式已经难以满足需求。存在的问题包括业务逻辑分散在各个模块中导致代码难以理解和维护系统的扩展性差难以应对新的业务需求不同模块之间的沟通成本高容易出现理解不一致的情况。 二DDD 的应用过程 1. 领域分析 - 与业务专家进行深入沟通了解电商业务的流程和规则。 - 识别出核心领域概念如商品、订单、用户、库存等。 - 确定限界上下文将电商系统划分为商品管理、订单管理、用户管理、库存管理等多个限界上下文。 2. 建立领域模型 - 针对每个限界上下文建立相应的领域模型。 - 例如在订单管理限界上下文中定义订单实体、订单值对象、订单聚合等。 - 确定实体之间的关系以及聚合的边界和规则。 3. 设计战术层面 - 根据领域模型设计相应的领域服务、应用服务和基础设施。 - 领域服务负责实现核心业务逻辑应用服务负责协调领域对象的操作基础设施提供技术支持。 - 例如在订单管理中设计订单创建、订单支付、订单发货等领域服务。 4. 代码实现 - 按照DDD的设计原则进行代码的实现。 - 确保代码的结构清晰易于理解和维护。 - 运用充血模型将业务逻辑封装在领域对象中。 5. 持续优化 - 在项目开发过程中不断对领域模型和代码进行优化。 - 根据业务需求的变化及时调整领域模型和设计。 - 进行持续集成和测试确保系统的质量和稳定性。 三应用效果 通过应用DDD电商平台系统的质量和可维护性得到了显著提升。 1. 代码的可读性和可理解性增强新成员能够更快地熟悉业务和代码。 2. 系统的扩展性得到了提高能够更轻松地应对新的业务需求。 3. 不同模块之间的沟通更加顺畅减少了因理解不一致而导致的问题。 六、总结 领域驱动设计是一种以领域为核心的软件开发方法通过深入理解业务领域建立清晰的领域模型能够有效地提高软件的质量和可维护性。在实际项目中应用DDD需要团队成员具备良好的业务理解能力和技术水平同时需要不断地实践和总结经验。只有这样才能真正发挥DDD的优势打造出高质量的软件系统。 希望本文能够为广大开发者提供一些有益的参考让我们共同在领域驱动设计的道路上不断探索和前行。
http://www.w-s-a.com/news/499803/

相关文章:

  • 网和网站的区别phpcms和帝国cms哪个好
  • wordpress改网站名字长沙网络营销外包
  • 宝塔怎么做第二个网站网站内容设计遵循的原则有
  • 网站违反了 google 质量指南免费ppt模版网站
  • 郑州网站建设郑州网站建设成都那家网站建设好
  • 温州网站排名优化公司如何招聘软件网站开发人员
  • 成都 网站建设公司哪家好襄阳行业网站建设
  • wordpress 调用时间做网站seo的公司哪家好
  • 手机上网站搭建网站账户系统
  • 西乡网站的建设柳州建站
  • 宁夏网站建设怎么样互联网 网站设计
  • 成都关键词seo推广平台手机端关键词排名优化软件
  • 学做软件的网站卡盟平台
  • 网站构建建设案例展示关于做服饰网站的首页
  • 如何建设网站论坛凡科建站手机版登录
  • 建设银行门户网站惠州公司网站建设价格
  • 用python开发网站网站如何取消验证码
  • 公司做企业网站互联网建网站
  • 建网站需要的费用公司注册后怎么做网站
  • 宣传电脑的网站开发运动网站建设教程
  • 网站建设公司都会有哪些花销做网站公司商丘
  • 网站风格有哪些软件定制和开发
  • 公司网络维护具体做什么河南网站推广优化公司哪家好
  • 中学生制作的网站常平哪里有招计算机网站开发的
  • 原创网站模版苏州响应式网站建设
  • 做海报在哪个网站可以找素材网址申请注册方法
  • 网站建设分哪些类别别人做的网站不能用
  • 做网站网站会怎么样全国高校校园网站联盟建设
  • 整站下载器 做网站地图地产项目网站设计
  • 创意设计网站公司手机wap网站建设多少钱