前言: 最近看到ABP官网的一本电子书,感觉写的很好,翻译出来,一起学习下 (Implementing Domain Driven Design) https://abp.io/books DDD简介 领域驱动设计(DDD)是一种通过将实现连接到演进的模型来实现复杂需求的软件开发方法 相对于简单的CRUD应用,DDD更适合于复杂的领域和大规模的应用.它关注核心域逻辑,而不是基础结构细节. 它有助于构建灵活.模块化和可维护的代码库. DDD的实现高度依赖于面向对象编程(Object Oriente…
.NET解决方案的分层 下图显示了使用ABP的 应用启动模板 创建的Visual Studio解决方案: 解决方案名称为问题跟踪,它由多个项目组成.通过考虑DDD原则以及开发和部署实践,该解决方案是分层的.下面的小节解释了解决方案中的项目 领域层 领域层分为2个项目 IssueTracking.Domain 是基本的领域层,它包含前面介绍的所有构建块(实体.值对象.域服务.规范.存储库接口等) IssueTracking.Domain.Shared 是一个很单薄的项目,它包含一些属于领域层的类型…
存储库 Repository 是一个类似于集合的接口,领域层和应用程序层使用它来访问数据持久性系统(数据库),以读写业务对象(通常是聚合) 常见的存储库原则是: 在领域层定义一个存储库接口(因为它被用于领域层和应用层),在基础设施层实现(启动模板中的EntityFrameworkCore项目) 不要在存储库中包含业务逻辑. 存储库接口应该是独立于数据库提供者/ ORM的.例如,不要从存储库方法返回DbSet.DbSet是 EF Core 提供的一个对象 为聚合根创建存储库,而不是为所有实体.因为…
在进入细节之前,让我们看看一些总体的 DDD 原则 数据库提供者 / ORM 无关性 领域和应用程序层应该与 ORM / 数据库提供程序 无关.它们应该只依赖于 Repository 接口,而 Repository 接口不使用任何 ORM 特定的对象 下面说明这一原则的主要原因: 为了使您的 领域/应用程序 独立于 基础设施,因为基础设施可能在将来更改,或者您可能需要支持第二种数据库类型 通过将基础设施细节隐藏在存储库后面,使您的 领域/应用程序 专注于业务代码. 使您的自动化测试更容易,因为在…
用例演示 - 创建实体 本节将演示一些示例用例并讨论可选场景. 创建实体 从实体/聚合根类创建对象是实体生命周期的第一步.聚合/聚合根规则和最佳实践部分建议为Entity类创建一个主构造函数,以保证创建一个有效的实体.因此,无论何时我们需要创建实体的实例,我们都应该使用那个构造函数 参见下面的问题聚合根类: public class Issue : AggregateRoot<Guid> { public Guid RepositoryId { get; private set; } publ…
前言 领域驱动设计,其实已经是一个很古老的概念了,但它的复杂度依旧让学习的人头疼不已. 互联网关于领域驱动的文章有很多,每一篇写的都很好,理解领域驱动设计的人都看的懂. 不过,这些文章对于那些初学者而言,还是如同天书一样. 买本驱动领域的书来看?别逗了,这可不是C#语法入门,哪里有书能写明白的. 想学会领域驱动设计,只有一途——实践,不断的实践. 领域驱动设计是什么? 领域驱动设计就是我们俗称的DDD,英文全拼是Domain-Driven Design. 我认为,理解领域驱动设计的第一步是,顾名…
.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…
文档目录 本节内容: 简介 例子 创建一个接口 实现服务 使用应用服务 相关论述 为什么不只用应用服务? 如何强制你使用领域服务? 简介 领域服务(或服务)用来执行领域操作和业务规则.Eric Evans描述一个好的服务需要三个特点(在他的DDD书里): 操作与领域概念(不是一个实体或值对象天生的一部分)相关. 接口要按照领域模型的其它元素来定义. 操作是无状态的. 与应用服务获取/返回DTO(数据传输对象)不同,领域服务获取/返回领域对象(如实体或值类型). 领域服务可被应用服务或其它领域服务…
前言:之前一直在搭建项目架构的代码,有点偏离我们的主题(DDD)了,这篇我们继续来聊聊DDD里面另一个比较重要的知识点:领域服务.关于领域服务的使用,书中也介绍得比较晦涩,在此就根据博主自己的理解谈谈这个知识点的使用. DDD领域驱动设计初探系列文章: C#进阶系列——DDD领域驱动设计初探(一):聚合 C#进阶系列——DDD领域驱动设计初探(二):仓储Repository(上) C#进阶系列——DDD领域驱动设计初探(三):仓储Repository(下) C#进阶系列——DDD领域驱动设计初探…
前言:之前一直在搭建项目架构的代码,有点偏离我们的主题(DDD)了,这篇我们继续来聊聊DDD里面另一个比较重要的知识点:领域服务.关于领域服务的使用,书中也介绍得比较晦涩,在此就根据博主自己的理解谈谈这个知识点的使用. DDD领域驱动设计初探系列文章: C#进阶系列——DDD领域驱动设计初探(一):聚合 C#进阶系列——DDD领域驱动设计初探(二):仓储Repository(上) C#进阶系列——DDD领域驱动设计初探(三):仓储Repository(下) C#进阶系列——DDD领域驱动设计初探…