如何更新复杂类型(模型)属性
本文关键字:属性 类型 模型 复杂 更新 何更新 | 更新日期: 2023-09-27 18:35:37
我有两个模型,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.
}
}
我使用实体框架和存储库模式。所以我有一个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
实例,但这感觉就像紧密耦合,如果可能的话,我想避免这种情况。
如果Ship.Move()
需要加载扇区以记录其新位置,那么将ISectorRepository
接口的实现(或" ISectorFinderService
")作为参数传递给Move()
方法是完全可以的。关键是要意识到 A) 接口是领域模型的一部分,因此这不会违反任何层,以及 B) 通过您的实现,Ship
已经与扇区的概念紧密耦合,因此传递ISectorFinderService
(具有合适的抽象级别)不会真正添加任何新的概念依赖关系。
但是,我不知道您的扇区真正代表什么,或者移动算法如何工作。也许你应该有一个方法Sector.GetNextSector(direction)
?