I am designing a service for FundManagement. The FundManagement Service has an operation named “UpdateFundApprovalDate(FundDTO fund)”. This operation will update the fund table record with approval date for the fundingID. The service will be used by a “FundManagementUI” client.
There is a business rule that the approval date should not be updated if contract renewal is in progress.
There is a separate Renewal Service. The Renewal service uses data from Renewal table (which has Funding ID in it). Structure of Renewal table is (RenewalID, FundingID, RenewalStartDate, Renewal CompletionDate, RenewalStatus). There is a service operation named “public List GetInProgressRenewal(FundDTO fund)”.
One important point is here. Though both the services are using the same database, the “In Progress” renewals should be decided by the Renewal service. It can be based on status or completion date of renewal record. It is upto the Renewal Service to decide the business logic for “In Progress” renewals. The FundManagement Service claims no ownership on that logic.
What is the SOA principle/ pattern that explains the above behavior? (Use of Renewal Service for determining the “In Progress” renewals though there is a risk that the Renewal Service can change the logic on its own interest.). What are the guidelines on such scenarios?
Do you have any suggestions for any articles that deals with such design decisons?
Inside the FundManagement Service, who should be responsible for validating that the list of renewals returned is NULL? Where this validation should happen inside service operation method code or inside the FundBusinessLayer (who the service calls)?
Note: Here the SOA will be implemented using WCF and the business classess will be dlls developed using C#.
READING: