所以这是场景:
DDD声明您使用存储库来获取聚合根,然后使用它来添加/删除它拥有的任何集合.
添加很简单,你简单的调用.Add(Item item)上Collection要添加到.保存时,会在数据库中添加一个新行.但是,删除是不同的 - 调用.Remove(Item item)不会从数据库中删除该项,它只是删除外键.所以,虽然,是的,它在技术上不再是集合的一部分,它仍然在数据库中.
阅读,唯一的解决方案是使用数据上下文删除它.但根据DDD,域对象不应该知道数据上下文,因此删除必须在域外进行.
什么是正确的方法?或者让数据库中的孤儿都可以接受(也许是运行例程来清除它们)?
下面这样做的正确方法是什么,这ParentClass取决于MyClass什么?
public class ParentClass
{
public void MyFunction(IList<Foo> foos)
{
foreach (var bar in foos)
{
var myClass = new MyClass();
myClass.DoStuff();
}
}
}
Run Code Online (Sandbox Code Playgroud)
通常没有循环我只是用ParentClass构造函数注入它,但是在这里我需要为循环的每次迭代创建一个新实例.
或者也许有一种更好的方法来完成我想要实现的目标?也许myClass可以在每次迭代结束时重置自己,以便我可以重用它?
说我有一个blog集合posts,每个post都有一个集合comments.我想查询所有评论,以查找所有博客帖子中最近的5条评论.使用RDBMS,您只需直接查看注释表,按日期排序并执行5.在Ravendb中是否可以执行类似的操作,因为注释不是聚合根?
我在Redux商店中有一个ImmutableJS结构,如下所示:
Immutable.fromJS([{
foo: 'bar'
}, {
foo: 'baz'
}]);
Run Code Online (Sandbox Code Playgroud)
它被映射到我的React组件中的this.props.items.在我的React渲染函数中,我正在尝试这样做:
this.props.items.map(item => {
return (
<div>{item.foo}</div>
);
});
Run Code Online (Sandbox Code Playgroud)
什么都没有呈现.但是,如果我.toJS()列表如下,那么它的工作原理:
this.props.items.toJS().map(item => {
return (
<div>{item.foo}</div>
);
});
Run Code Online (Sandbox Code Playgroud)
我的问题是:.toJS()是正确的方法吗?如果没有,我做错了什么?