我对使用存储库模式非常陌生,我正在努力在使用存储库时如何在我的模型中实现关系。例如,我有以下两个存储库接口:IPersonRepository
和IAddressRepository
public interface IPersonRepository
{
IList<Person> GetAll();
Person GetById(int id);
}
public interface IAddressRepository
{
IList<Address> GetAll();
Address GetById(int id);
Address GetByPerson(Person person);
}
两个模型类:Person
和Address
public class Person
{
private IAddressRepository _addressRepository;
public string FirstName { get; set; }
public string LastName { get; set; }
private Address _address;
public Address Address
{
get { return _addressRepository.GetByPerson(this); }
set { _address = value; }
}
Person(string firstName, string lastName, IAddressRepository addressRepository)
{
this.FirstName = firstName;
this.LastName = lastName;
this._addressRepository = addressRepository;
}
}
public class Address
{
public string Street { get; set; }
public string City { get; set; }
public string Zip { get; set; }
public List<Person> Persons { get; set; }
Address(string street, string city, string zip)
{
this.Street = street;
this.City = city;
this.Zip = zip;
}
}
所以现在我的问题是:将IAddressRepository
注入Person
类并通过延迟从实际Person
对象中的getter加载它来请求实际地址是没关系的吗?另外,如果IPersonRepository
方法有Address
之类的方法,我会将GetPersons()
注入{{1}}对象吗?我之所以这样问,是因为我正在重构一些代码以使用存储库模式,并希望利用依赖注入来准备它以便以后更好地测试。
此外:我没有使用任何ORM,因为我在SharePoint环境中开发,并且我使用SharePoint列表作为域模型的实际数据存储。
答案 0 :(得分:0)
如果我自己这样做,我不会将存储库注入您的模型。
相反,在地址模型上,我会有一个personId字段,或者如果您在每个地址跟踪多个人,则会有一个personIds集合。
执行此操作,您可以在名为GetByPersonId(int personId)
的地址存储库中创建一个方法,然后通过检查该人员的ID是否与该地址上的id或该ID上的id集合匹配来获取该人员的地址。地址包含传入的personId。