gpt4 book ai didi

c# - 在哪里加载数据以填充具有多个 poco 类的 View 模型

转载 作者:太空狗 更新时间:2023-10-30 01:07:03 25 4
gpt4 key购买 nike

我必须在表单中显示一个对象(一个 POCO 类)。

在我的 Controller 中,我从对象存储库中获取对象数据。

但在表单中,我还必须显示有关对象的一些额外数据,例如国家名称而不是 countryid、分配的人数(从 1:N 关系中获取)、编辑历史(从另一个表中获取)和位“CanBeCancelled”。

问题是:我应该把这个逻辑放在哪里?

我想到了这些替代方案:

  • 存储库本身:创建一个额外的函数返回这个确切的 View 模型
  • 转换服务,将类转换为viewmodel(它知道从哪里获取数据)
  • Controller :它知道在 View (模型)中显示什么数据,所以它应该获取所有数据来自不同的存储库

什么是放置这个逻辑的好方法(“这个逻辑”我的意思是知道人数在存储库 A 中获取的逻辑,历史由存储库 B 获取,国家名称由 CountryRepository 获取并且 bool 值“CanBeCancelled”由 StateEngine 服务获取)?

最佳答案

如果没有其他限制,我会遵循 Single Responsibility Principle 规定的简单规则- 每一层都应该做自己的工作,并假定其他层正确地完成他们的工作。在这种情况下,存储库返回业务对象,服务处理业务对象,而 Controller 只知道如何正确显示该对象。详情:

  1. 人数、历史和国家名称已经在存储中,应该来自那里。所以存储库应该返回一个完整的对象——只要操作是关于同一个实体的。

  2. 当流程涉及多个实体时,服务负责调用相应的存储库并构造对象。

  3. 根据业务规则算出来的东西,也是服务对象的工作。

  4. Controller 通过调用服务的单个方法接收完整的对象并显示它

一旦您决定更改某些内容(比如有关如何允许取消对象的业务规则),这种方法的好处就会显而易见。这与访问数据库无关,也不涉及应用程序 UI,因此在这种情况下您唯一要更改的地方是服务实现。这种方法允许您做到这一点,而无需更改存储库和 Controller 的代码。

关于c# - 在哪里加载数据以填充具有多个 poco 类的 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13684230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com