Domain driven design 我必须将聚合子级公开为公共属性才能实现持久性吗?
我很高兴最近找到了这个网站,从这里我学到了很多东西。Domain driven design 我必须将聚合子级公开为公共属性才能实现持久性吗?,domain-driven-design,Domain Driven Design,我很高兴最近找到了这个网站,从这里我学到了很多东西。 我来自中国,我的英语不太好。但我会尽力表达我想说的话 最近,我开始学习领域驱动设计,我对此非常感兴趣。我计划用DDD开发一个论坛网站 在阅读了这里的大量文章后,我明白了坚持无知是一种很好的做法 目前,我有两个问题,关于我长期以来的想法 域对象是否应该与存储库交互以获取/保存数据 如果域对象不使用存储库,那么基础结构层(如工作单元)如何知道哪个域对象是新的/修改的/删除的 关于第二个问题。下面是一个示例代码: 假设我有一个用户类: public
我来自中国,我的英语不太好。但我会尽力表达我想说的话 最近,我开始学习领域驱动设计,我对此非常感兴趣。我计划用DDD开发一个论坛网站 在阅读了这里的大量文章后,我明白了坚持无知是一种很好的做法 目前,我有两个问题,关于我长期以来的想法
public class User
{
public Guid Id { get; set; }
public string UserName { get; set; }
public string NickName { get; set; }
/// <summary>
/// A Roles collection which represents the current user's owned roles.
/// But here i don't want to use the public property to expose it.
/// Instead, i use the below methods to implement.
/// </summary>
//public IList<Role> Roles { get; set; }
private List<Role> roles = new List<Role>();
public IList<Role> GetRoles()
{
return roles;
}
public void AddRole(Role role)
{
roles.Add(role);
}
public void RemoveRole(Role role)
{
roles.Remove(role);
}
}
在这种情况下,我不知道存储库或工作单元如何知道用户有一个新角色
我认为,一个真正的持久化框架应该支持POCO,如果POCO本身发生任何变化,持久化框架应该自动知道。即使像上面的例子一样,通过方法(AddRole、RemoveOLE)更改对象状态
我知道如果我使用Roles属性,很多ORM可以自动持久化更改,但有时我不喜欢这种方式,因为性能原因
有人能给我一些建议吗?谢谢
这是我在这个网站上的第一个问题。我希望我的英语能被理解。任何答案都将不胜感激 域对象是否应该与存储库交互以获取/保存数据 不,不应该。原因很简单——封装。如果我们从域模型中去掉所有与持久性相关的东西,我们可以更清楚地描述我们的域 如果域对象不使用存储库,那么基础结构层(如工作单元)如何知道哪个域对象是新的/修改的/删除的 最简单的版本是-它不是。检索并将其作为一个整体保存(在聚合操作完成后):
var user = users.Find(guid);
user.AssignRole(Role.Administrator);
users.Save(user);
我个人依赖于NHibernate,它自己跟踪变化。如果我使用适当的急/缓加载优化查询,只在http请求端保存更改,不要忘记事务,使用缓存-没有性能损失。但要付出代价——这需要一些知识来处理
还有一件事-在使用域驱动设计开发论坛之前,请三思。此方法仅适用于未知(尚未)和复杂的业务领域。对于简单的应用程序来说,这是一种过度的杀伤力
还有一件事——不要为你的英语感到羞耻。情况很快就会好转。:)
域对象是否应该与存储库交互以获取/保存数据
不,不应该。原因很简单——封装。如果我们从域模型中去掉所有与持久性相关的东西,我们可以更清楚地描述我们的域
如果域对象不使用存储库,那么基础结构层(如工作单元)如何知道哪个域对象是新的/修改的/删除的
最简单的版本是-它不是。检索并将其作为一个整体保存(在聚合操作完成后):
var user = users.Find(guid);
user.AssignRole(Role.Administrator);
users.Save(user);
我个人依赖于NHibernate,它自己跟踪变化。如果我使用适当的急/缓加载优化查询,只在http请求端保存更改,不要忘记事务,使用缓存-没有性能损失。但要付出代价——这需要一些知识来处理
还有一件事-在使用域驱动设计开发论坛之前,请三思。此方法仅适用于未知(尚未)和复杂的业务领域。对于简单的应用程序来说,这是一种过度的杀伤力
还有一件事——不要为你的英语感到羞耻。情况很快就会好转。:)