Domain Logic on API

Ik ontwerp een openbare API voor een systeem. Ik heb twijfels over waar moet ik berekeningen of domein logica zetten, moet dit zich bevinden op de API of op de client die het verbruikt?

Laten we zeggen dat we een banksysteem hebben, waar moet ik de logica voor het berekenen van contante bedragen zetten? Zal de consument alleen de stortingsmethode van de API aanroepen en de API de laten afhandelen? berekeningen?

API wordt gebouwd met behulp van ASP.NET WebApi

Bedankt

0
Wordt deze API gebruikt door externe applicaties (dat wil zeggen applicaties buiten uw ontwikkeling), of interne applicaties die u ook bouwt en implementeert?
toegevoegd de auteur David, de bron
In dat geval, als anderen de API gaan gebruiken, is het alleen logisch om interne bedrijfslogica achter de API te plaatsen. Als het extern gericht is, kun je er niet van uitgaan dat consumerende klanten de bedrijfslogica zullen implementeren en dat ze dat ook niet moeten doen. Als het puur sandbox was en u gebruikte applicaties gebruikte, dan kon u de bedrijfslogica aan beide kanten plaatsen en dezelfde domeinmodellen delen met server- en client-side applicaties. (Het CSLA-framework werkt ongeveer zoals dit.)
toegevoegd de auteur David, de bron
Hallo David, eigenlijk allebei. We kunnen ons eigen banksysteem hebben en het verkopen, anderen zijn misschien geïnteresseerd in de ontwikkeling van hun eigen banksysteem en gebruiken dus de API
toegevoegd de auteur gnaungayan, de bron

1 antwoord

Ik weet niet zeker of ik uw probleem hier volledig begrijp, maar de bedrijfslogica moet door de API worden afgehandeld (ik vraag me af hoe het omgekeerde zou zijn).

Vanuit het oogpunt van implementatie zou u ze moeten behandelen als services om het systeem te ontkoppelen, zodat u het eenvoudig kunt testen. De onderstaande is bijvoorbeeld uw CalcService :

public interface ICalcService { 

    double Calc(double left, double right);
}

public class CalcService : ICalcService {

    public double Calc(double left, double right) { 

        return (left + right);
    }
}

Vervolgens moet deze service als hieronder in uw controller worden geïnjecteerd:

public DepositController : ApiController { 

    private readonly ICalcService _calcService;

    public DepositController(ICalcService calcService) { 

        _calcService = calcService;
    }

    //now, you can use the _calcService inside your action methods
}

Om het te laten werken, moet u uw service registreren via uw IoC-container.

1
toegevoegd
Bedankt Tugberk voor een voorbeeld. Ja, ik ben geneigd om de logica op de API te zetten maar terwijl ik de API en het vlaggenschipproduct ontwikkel dat het zal gebruiken, lijkt het erop dat ik de logica aan beide kanten, met name de validaties, dupliceer.
toegevoegd de auteur gnaungayan, de bron
ASP.NET Web API heeft een ingebouwd validatiesysteem. U moet dit voorbeeldproject doorlopen dat is gebouwd tegen de RC: code.msdn.microsoft.com/Contact-Manager-Web-API-0e8e373d en deze TechEd NA 2012-sessie: channel9.msdn.com/Events/TechEd/NorthAmerica/2012/DEV309
toegevoegd de auteur tugberk, de bron