【发布时间】:2012-03-22 03:14:30
【问题描述】:
我正在为 FundManagement 设计一项服务。 FundManagement Service 有一个名为“UpdateFundApprovalDate(FundDTO fund)”的操作。此操作将使用fundingID 的批准日期更新资金表记录。该服务将由“FundManagementUI”客户端使用。
有一条业务规则,如果正在进行合同续订,则不应更新批准日期。
有单独的续订服务。 Renewal 服务使用 Renewal 表中的数据(其中包含 Funding ID)。 Renewal 表的结构是(RenewalID、FundingID、RenewalStartDate、Renewal CompletionDate、RenewalStatus)。有一个名为“public List GetInProgressRenewal(FundDTO fund)”的服务操作。
这里有一个重点。虽然这两种服务都使用相同的数据库,但“进行中”的续订应由续订服务决定。它可以基于更新记录的状态或完成日期。由续订服务决定“进行中”续订的业务逻辑。 FundManagement Service 声称对该逻辑没有所有权。
解释上述行为的 SOA 原则/模式是什么? (使用续订服务来确定“进行中”的续订,尽管续订服务可能会根据自己的利益改变逻辑。)。此类场景的指导方针是什么?
您对任何涉及此类设计决策的文章有什么建议吗?
在 FundManagement 服务中,谁应该负责验证返回的续订列表是否为 NULL?这种验证应该发生在服务操作方法代码内还是 FundBusinessLayer(服务调用者)内?
注意:这里的 SOA 将使用 WCF 实现,而业务类将是使用 C# 开发的 dll。
阅读:
【问题讨论】:
-
两种服务似乎都与同一个对象相关:FundDTO。为什么“基金管理”和“续订”服务是分开的?
-
@degorolls 续订服务主要负责 RenewalDTO。但是,它需要回答资金的续订 - 因此接受 FundDTO。请查看续订表(RenewalID、FundingID、RenewalStartDate、Renewal CompletionDate、RenewalStatus)
标签: c# wcf architecture soa