Я ищу руководство по архитектуре создаваемого приложения.Вот ситуация:
Наша компания выдает продавцам поощрительные карточки, которые затем выдаются клиентам (используются как дебетовые карточки).В целях отслеживания продавец должен запросить активацию в нашей системе, прежде чем использовать карту (предоставив информацию о том, кому она была передана и почему).Фронтальным приложением является ASP.NET MVC 2. Служба Windows будет периодически проверять запросы на активацию и вызывать веб-службу компании, выпустившей карту (на самом деле это две компании-карты и две службы), чтобы активировать ее.Затем он отмечает состояние карты как активированной в БД.
Мое решение разделено на 5 проектов: Web, Data (модель и хранилище), CompanyClients (доступ к двум веб-службам), Service (окна).Служба) и тесты.
В настоящее время некоторые вещи, которые можно использовать в службе 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();
}
Это работает, но я не могу не думать овопрос Модель анемичной области .Должен ли я добавить в Card метод с именем Activate (), который получает клиент веб-службы и пытается выполнить активацию и сам журнал?Это сделает службу Windows намного чище:
using (var repo = new Repository())
{
var cards = repo.GetAllPendingCardsWithOrderAndCompany();
foreach (var card in cards)
{
card.Activate();
}
repo.Save();
}
Однако для этого потребуется, чтобы проект Data ссылался на CompanyClients.Сам CompanyClients уже ссылается на Data, поэтому это создаст круговую зависимость.Я мог бы объединить два проекта вместе, но мне это не кажется правильным (поскольку я хотел бы в конечном итоге перейти к POCO и разделить модель и доступ к данным для различных проектов).
Есть мысли о лучшем способе организовать это?