如何更新复杂类型(模型)属性?
How to update a complex type (model) property?
我有两个模型,Ship
和 Sector
,其中 Ship
有一个名为 Location
的 属性,它是 [=14] 的一个实例=] class 和 Destination
这是 Sector
class 的另一个实例。考虑到封装,船本身应该负责更新这些属性,所以我做了一个 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);
}
我可以在 Ship 模型中创建 SectorRepository
的实例,但感觉就像 Tight Coupling,我希望尽可能避免这种情况。
如果 Ship.Move()
需要加载扇区以记录它的新位置,那么传递 ISectorRepository
接口(或“ISectorFinderService
") 作为 Move()
方法的参数。关键是要意识到 A) 接口是您的域模型的一部分,因此这不会违反任何层,并且 B) 通过您的实现,Ship
已经与扇区的概念紧密耦合,因此传递一个ISectorFinderService
(具有适当的抽象级别)并没有真正添加任何新的概念依赖性。
但是,我不知道您的扇区真正代表什么,也不知道移动算法是如何工作的。也许你应该有一个方法 Sector.GetNextSector(direction)
?
我有两个模型,Ship
和 Sector
,其中 Ship
有一个名为 Location
的 属性,它是 [=14] 的一个实例=] class 和 Destination
这是 Sector
class 的另一个实例。考虑到封装,船本身应该负责更新这些属性,所以我做了一个 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);
}
我可以在 Ship 模型中创建 SectorRepository
的实例,但感觉就像 Tight Coupling,我希望尽可能避免这种情况。
如果 Ship.Move()
需要加载扇区以记录它的新位置,那么传递 ISectorRepository
接口(或“ISectorFinderService
") 作为 Move()
方法的参数。关键是要意识到 A) 接口是您的域模型的一部分,因此这不会违反任何层,并且 B) 通过您的实现,Ship
已经与扇区的概念紧密耦合,因此传递一个ISectorFinderService
(具有适当的抽象级别)并没有真正添加任何新的概念依赖性。
但是,我不知道您的扇区真正代表什么,也不知道移动算法是如何工作的。也许你应该有一个方法 Sector.GetNextSector(direction)
?