【问题标题】:ASP net Core Razor Pages - split models for EF and viewsASP net Core Razor Pages - EF 和视图的拆分模型
【发布时间】:2019-07-25 03:46:57
【问题描述】:

我真的很想从其他开发者那里得到一些额外的意见。 目前,我正在做一个只使用一些数据库表的小项目。我在想的是,将模型拆分为数据库和视图模型是否有意义。目前,只有数据库模型在使用,它也用于所有页面/视图。

最初我认为将它们完全分开可能是个好主意,以防出现一些数据库更改。 但老实说,我没有看到拆分它的好处。如果应该重命名列,则可以使用某些属性而不影响 UI。

拆分它的唯一原因是在不需要时不加载所有列。现在,当视图从数据库中获取一些信息时,所有列都会被加载。但是,即使不需要,这也是非常少的流量。 我记得在以前有关 ASP.Net Core 的一些文档中也提到了 MS 将其拆分。但似乎他们改变了。此外,关于 EF 的文档也没有提到任何模型分离。

【问题讨论】:

  • 有些人从一开始就这样做,然后有些人后来希望他们从一开始就这样做。
  • 这是否意味着您总是会拆分它?在开始而不是以后更好?但究竟为什么呢?
  • 一个小项目是一个更好的地方来设置更多的面向对象的方式并同时学习。是的,这在当时似乎是一种开销,但您不仅仅是在构建一个 CRUD 应用程序。视图中总会有业务需求更改,这将导致您在实体上添加属性(但不在数据库中),这将不断增加单个实体的大小。在您不希望通过整个实体的项目中将需要验证或列表。 MS 示例侧重于简化 EF 访问,而不是侧重于设计本身。

标签: asp.net entity-framework-core razor-pages


【解决方案1】:

我也有类似的想法(尤其是当我为 JSON blob 使用字符串支持字段时)。您可以使用匿名类型来限制返回的数据。

像这个例子一样 (https://docs.microsoft.com/en-us/ef/core/querying/client-eval)

var blogs = context.Blogs
    .OrderByDescending(blog => blog.Rating)
    .Select(blog => new
    {
        Id = blog.BlogId,
        Url = StandardizeUrl(blog.Url)
    })
    .ToList();

EF Core 2.1 还引入了Query Types,它可以帮助你的视图对象和数据库模型之间的关系更加清晰。

【讨论】:

  • 是的,没错。但这只有在视图中的博客不需要其他属性的情况下才有可能。目前还可以,但不确定将来是否也会这样。
【解决方案2】:

我决定将解决方案拆分为清洁架构(Web、基础架构和核心层)。 https://docs.microsoft.com/en-us/dotnet/standard/modern-web-apps-azure-architecture/common-web-application-architectures

找到最合适的一个,并且在应用程序开始增长时很容易扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2020-05-08
    • 2021-07-11
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多