#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, и он автоматически загружает связанные объекты, поскольку включена отложенная загрузка.