我最近对ASP.Net Boilerplate(https://aspnetboilerplate.com)进行了一些分析。我注意到域层(MyProject.Core)具有以下文件夹(这些是默认创建的):
Authorization
Confirguration
Editions
Features
Identity
Localization
MultiTenancy
etc
为什么要将所有这些放在应用程序的域层中?从我所看到的;我相信大部分代码都应该在Application Layer(它也可以是服务层)中找到。
答案 0 :(得分:1)
您看到它被称为Module Zero,它旨在实现ASP.NET Boilerplate框架的所有基本概念,例如租户管理(多租户),角色管理,用户管理,会话,授权(权限管理) ),设置管理,语言管理,审计记录等。
Module-Zero定义实体并实现域逻辑(域层),因为它是系统configuration context
的一部分。
答案 1 :(得分:1)
好问题,如果你只看文件夹名称。但我想你还没有对文件夹中的源代码进行过多的调查。
首先,我不是说它是最好的解决方案架构。我们不断改进它,我们可能有缺点。请注意,我们的方法是最佳实践和方法的混合。务实的方法。我将尝试简要解释一下。
您正在谈论此项目: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域类。与本地化类似,它不包括实际授权逻辑。它还包括一些其他类,但它们没有多少。如果我们有更多的应用层,我们认为将这些放在这里会对我们有所帮如您所知,每个应用程序都可以将自己的应用程序层作为最佳实践。
AppConfigurations用于在不同应用程序(Migrator和Web应用程序)之间共享“配置读取”代码。同样,这可能在另一个“Shared Utils”库中。但我们希望保持解决方案结构的平衡,因此它反映了主要的层和结构,但对于中级开发人员来说并不那么复杂。
只包括EditionManager类,它是版本管理的域服务。
只包括FeatureValueStore,它是一个类似于存储库的适配器类。看到它的代码,它已经是空的。
包括Tenant实体和TenantManager类,它们已经是域层的一部分。同样,这里没有任何内容包括与基础设施相关的多租户功能(如数据过滤或确定当前租户)。
......等等......
所以,不要只看到名字和想法,请更深入地检查项目。有些代码可以移动到上层或utils库,但我认为通用结构很适合启动DDD架构应用程序。