如何正确地将项目添加到数据库和关注点分离

How to properly add items to database and separation of concerns

我正在尝试创建 post 以将实体添加到我的数据库中。我担心我可能会混淆数据层和视图层。我对设计模式非常不熟悉,存储库模式让我很不舒服。

这是我的控制器的一些代码。

[HttpPost("CreateArtItem/{createArtItemRequest}")]
        public async Task<ActionResult<ArtItem>> Put(CreateArtItemRequest createArtItemRequest)
        {
            try
            {
                if (createArtItemRequest != null)
                {
                    ArtItem artItem = new ArtItem()
                    {
                        //mapping
                    };

                    _artRepository.AddArtItem(artItem);
                    _artRepository.Add(artItem);
                    if (await _artRepository.SaveChangesAsync())
                    {
                        return Created(artItem.Id.ToString(), artItem);
                    }
                    else
                    {
                        return this.StatusCode(StatusCodes.Status500InternalServerError, "Database failure.");
                    }
                }
                else
                {
                    return BadRequest();
                }

            }
            catch (Exception e)
            {
                return this.StatusCode(StatusCodes.Status500InternalServerError, "Database failure.");
            }
        }

如果有人能向我解释不同层的工作原理、数据操作是什么,以及这是否是 post 的正确实现,我将不胜感激。

我正在关注 pluralsight 的指南,而老兄的教学也在做类似的事情。

在您的示例中,为了创建新实体并将其保存到数据库中,您使用的是:

  • a 存储库层 将模型(应用程序域的业务实体)与数据库模式对象(表、视图、 ETC..)。您的模型是ArtItem
  • 和一个 视图模型对象, CreateArtItemRequest, 解耦您的 ui 来自您的商业模式。

您必须实施的数据操作是:

  1. CreateArtItemRequest映射到ArtItem
  2. 您存储库
  3. 的方法 Add()
  4. 方法SaveChangesAsync()

从你的示例中我看到你使用 2 种方法将新实体添加到你的存储库(这似乎是一个 属性 或字段,你的 class 控制器的成员)并且您调用了两次存储库的方法来添加创建的新实体,我认为这是一种错误,无论如何它只需要一次调用就可以将实体添加到存储库中。

您应该了解存储库的工作原理,以及它们如何对数据执行操作(AddSaveQuery 等)。