【发布时间】:2011-11-10 05:33:00
【问题描述】:
我对 RavenDB 和 MVC3 非常陌生,尤其是 IoC 的用法(不是概念)。所以只是警告你,这听起来像是一个非常初学者的问题。
总结: 我有一个域模型,假设它是
public class Goose
在这个类中,我可能有一个更复杂的对象作为属性
public Beak beak { get; set; }
在 RavenDB 中,我们被正确地鼓励 [JsonIgnore] 这个属性或者根本没有它,而是有一个引用标识符,比如
public String beakId { get; set; }
在我的 MVC3 应用程序中的某个地方,我想查看 Goose,我可能想向用户显示一些关于 Goose 和它的喙(应该是 Bill 吗?)的信息。所以是的,我需要一个视图模型,对吗?
public class GooseModel
{
public String BeakColour { get; set; }
public String BeakLength { get; set; }
...etc
}
好吧,假设我有一些 GooseRepository 和一些 BeakRepository,这是一个简单的问题......
我在 GooseController 类中,我正在加载一个 Goose 来查看。我在什么时候使用 BeakRepository,谁应该知道它? GooseController 知道 GooseRepository 并通过 id 加载 Goose。在这一点上,我们可以在 Goose 类中拥有一些代表整个 Beak 的属性,但我真的不想将 BeakRepository 注入 GooseRepository 吗?好的,所以也许当我从 Goose 创建 GooseModel 时,我发现我可以获得 BeakColour 和 BeakLength 的 GooseModel 属性,如何?好吧,我喜欢 AutoMapper,所以也许我的 Goose 的 GooseModel 地图正在使用 BeakRepository 来查找 Beak,然后提取两个 Beak 属性来填充 GooseModel 字段。这似乎也是错误的……所以还剩下什么? GooseController.. Goose 控制器是否应该知道 BeakRespository,然后找到并设置 BeakColour 和 BeakLength!?这当然看起来也完全错误..
那么它在哪里完成呢?控制器、域对象、映射器还是其他地方?也许我应该有一个在 Goose 视图中使用的 Type Beak 的部分视图?..
【问题讨论】:
-
我实际上认为,在 Raven 中,您可能希望 Beak 成为鹅的复杂对象/属性,而不是单独的文档。一般来说,当涉及到文档数据库时,这类事情的例子非常非常糟糕。
标签: asp.net-mvc-3 architecture ravendb