Совокупная логика корневого домена

#c# #asp.net-mvc-3 #entity-framework-4.1 #domain-driven-design

#c# #asp.net-mvc-3 #entity-framework-4.1 #дизайн, управляемый доменом

Вопрос:

Предположим, что у меня есть эти 3 класса ниже :

 public class User 
{
   public int UserId { get; set; }
   public ICollection<Location> { get; set; }
}
public class Location
{
   public int LocationId { get; set; }
   public int UserId { get; set; }
   public ICollection<Sale> Sales { get; set; }
}
public class Sale
{
  public int SaleId { get; set; }
  public int LocationId { get; set; }
  public decimal Cash { get; set; }
}
 

У меня есть требование на одной странице, чтобы я отображал общую сумму денежных средств для всех местоположений пользователя, который вошел в систему. Я подумываю о том, чтобы поместить метод GetTotalCash() в класс Locations и реализовать там суммирование с помощью LINQ, но проблема в том, что я буду обращаться к объекту Locations через класс User, и я не смогу вызвать метод суммирования, поскольку свойство Location является ICollection для пользовательского класса. Должен ли я вместо этого поместить логику в класс User? но это не имеет смысла, поскольку это не поведение пользовательского объекта или нет?

Кстати, сначала я использую код EF 4.1 и MVC 3.

Большое спасибо!

Ответ №1:

Реализовать GetTotalCash() метод в классе locations и в классе user реализовать GetCashForLocation() , чтобы получить наличные деньги для выбранного местоположения (который будет делегировать вызов GetTotalCash() классу locations и реализовать GetTotalCash() в классе user, который будет перебирать все местоположения и суммировать их денежные средства.

затем предосудительные ограничения присваиваются каждому информационному экспертному классу и делегируются из совокупного корня

Комментарии:

1. «затем предосудительные действия присваиваются каждому информационному экспертному классу и делегируются из совокупного корня». Что вы имеете в виду под этим?

2. Кроме того, кажется, что GetCashForLocation должен принадлежать репозиторию?

3. Информационный эксперт — это один из паттернов ПОНИМАНИЯ en.wikipedia.org/wiki/GRASP_ (объектно-ориентированный дизайн) эти шаблоны описывают, где вы должны разрабатывать методы и как распределять обязанности.

4. о GetCashForLocation .. если пользователь полностью загружен со всеми его местоположениями и продажами, тогда нет необходимости снова извлекать эту информацию из репозитория, поскольку она уже загружена у пользователя, если она не загружена, тогда репозиторий — это подходящее место

5. Спасибо за ссылку. Что касается загрузки со всеми ее местоположениями, я использую EF, и он автоматически загружает связанные объекты, поскольку включена отложенная загрузка.