Architektura, rozkład projektów, CQRS a restful api - co, jak i gdzie

0

Tworze nowy projekt i brakuje mi wiedzy i doświadczenia odnośnie tego gdzie i co wrzucać.
Moja solucja to aplikacja angularowa SPA, WebApi dla tej aplikacji, infrastruktura do komunikacji z db, mikroserwisami i domena.

Zastanawiam się gdzie umieszczać odpowiednie rzeczy.

  1. Czy komendy / zapytania z CQRS powinny być w projekcie Domain tam gdzie modele domenowe? W końcu są to czyste klasy POCO bez zachowania
  2. Czy CommandHandlery powinni być w projekcie Web tam gdzie WebApi czy w Infrastrukturze tam gdzie serwisy integrujące?
  3. Czy QueryHandlery powinny być w Infrastrukturze bo jest to miejsce najbliżej bazy danych - źródła danych?
  4. Czy CommandBus powinno coś zwracać? Czy sama komenda coś powinna zwracać?
  5. CQRS i restful api
    Mam komendę:
public class CashCaseCloseCommand : ICommand
{
    public Guid Id { get; set; }
}

I teraz api kontolerów:

[HttpPatch]
public IHttpActionResult Patch([FromBody] CashCaseCloseCommand command)
{
    this._commandBus.Send(command);
    return Ok();
}
[HttpPatch, Route("{id:Guid}/close")]
public IHttpActionResult Patch([FromUri] Guid id)
{
    this._commandBus.Send(new CashCaseCloseCommand { Id = id });
    return Ok();
}

Które podejście jest lepsze?

0

1: Jeżeli wystawiasz te komendy komuś innemu, to można dać je do innego, w przeciwnym wypadku dla mnie to przekombinowane.
2: Moim zdaniem nie powinny być w WebAPI.
3: Nie, jeżeli dobrze rozumiem Twój opis infrastruktury. QueryHandler też jest częścią logiki aplikacji.
4: Zazwyczaj mówią, że nie powinien zwracać nic, ale czasami może być przydatny jakiś rezultat do obsługi błędów. Wielu robi to też wyjątkami.
5: Oba mają wady i zalety. Jeżeli druga strona wie, że wysyła komendę (bo zna Twoje szczegóły implementacyjne), to pierwsze podejście. Jeżeli nie wie, to lepsze jest drugie, bo wtedy szczegóły nie wyciekają (chociażby w Swaggerze).

1 użytkowników online, w tym zalogowanych: 0, gości: 1