我正在寻找一些关于我正在创建的应用程序的体系结构的指导。这里是情况:从模型内部或外部调用Web服务?
我们公司给销售员发奖励卡,然后分发给客户(像借记卡一样使用)。为了进行跟踪,推销员必须在使用该卡之前向我们的系统申请激活(提供关于他们给卡的人以及为什么的信息)。前面的应用程序是ASP.NET MVC 2.Windows服务将定期检查激活请求,并从发出该卡的公司调用Web服务(实际上有两个卡公司和两个涉及的服务)来激活它。然后它将该卡的状态标记为在数据库中激活。
我的解决方案分为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问题的思考。我应该添加一个名为Activate()的方法来获取Web服务客户端并尝试真正的激活和记录本身?这将使Windows服务更清洁:
using (var repo = new Repository())
{
var cards = repo.GetAllPendingCardsWithOrderAndCompany();
foreach (var card in cards)
{
card.Activate();
}
repo.Save();
}
但是,这将需要Data项目引用CompanyClients。 CompanyClients本身已经引用数据,所以这会创建一个循环依赖。我可以将这两个项目合并到一起,但这对我来说并不合适(因为它是,我最终想去POCO并将模型和数据分解到不同的项目中)。
有更好的方法来组织这个想法吗?
谢谢。我目前有一个代理类实现客户端访问的接口。我将客户端与代理放在同一个项目中,因此我的域名不需要处理自动生成的类型化数据集,但是您可能应该将它们放在一起。 – ShawnFumo 2010-08-09 12:21:41