如何管理应用程序中模型的多次使用?

问题描述 投票:0回答:1

我目前正在实现一个应用程序,并且有一个在应用程序的几个不同部分中使用的客户模型。每个部分仅使用客户模型中属性的子集。例如:

  • 在一个地方,我使用两个属性。
  • 在另一个地方,我使用了十个属性。
  • 在另一个地方,我使用了三个属性。

我不确定是否应该为每个用例创建不同的客户模型,还是坚持使用包含所有属性的一个大客户模型。

为每个场景创建不同的模型似乎会导致冗余并且难以维护,尤其是在添加新属性时。然而,在任何地方使用单一的大型模型可能效率低下并暴露不必要的数据。

在应用程序中管理此问题的最佳实践是什么?我应该使用多个模型还是其他方法?任何建议或示例将不胜感激。

您建议采用什么方法来保持代码整洁、可维护且高效?

提前感谢您的帮助!

.net entity-framework blazor coding-style code-maintainability
1个回答
0
投票

EF 专门为此支持投影。 (通过

Select
或各种映射库中的方法,例如 Automapper 的
ProjectTo<T>

我的一般建议是让实体只关注数据域。数据的表示。对于该数据的各种使用者,创建视图模型或 DTO 只关心满足这些需求。投影应该是所有读取类型操作的默认设置,其中视图模型或 DTO 是服务/控制器和最终消费者之间的传输。实体的加载/使用仅用于操作。 (更新/插入)EF 支持使用分离的实体,但这确实会导致系统成为问题的兔子洞并导致数据库操作效率降低。

对于非常大的系统,您还可以使用有界 DbContext,它们本质上只是专门用于某些功能的 DbContext,您可以在其中指定一个作为负责给定实体的所有者,而共享对该表的引用的其他人可以自己使用简化的只读实体定义.

有界场景的一个很好的例子是身份验证/授权。如果您使用 ASP.Net Core 的身份验证及其用户和角色等,您可以拥有一个 AuthenticationDbContext 来扩展 .Net Core 的 AuthenticationDbContext 并管理身份验证质询、管理用户等以实现管理级功能。对于主应用程序类,您可能还想引用 Users 以及 CreatedBy/LastModifiedBy 等内容,但您不需要,也没有暴露角色和权限等详细信息的风险。因此主应用程序 DbContext 可以拥有自己的汇总 User 类仅提供应用程序可能需要显示/使用的信息。 (用户 ID、姓名、电子邮件等)

© www.soinside.com 2019 - 2024. All rights reserved.