banq
2011-12-31 11:17
2011年12月31日 09:44 "@hushawn"的内容
我在创建对象时候,用一个参数来确定是否延迟加载是否可以?

另外,聚合内的非聚合根子对象是否可以延迟加载???

另外,能否同时有引用ID和引用对象,因为,我要去延迟加载的时候,如果没ID,就不知道要加载哪个对象了??? ...

这些都是实现手段优雅完美与否了。

可以使用CategoryLazyLoader等委托方式调用;聚合内子对象当然可以延长加载,而且是由聚合根对象来实现。

创建对象时,不需要用参数来标识是否延迟加载吧?只要判断对象是否为空就可以了,比如category是否为空等,至于category的ID如CategoryID当然在父对象Article中不需要了,因为你可以根据ArticleID到数据表中获得其外键关联字段CategoryID,然后加载其category即可。

hushawn
2011-12-31 11:25
非常感谢,另外如果用委托,那一个领域对象里,可能会有很多委托,而且从Repository里获取对象后,还要注册一个委托方法,注册方法这个动作,放在那里弄比较合适,如应用服务层,或领域服务里??

创建对象时,不需要用参数来标识是否延迟加载吧?

我的意思,开始加载根对象前,就决定本次加载是否是延迟加载

[该贴被hushawn于2011-12-31 11:30修改过]

[该贴被hushawn于2011-12-31 11:35修改过]

banq
2011-12-31 12:10
2011年12月31日 11:25 "@hushawn"的内容
从Repository里获取对象后,还要注册一个委托方法,注册方法这个动作,放在那里弄比较合适,如应用服务层,或领域服务里??

我的意思,开始加载根对象前,就决定本次加载是否是延迟加载 ...

委托方法注册放在聚合根对象的工厂中,因为工厂负责创建。

是否需要参加决定延迟加载,在你设计代码时已经决定了,比如比较小的聚合对象群就一次加载,比较大的就延迟加载。

尽量一次加载,采取延迟加载是因为技术条件限制,比如内存不够大等原因,但是如果采取分布式内存系统如NoSQL或Neo4j就没有这个限制了。

psw1254
2011-12-31 12:34
我能这样理解吗??用户是一个单独的领域模型,角色也一样。通过给用户分配角色的事件,使得两个领域模型有了联系。而不一样把用户和角色归为到一个领域模型中是吗?我也刚开始看这些东西不知道理解是否正确!

hushawn
2011-12-31 12:43
我记得工厂是新创建一个对象去持久化,而现在应该是仓储(Repository)里获取后加载对象去进行操作,这个时候也用工厂??而且现在注册的方法应该是另外一个仓储(Repository)的方法,如

IEmployeeRepository employeeRepository;

user.EmployeeLazyLoader = employeeRepository.FindByUserId;

因为仓储是领域对象仓库,要获取对象都要到对应的仓储里去获取,这么理解对吗?还有就是工厂里可以有仓储接口吗?

是不是我在工厂里创建两种对象创建方法,一种是数据从界面那边新生成的新对象创建,一种通过仓储从持久化介质读取后加载,他们两个是在对象生命周期的不同阶段????

而刚才我本来想这么弄

public class UserService

{

private IEmployeeRepository employeeRepository;

private IUserRepository userRepository;

public UserService(IEmployeeRepository employeeRepository)

{

this.employeeRepository = employeeRepository;

}

public void Register(User user)

{

user.EmployeeLazyLoader = employeeRepository.FindByUserId;

}

}

把它放在领域对象User对应的领域服务里去做,如上,这里不是ApplicationService(供界面调用)?这样做合理吗

另外如果不是延迟加载,可能会拉出对象树,对,刚才您说了,根据实际情况进行代码设计

又想到一个问题,我觉得仓储里加载的内容是一个聚合的内容,所以对关联的对象的加载应该是延迟加载,对聚合内的所有内容是一次性加载

又想到个问题,用户和角色之间应该就是多对多关系,而且定义成用户到角色的单向关联,用户和员工间一般是一对一,跟员工相比,用户只是可以指定多个角色,而用户只可以指定一个员工,用户和角色,用户和员工间的关系类别是一致的,只是简单的关联,而没有我标题上说的什么用户角色类,还有什么聚合....

又想到了个问题,一个聚合边界内可以一次性加载,我理解的聚合边界里面可能有多个聚合根,相对来说关联程度比较紧密,一个聚合根的所有直接关联,间接关联的都当作聚合边界之外,聚合边界之间可以延迟加载,所以尽量减少关联,我是这么理解的...老师在吗??

[该贴被hushawn于2011-12-31 17:29修改过]

猜你喜欢
6Go 上一页 1 2 3 4 5 6 下一页