【问题标题】:ABP.IO: Get all items of ReadOnlyAppService without PagedAndSortedResultRequestDtoABP.IO:在没有 PagedAndSortedResultRequestDto 的情况下获取 ReadOnlyAppService 的所有项
【发布时间】:2022-09-12 18:33:42
【问题描述】:

我想使用 ReadOnlyAppService 的强大功能向我的 Angular 前端公开一个简单对象 (NetworkDevice)。所以我写了一个简单的应用服务:

public class NetworkDeviceAppService: ReadOnlyAppService<NetworkDevice, NetworkDeviceDto, Guid>, INetworkDeviceAppService
{
    public NetworkDeviceAppService(IReadOnlyRepository<NetworkDevice, Guid> repository) : base(repository)
    {
    }
}

在 Angular 客户端中,我被迫发送PagedAndSortedResultRequestDto 以获取NetworkDevices

private getNetworkDevices() {
  let request = new PagedAndSortedResultRequestDto();
  this.networkDeviceService
    .getList(request)
    .subscribe(res => {
      this.networkDevices = res.items;
    })
}

但我不想指定MaxCount,因为我想要所有对象,而不需要分页。

我怎样才能以干净的方式实现它。

我想到的不干净的解决方案:

  • maxResultCount 发送 2'000'000
  • 在我的NetworkDeviceAppService 中添加一个方法public async Task&lt;IListResult&lt;NetworkDeviceDto&gt;&gt; GetAllAsync()
  • 在客户端循环请求数据

有没有 PagedAndSortedResultRequestDtoReadOnlyAppService 等价物?

【问题讨论】:

  • 添加方法是要走的路。
  • 我觉得它不干净,因为我在 Swagger 中有冲突:Conflicting method/path combination "GET api/app/network-device" for actions。所以我需要添加一些代码来解决它。
  • 以不同的方式命名,例如GetAllsAsync

标签: angular abp data-paging


【解决方案1】:

最好的选择是覆盖用于 get all 的 GetListAync 方法,这里是虚拟方法本身:

现在,您可以发送一个IPagedResultRequest 类型的空参数来代替通用TGetListInput,这样,如果您决定稍后实现分页,您可以直接填充它,否则,您可以忽略实现分页部分,本质上只是复制整个方法而没有进行分页的行。 顺便说一句,这是在 abp 中实现您自己的自定义方法的标准方法,即找到正在使用的默认值、覆盖、复制,然后根据自己的喜好修改实现。

P.S:附图中的方法在这里找到: Volo.Abp.Application.Services.AbstractKeyReadOnlyAppService.GetListAsync

【讨论】:

  • 我不太喜欢复制粘贴代码来修改一行。如果基本方法发生变化,我将不得不更改我的代码。
  • 也许我可以将ApplyPaging 改写为return query。它可能会误导GetListAsync 的调用者,因为他传递了一个参数来告诉他想要什么,但我不知道我是否可以更好
  • 我明白为什么您可能不喜欢这种方法,如果基础发生变化,您可能想要更改自己的实现。也许您可以创建一个继承该类的类,注册服务,然后覆盖该方法并改用它?这样至少你有一个地方可以改变你的实现。我在我自己的解决方案中这样做并且多年来一直与 abp 合作,他们是优秀的开发人员,大部分时间会创建良好的更改日志,说明如果有的话,会发生重大变化。如果你看够的话,他们有不错的文档。
  • 感谢您的回答并分享您的经验。显然,我希望的“完美”解决方案不能直接在 abp 中实现。我会从你的建议中得到启发,并获得关于 abp 的经验,以便对这类事情有更好的感觉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 2020-04-07
相关资源
最近更新 更多