Maison >développement back-end >C++ >Comment l'approche basée sur les messages de ServiceStack peut-elle améliorer la conception des demandes DTO ?

Comment l'approche basée sur les messages de ServiceStack peut-elle améliorer la conception des demandes DTO ?

DDD
DDDoriginal
2024-12-31 11:31:21242parcourir

How Can ServiceStack's Message-Based Approach Improve Request DTO Design?

ServiceStack Request DTO Design

Les frameworks de services Web comme WCF et WebAPI encouragent à considérer les appels d'API comme des appels de méthode C# normaux, avec des signatures spécifiques pour chaque demande. En revanche, ServiceStack adopte une approche basée sur les messages dans laquelle l'intégralité de la requête est capturée dans le message de demande. Cela offre des avantages tels que :

  • Condensation de plusieurs appels RPC en un seul service basé sur un message
  • Regroupement des services en fonction de la sémantique des appels et des types de réponse

Refactoring des services GetBooking Limits

Application de ces concepts à votre Pour les services GetBookingLimit et GetBookingLimits, tenez compte des éléments suivants :

  • Distinguer les opérations de service des types : Gardez les DTO de demande (opérations) séparés des DTO de réponse (types de données).
  • Renvoyer les réponses génériques : Supprimez la propriété ResponseStatus des DTO de réponse, car les erreurs seront désormais renvoyé via le DTO générique ErrorResponse.
  • Gardez une nomenclature cohérente : Réservez Get pour les requêtes clés uniques et utilisez Rechercher ou Rechercher pour les requêtes qui renvoient plusieurs résultats.
  • Visez les contrats auto-descriptifs : Utilisez des noms de propriété descriptifs pour faciliter la demande de DTO. comprendre.

Code refactorisé :

[Route("/bookinglimits/{Id}")]
public class GetBookingLimit : IReturn<BookingLimit>
{
    public int Id { get; set; }
}

[Route("/bookinglimits/search")]
public class FindBookingLimits : IReturn<List<BookingLimit>>
{
    public DateTime BookedAfter { get; set; }
}

[Authenticate]
public class BookingLimitService : AppServiceBase 
{ 
    public BookingLimit Get(GetBookingLimit request) 
    { 
        return new BookingLimit {...};
    }

    public List<BookingLimit> Get(FindBookingLimits request) 
    { 
        return new List<BookingLimit> {...};
    }
}

Gestion et validation des erreurs

  • Les erreurs peuvent être gérées en lançant des exceptions C# ou en utilisant Fluent Validation.
  • Enregistrez les validateurs avec containers.RegisterValidators(typeof(CreateBookingValidator).Assembly) pour une validation automatisée sans ajouter de code invasif aux services.
  • Envisagez d'utiliser un seul DTO de requête StoreBooking pour la création et les mises à jour. .

En suivant ces principes, vous pouvez concevoir et mettre en œuvre efficacement des DTO de demande à l'aide L'approche basée sur les messages de ServiceStack, favorisant la sécheresse et la clarté du code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn