前言: 最近看到ABP官网的一本电子书,感觉写的很好,翻译出来,一起学习下 (Implementing Domain Driven Design) https://abp.io/books DDD简介 领域驱动设计(DDD)是一种通过将实现连接到演进的模型来实现复杂需求的软件开发方法 相对于简单的CRUD应用,DDD更适合于复杂的领域和大规模的应用.它关注核心域逻辑,而不是基础结构细节. 它有助于构建灵活.模块化和可维护的代码库. DDD的实现高度依赖于面向对象编程(Object Oriente…
在进入细节之前,让我们看看一些总体的 DDD 原则 数据库提供者 / ORM 无关性 领域和应用程序层应该与 ORM / 数据库提供程序 无关.它们应该只依赖于 Repository 接口,而 Repository 接口不使用任何 ORM 特定的对象 下面说明这一原则的主要原因: 为了使您的 领域/应用程序 独立于 基础设施,因为基础设施可能在将来更改,或者您可能需要支持第二种数据库类型 通过将基础设施细节隐藏在存储库后面,使您的 领域/应用程序 专注于业务代码. 使您的自动化测试更容易,因为在…
.NET解决方案的分层 下图显示了使用ABP的 应用启动模板 创建的Visual Studio解决方案: 解决方案名称为问题跟踪,它由多个项目组成.通过考虑DDD原则以及开发和部署实践,该解决方案是分层的.下面的小节解释了解决方案中的项目 领域层 领域层分为2个项目 IssueTracking.Domain 是基本的领域层,它包含前面介绍的所有构建块(实体.值对象.域服务.规范.存储库接口等) IssueTracking.Domain.Shared 是一个很单薄的项目,它包含一些属于领域层的类型…
存储库 Repository 是一个类似于集合的接口,领域层和应用程序层使用它来访问数据持久性系统(数据库),以读写业务对象(通常是聚合) 常见的存储库原则是: 在领域层定义一个存储库接口(因为它被用于领域层和应用层),在基础设施层实现(启动模板中的EntityFrameworkCore项目) 不要在存储库中包含业务逻辑. 存储库接口应该是独立于数据库提供者/ ORM的.例如,不要从存储库方法返回DbSet.DbSet是 EF Core 提供的一个对象 为聚合根创建存储库,而不是为所有实体.因为…
用例演示 - 创建实体 本节将演示一些示例用例并讨论可选场景. 创建实体 从实体/聚合根类创建对象是实体生命周期的第一步.聚合/聚合根规则和最佳实践部分建议为Entity类创建一个主构造函数,以保证创建一个有效的实体.因此,无论何时我们需要创建实体的实例,我们都应该使用那个构造函数 参见下面的问题聚合根类: public class Issue : AggregateRoot<Guid> { public Guid RepositoryId { get; private set; } publ…
.net core +codefirst(.net core 基础入门,适合这方面的小白阅读)   前言 .net core mvc和 .net mvc开发很相似,比如 视图-模型-控制器结构.所以.net mvc开发员很容易入手.net core mvc .但是两个又有细微的区别,比如配置.net mvc中Web.config和Global.asax消失,而在.net core mvc中则是Startup.cs.Program.cs.appsettings.json等等.所以想要深入了解.ne…
2019 年起如何开始学习 ABP 框架系列文章-开篇有益 [[TOC]] 本系列文章推荐阅读地址为:52ABP 开发文档 https://www.52abp.com/Wiki/52abp/latest/Welcome-to-52abp 本文的目的是为了让刚刚接触 ABP 框架的同学或者准备接触 ABP 框架的同学,能够理解和搞明白 ABP 框架到底是怎么回事,毕竟它发展了好几年的时间.社区中有很多人做 了 ABP 的资料和文章包括我自己也建立了 52ABP,社区中还有 ABPplus 等等的内…
前言 领域驱动设计,其实已经是一个很古老的概念了,但它的复杂度依旧让学习的人头疼不已. 互联网关于领域驱动的文章有很多,每一篇写的都很好,理解领域驱动设计的人都看的懂. 不过,这些文章对于那些初学者而言,还是如同天书一样. 买本驱动领域的书来看?别逗了,这可不是C#语法入门,哪里有书能写明白的. 想学会领域驱动设计,只有一途——实践,不断的实践. 领域驱动设计是什么? 领域驱动设计就是我们俗称的DDD,英文全拼是Domain-Driven Design. 我认为,理解领域驱动设计的第一步是,顾名…
最近新接了一个业务系统——社区服务系统,为了快速熟悉和梳理老系统的业务逻辑和代码,同时对老系统代码做一些优化,于是打算花上一个月时间不间断地对老系统服务进行重构.同时,考虑到社区业务的复杂性,想起了之前做用户系统时尝试过的领域驱动建模(简称DDD,英文全称为:Domain Driven Design),思量之下,觉得DDD非常适合这种复杂业务逻辑的系统.毫不迟疑,开搞! 之前在做用户系统时,也尝试使用DDD进行业务建模,但迫于项目工期压力,没有进行深入的学习和建模,最后效果不是很理想,为了避免重…
领域驱动设计理解&总结 这篇文章主要是通读<实现领域驱动设计>之后自己的理解和总结(同时也参照一些博文的分析来加深自己的理解): 有些疑问是自定义内容,虽然有自己的理解,但依然感觉较为抽象,后续会通过实践来理解其中的精妙之处. 领域驱动设计指引 领域驱动设计 作为一种软件开发方法,提供了战略上(思考方式) 和 战术上(落地方式) 的建模工具来帮助我们 设计高质量的软件模型: 领域驱动设计 不是关于技术的,而是关于讨论.聆听.理解.发现业务价值 的,目的是将 知识 集中起来,形成 通用语…