ASP.NET 样板域层似乎包含非域 类
ASP.NET Boilerplate Domain Layer appears to contain non-Domain classes
我最近对 ASP.Net 样板 (https://aspnetboilerplate.com) 做了一些分析。我注意到域层 (MyProject.Core) 具有以下文件夹(这些是默认创建的):
Authorization
Confirguration
Editions
Features
Identity
Localization
MultiTenancy
etc
为什么要将所有这些都放在应用程序的域层中?据我所见;我相信大部分代码应该在应用层(也可以是服务层)中找到。
你看到的叫做Module Zero,它旨在实现ASP.NET样板框架的所有基本概念,例如租户管理(多租户)、角色管理、用户管理、会话、授权(权限管理)、设置管理、语言管理、审计日志等。
零模块定义实体并实现领域逻辑(领域层),因为它是您系统 configuration context
的一部分。
问得好,如果你只看文件夹名称。但我想你还没有深入研究文件夹中的源代码。
首先,我并不是说它是最好的解决方案架构。我们正在不断改进它,我们可能会有错误。请注意,我们的方法是最佳实践和务实方法的结合。我会尽量简单地解释一下。
您正在谈论这个项目:https://github.com/aspnetboilerplate/module-zero-core-template/tree/master/aspnet-core/src/AbpCompanyName.AbpProjectName.Core 那么,让我们调查一下文件夹:
本地化
它不包含任何本地化逻辑(它是在框架级别,在 ABP 中完成的。因此,它在基础设施层)。它只是定义本地化文本。
虽然通常它可以很容易地移动到 web 层(在 Core 项目中没有直接依赖),但我们将它放在 Core 层中,因为我们认为它可能在另一个应用程序中也需要。认为您有一个 Windows 服务只引用了 .Core 项目并且想要使用本地化文本,比如用他自己的语言向用户发送电子邮件。请注意,Windows 服务通常不应引用 Web 层。因此,我们在这里采用务实的方法。我们可以将本地化添加到另一个 dll 项目,但这会使解决方案更加复杂。
授权
主要包括User、Role..实体以及UserManager和RoleManager域classes。与本地化类似,它不包括实际的授权逻辑。它还包括其他一些 classes,但它们赚的不多。我们认为如果我们有更多的应用程序层,将它们放在这里会对我们有所帮助。如您所知,作为最佳实践,每个应用程序都可以拥有自己的应用程序层。
配置
AppConfigurations 用于在不同应用(Migrator 和 Web 应用)之间共享 'configuration reading' 代码。同样,这可能在另一个 "Shared Utils" 库中。但我们希望保持解决方案结构平衡,因此它反映了主要的层和结构,但对于中级开发人员来说并没有那么复杂。
版本
仅包括 EditionManager class,这是一个用于版本管理的域服务。
特点
只包括 FeatureValueStore,它是一个类似于存储库的适配器 class。看代码,已经空了
多租户
包括 Tenant 实体和 TenantManager class,它们已经是域层的一部分。同样,这里没有任何内容包括与基础架构相关的多租户功能(如数据过滤或确定当前租户)。
...等等...
所以,不要光看名字就有想法,请深入检查项目。一些代码可以移动到上层或 utils 库,但我认为一般结构对于启动 DDD 架构的应用程序是好的。
我最近对 ASP.Net 样板 (https://aspnetboilerplate.com) 做了一些分析。我注意到域层 (MyProject.Core) 具有以下文件夹(这些是默认创建的):
Authorization
Confirguration
Editions
Features
Identity
Localization
MultiTenancy
etc
为什么要将所有这些都放在应用程序的域层中?据我所见;我相信大部分代码应该在应用层(也可以是服务层)中找到。
你看到的叫做Module Zero,它旨在实现ASP.NET样板框架的所有基本概念,例如租户管理(多租户)、角色管理、用户管理、会话、授权(权限管理)、设置管理、语言管理、审计日志等。
零模块定义实体并实现领域逻辑(领域层),因为它是您系统 configuration context
的一部分。
问得好,如果你只看文件夹名称。但我想你还没有深入研究文件夹中的源代码。
首先,我并不是说它是最好的解决方案架构。我们正在不断改进它,我们可能会有错误。请注意,我们的方法是最佳实践和务实方法的结合。我会尽量简单地解释一下。
您正在谈论这个项目:https://github.com/aspnetboilerplate/module-zero-core-template/tree/master/aspnet-core/src/AbpCompanyName.AbpProjectName.Core 那么,让我们调查一下文件夹:
本地化
它不包含任何本地化逻辑(它是在框架级别,在 ABP 中完成的。因此,它在基础设施层)。它只是定义本地化文本。
虽然通常它可以很容易地移动到 web 层(在 Core 项目中没有直接依赖),但我们将它放在 Core 层中,因为我们认为它可能在另一个应用程序中也需要。认为您有一个 Windows 服务只引用了 .Core 项目并且想要使用本地化文本,比如用他自己的语言向用户发送电子邮件。请注意,Windows 服务通常不应引用 Web 层。因此,我们在这里采用务实的方法。我们可以将本地化添加到另一个 dll 项目,但这会使解决方案更加复杂。
授权
主要包括User、Role..实体以及UserManager和RoleManager域classes。与本地化类似,它不包括实际的授权逻辑。它还包括其他一些 classes,但它们赚的不多。我们认为如果我们有更多的应用程序层,将它们放在这里会对我们有所帮助。如您所知,作为最佳实践,每个应用程序都可以拥有自己的应用程序层。
配置
AppConfigurations 用于在不同应用(Migrator 和 Web 应用)之间共享 'configuration reading' 代码。同样,这可能在另一个 "Shared Utils" 库中。但我们希望保持解决方案结构平衡,因此它反映了主要的层和结构,但对于中级开发人员来说并没有那么复杂。
版本
仅包括 EditionManager class,这是一个用于版本管理的域服务。
特点
只包括 FeatureValueStore,它是一个类似于存储库的适配器 class。看代码,已经空了
多租户
包括 Tenant 实体和 TenantManager class,它们已经是域层的一部分。同样,这里没有任何内容包括与基础架构相关的多租户功能(如数据过滤或确定当前租户)。
...等等...
所以,不要光看名字就有想法,请深入检查项目。一些代码可以移动到上层或 utils 库,但我认为一般结构对于启动 DDD 架构的应用程序是好的。