我正在尋找一些關於我正在創建的應用程序的體系結構的指導。這裏是情況:從模型內部或外部調用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