【问题标题】:How to create crud Model in Angular client side for cqrs pattern API?如何在 Angular 客户端为 cqrs 模式 API 创建 crud 模型?
【发布时间】:2020-01-10 14:27:20
【问题描述】:

我在 CQRS Pattent 的 ASP.net 核心中实现 Web API,并使用 mediatR library 我有单独的模型比如CreatePartyCommand, UpadatePartyCommand, DeletePartyCommand, PartyViewModel, PartyQuery

public class CreatePartyCommand : IRequest<int>
{
    public string Name { get; set; }

    public string Family { get; set; }

    public long Code { get; set; }

    public string Title { get; set; }
}

public class UpdatePartyCommand : IRequest<int>
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Family { get; set; }

    public long Code { get; set; }

    public string Title { get; set; }

}

public class DeletePartyCommand : IRequest
{
    public int Id { get; set; }
}

[Route("api/[controller]")]
[ApiController]
public class PartyController : ControllerBase
{
    private readonly IMediator _mediator;

    public PartyController(IMediator mediator)
    {
        _mediator = mediator;
    }

    [HttpGet]
    public async Task<ActionResult<IEnumerable<PartyViewModel>>> Get([FromQuery] PartyQuery partyQuery)
    {
        return Ok(await _mediator.Send(partyQuery));
    }

    [HttpPost]
    public async Task<ActionResult<int>> Create([FromBody] CreatePartyCommand command)
    {
        var productId = await _mediator.Send(command);

        return Ok(productId);
    }

    [HttpPut]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    [ProducesDefaultResponseType]
    public async Task<IActionResult> Update([FromBody] UpdatePartyCommand command)
    {
        await _mediator.Send(command);

        return NoContent();
    }

    [HttpDelete("{id}")]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    [ProducesDefaultResponseType]
    public async Task<IActionResult> Delete(int id)
    {
        await _mediator.Send(new DeletePartyCommand { Id = id });

        return NoContent();
    }
}

在客户端,我有一个用于 Party List 的组件,它分页数据并绑定到 PartyViewModel[] 和一个或两个(我不知道请指导我)组件用于添加和更新

我应该如何在客户端设计 DataModel 或在服务器端进行哪些更改以完成 CRUD 场景?

【问题讨论】:

    标签: angular asp.net-core cqrs clean-architecture


    【解决方案1】:

    您只需要一个界面来输入您的对象。

    export interface IParty {
      Id?: number;
      Name: string;
      Family: string;
      Code: number;
      Title: string;
    }
    

    POST 示例:

    服务:

    create(party: IParty): Promise<IParty> {
      return this.http.post('link', party).toPromise();
    }
    

    组件

    async createParty(party: IParty): Promise<void> {
      const party = await this.partyService.create(party); // if you use promise you should put this code in a try-catch block
    }
    

    【讨论】:

    • 什么意思?
    • 这是IParty应该发送的服务器端post方法public async Task&lt;ActionResult&lt;int&gt;&gt; Create([FromBody] CreatePartyCommand command)IParty的数据会映射到CreatePartyCommand command吗?
    • IParty 是一个接口,但类型为 IParty 的对象映射到每个命令,因为它具有所有必需的属性。
    猜你喜欢
    • 2017-07-27
    • 2019-10-06
    • 2019-11-25
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多