У меня есть две модели, Ship
и Sector
, где Ship
имеет свойство с именем Location
, который является экземпляром класса Sector
и Destination
, который является еще одним экземпляром класса Sector
. Учитывая инкапсуляцию, сам корабль должен нести ответственность за обновление этих свойств, поэтому я сделал метод Move()
, который вычисляет, насколько прогрессирован корабль, и должен соответствующим образом обновить свойство Location
. Если новое местоположение отличается от места назначения (есть промежутки между ними и судно находится на полпути), как мне получить ссылку на экземпляр этого Sector
?Как обновить свойство сложного типа (модели)?
public class Ship
{
public Sector Location { get; set; }
public Sector Destination { get; set; }
public void Move()
{
// some magic happens here. Now I would like to update the Location.
}
}
Я использую структуру Entity Framework и шаблон репозитория. Поэтому у меня есть SectorRepository
и ShipRepository
, которые реализуют следующий интерфейс.
public interface IRepository<T>
{
T Get(int id);
T Get(Expression<Func<T, bool>> predicate);
void Add(T entity);
void Remove(T entity);
List<T> GetAll();
List<T> Search(Expression<Func<T, bool>> predicate);
}
Я мог бы сделать экземпляр SectorRepository
в модели кораблей, но чувствует, как Tight Coupling, который я хотел бы избежать, если это возможно.
Мне нужно было внести небольшие изменения в мою архитектуру, но в конечном итоге выбрал метод 'ISectorRepository' для метода' Move() 'как лучший подход. Я рассмотрел ваше второе предложение, но обнаружил его более сложным в моей ситуации. Секторы организованы в сетке, но идентификаторы SectorID являются полуслучайными. Сектор создается, когда это необходимо, поэтому сектор 12 не обязательно находится рядом с Сектором 11 и т. Д. Спасибо за ваши предложения! – Bazzz