【发布时间】:2011-11-19 04:32:29
【问题描述】:
我整天都在搜索 stackoverflow 和互联网上关于 IRepository 模式的信息,试图在我愤怒地尝试使用它之前更好地理解它。
根据我的阅读(如果我弄错了,请纠正我),repository 封装了对其聚合根和子对象的访问,公开了一个公共接口,然后可以注入或模拟。
因此,在您拥有聚合根对象的情况下:
class Employee {
string FirstName;
string LastName;
IEnumerable<Address> Addresses;
IEnumerable<PhoneNumber> PhoneNumbers;
}
然后是它的子对象:
class Address {
string BuildingName;
...etc
}
class PhoneNumber {
string PhoneNo;
...etc
}
所以存储库看起来像:
class EmployeeRepository : IRepository<Employee> {
Employee Get(id) {
...does stuff, builds full Employee object including Addresses/Phone No's and returns
}
}
但是说我不想获取整个 Employee,说我只想要带有 FirstName LastName 的平面 Employee 记录,并且能够在以后延迟加载其余部分。这应该如何实现?是否允许有类似的东西:
class EmployeeRepository : IRepository<Employee> {
Employee Get(id) {
...does stuff and builds flat Employee object without Addresses and Phone Numbers
}
Employee GetAddresses (Employee emp) {
...
}
Employee GetPhoneNumbers (Employee emp) {
...
}
}
这样可以吗,还是我会违反一些神圣不可侵犯的 DDD 规则并在开发人员的地狱中燃烧?延迟加载应该如何适合这个模型,再次尝试搜索,但我发现的只是“让 NHibernate/Entity Framework/ORM 为你做”。
提前致谢。
D.
【问题讨论】:
标签: c# lazy-loading repository-pattern