【问题标题】:Angular with Asp.Net Core WebAPI has ambiguous models带有 Asp.Net Core WebAPI 的 Angular 具有模棱两可的模型
【发布时间】:2020-01-06 01:25:10
【问题描述】:

我使用 Angular 8 作为前端,使用 Asp.Net Core WebAPI 作为后端。

我有一个用于在 Angular 中呈现/绑定/验证 UI 元素的模型。 我有一个使用 WebAPI 中的 Entity Framework Core 对数据库运行 CRUD 操作的模型。

提交 UI 表单后,我需要在捕获的字段上添加一些业务逻辑,然后将其添加/更新到数据库。

我的问题是:

我应该以哪种模型格式将数据传递给 WebAPI?数据库模型还是我需要在 WebAPI 中创建相同的视图模型并发送在 UI 上捕获的数据并在 WebAPI 中添加业务逻辑?

如果我在 WebAPI 中创建视图模型,那么将有 2 个相同的模型,一个在 Angular 项目中,另一个在 WebAPI 中,这将导致单个实体有 3 个模型(2 个视图模型和 1 个数据库模型)。

在这种情况下,最好的方法是什么?

【问题讨论】:

    标签: angular asp.net-core-webapi


    【解决方案1】:

    这并不是说一个实体会有 3 个模型。角度和 webApi 中的视图模型是相同的,因此应该被视为一个模型。使用这些视图模型将数据传递到服务器是一种常见且非常合乎逻辑的方法。

    【讨论】:

    • 所以你的意思是视图模型应该在 Angular 和 WebAPI 中创建?
    • 是的。您可以使用来自模式或 json 文件的某种类生成器。现有的工具可以处理这种情况。这可能会增加复杂性,有时最好手动编写代码。在我们的项目中,我们采用了后一种方法。
    【解决方案2】:

    两边都有两个 View 模型是完全可以的。有时我们可能会遇到这样一种情况,即我们需要在 View 模型中拥有比 Entity 更多的属性,或者在 View 模型中拥有比 Entity 更少的属性。有时我们不需要在网页上显示实体的所有属性。因此,我们应该使用单独的视图模型来克服这种情况。通常这些类称为资源类

    资源类是只包含将在客户端应用程序和 API 端点之间交换的基本信息的类,通常以 JSON 数据的形式,以表示某些特定信息。

    来自 API 端点的所有响应必须返回资源。

    将真实模型表示作为响应返回是一种不好的做法,因为它可能包含客户端应用程序不需要或无权拥有的信息(例如,用户模型可能返回用户密码,这将是一个很大的安全问题)。

    然后我们可以使用像AutoMapper这样的库来处理对象之间的映射。(资源类和实体之间)

    var categories = await _categoryService.ListAsync();
    var resources = _mapper.Map<IEnumerable<Category>, IEnumerable<CategoryResource>>(categories);
    
    return resources;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多