洋葱架构:核心vs领域

本文关键字:vs 领域 核心 洋葱 | 更新日期: 2023-09-27 18:14:57

我研究洋葱架构已经有一段时间了,我分析了几个样本VS的解决方案,仍然不能理解Onion ArchitectureCoreDomain的区别。

  • 在此解决方案中,核心(项目)位于域(解决方案文件夹)内。
  • 这里没有Core,只有Domain
  • 在Jeffrey Palermo的CodeCampServer示例应用程序中,核心中有域。所以,基本上看起来Core是由DomainServices组成的。
  • 在这个xDriven项目中Core分为Core.ApplicationCore.Domain

我完全糊涂了。你能给我解释一下,在这样的架构下,CoreDomain的实际区别是什么?

例如,我有这个类。简单的棋盘游戏,比如井字游戏。这绝对是一种无处不在的语言,所以我应该在Entities文件夹中创建它吗?在Core中域本身呢?
public class Game
{
    public GameState State { get; set; }
    public Board Board { get; set; }
    public IEnumerable<Player> Players { get; set; }
    public bool Move(int playerId, int field)
    {
        //Check if Player's move will finish game. If yes, return true
        return false;
    }
}

洋葱架构:核心vs领域

在我看来,只要您遵循Onion Architecture的指导方针,项目的实际命名并不那么重要。它更多的是关于构建你的项目,以便轻松地使用它并对其进行推理。

在中心有独立的对象模型是很重要的。然后围绕这个模型构建应用程序。

我完全糊涂了。你能给我解释一下,在这种架构中Core和Domain的实际区别是什么吗?

你可以把Core看作是你的体系结构中心模型的每个方面的集合,这些方面应该是独立的。在那篇关于洋葱架构的文章中,有Application Core,它包含Domain Model, Domain ServicesApplication Services。这取决于你的项目,你在Core。也许在你的情况下,没有必要引入Application Services

因此,总结一下,构建你的解决方案,使其易于你和其他人推理。让您解决方案中的结构成为使用该项目的其他人的指导方针。我的意思是,如果有人必须在项目中实现新功能,解决方案应该指导他应该放在哪里,例如Domain Entities等。我的最后一个想法是,比构建(命名)项目更重要的是专注于遵守Onion Architecture的四个原则,正如这里所描述的

将Arkadiusz K的观点加在一起,即核心是一个重载术语,在DDD语音中,核心域也可以用于与(支持/通用)子域相对。也就是说,你有一个或几个关键的领域是你的核心业务,其他领域是辅助的,可以外包或作为现成的解决方案购买。

解空间中的域和子域对应关系是有界上下文,它们可以用代码中的命名空间表示。这可能是一些例子的作者所考虑的。