【发布时间】:2010-08-04 16:16:50
【问题描述】:
我正在寻找有关我正在创建的应用程序架构的一些指导。情况如下:
我们公司向销售人员发放奖励卡,然后将其分发给客户(用作借记卡)。出于跟踪目的,销售人员必须在卡可以使用之前从我们的系统请求激活(提供有关他们将卡提供给谁以及原因的信息)。前端应用程序是 ASP.NET MVC 2。Windows 服务将定期检查激活请求并调用发卡公司的 Web 服务(实际上涉及两家卡公司和两项服务)来激活它。然后它在DB中将卡的状态标记为已激活。
我的解决方案分为 5 个项目:Web、Data(模型和存储库)、CompanyClients(访问两个 Web 服务)、Service(Windows 服务)和 Tests。
就目前的情况而言,Windows 服务中的一些代码可能如下所示:
using (var repo = new Repository())
{
var cards = repo.GetAllPendingCardsWithOrderAndCompany();
foreach (var card in cards)
{
var client = CompanyClientFactory.GetClient(card);
try
{
client.ActivateCard(card);
card.ActivationDt = DateTime.Now;
}
catch(Exception ex)
{
// Error logging goes here
}
}
repo.Save();
}
这可行,但我不禁想到Anemic Domain Model的问题。我应该向 Card 添加一个名为 Activate() 的方法,该方法获取 Web 服务客户端并尝试真正的激活和日志记录吗?这将使 Windows 服务更清洁:
using (var repo = new Repository())
{
var cards = repo.GetAllPendingCardsWithOrderAndCompany();
foreach (var card in cards)
{
card.Activate();
}
repo.Save();
}
但是,这需要 Data 项目引用 CompanyClients。 CompanyClients 本身已经引用了 Data,因此这将创建循环依赖。我可以将这两个项目混为一谈,但这对我来说并不合适(事实上,我想最终去 POCO 并将模型和数据访问权拆分到不同的项目)。
有什么更好的组织方式吗?
【问题讨论】:
标签: asp.net-mvc web-services architecture