我一直在拖网stackoverflow和整个互联网一整天关于IRepository模式试图更好地理解它,然后我尝试和愤怒地使用它。IRepository聚合和延迟加载
从我读过的内容(如果我错了,请纠正我)repoistory封装对其聚合根和子对象的访问,暴露一个公共接口,然后可以注入或模拟。
所以,在你有你的聚合根对象的实例:
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
}
}
但是,说我不想让整个员工,说我只想与FirstName平的员工记录LastName并且能够在稍后延迟加载。这应该如何完成?难道是允许有这样的:
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 /实体框架/ ORM为你做”。
在此先感谢。
D.