洋葱架构:核心与域

Onion Architecture: Core vs Domain

我研究Onion Architecture已经有一段时间了,我已经分析了一些示例VS的解决方案,但仍然无法理解[=13=中CoreDomain之间的区别].

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

例如我有这个class。简单的棋盘游戏,例如井字棋。它绝对是无处不在的语言,所以我应该在域内的 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;
    }
}

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

拥有居中的独立对象模型很重要。然后您围绕该模型构建您的应用程序。

I'm totally confused. Can you explain me, what's the actual difference between Core and Domain in such architecture?

您可以将 Core 视为应该独立的架构中心模型各个方面的集合。在那个 Post about Onion Architecture 中有 Application Core,它包含 Domain ModelDomain ServicesApplication Services。这取决于您的项目 Core。也许在你的情况下没有必要引入 Application Services.

因此,总结一下,构建您和其他人都可以轻松推理的解决方案。让解决方案中的结构成为其他参与该项目的人的指南。我的意思是,如果有人必须在项目中实现新功能,解决方案应该指导他应该放在哪里,例如 Domain Entities 等。 我最后的想法是,比构建(命名)项目更重要的是继续专注于遵守 Onion Architecturedescribed here

的四个原则

为了补充 Arkadiusz K 的观点,即核心是一个重载的术语,在 DDD 语音中核心域也可以用来代替 (Supporting/Generic) 子域。也就是说,您有一个或几个关键领域是您的核心业务,而其他领域是辅助的,可以作为现成的解决方案外包或购买。

解决方案space中的Domains和subdomains对应的是Bounded Contexts,这些在代码中可以表示为namespaces。这可能是某些示例的作者所考虑的。