使用额外数据为域模型创建数据访问层方法

时间:2014-12-17 08:41:22

标签: asp.net-mvc generics architecture data-access-layer

我目前正在使用C#中的MVC 4构建一个博客发布Web应用程序,主要是为了磨练我对应用程序架构的了解。

目前它采用分层结构:

查看>查看模型>控制器>数据访问层>数据存储

稍后可能会在控制器和数据访问层之间添加服务层,但这不是此特定问题的原因。

数据访问层方法的参数和返回类型应该是什么?

我目前的理解是存在视图模型,以便为视图提供可能比域模型的结构暴露更多或更少的数据。

在我的应用程序中,帖子包含PostId,Description,Content&用户身份。还有一个Users表,其中包含UserId和UserFullName。

Post Model镜像Posts表,它存储UserId但不存储UserFullName。因此,当我需要检索Post详细信息以及UserFullName以传递给View时,DAL方法应该返回什么?我创建了一个新的域模型,其中包含View所需的所有数据,但这违背了域模型从其实现中解耦的事实。我认为只有在查询数据库中的Post数据时才能返回一个Object,以及View所需的其他内容。

这里需要一个完全通用的数据访问层,还是过度杀伤?

1 个答案:

答案 0 :(得分:0)

在EF中存在方法Include,它允许您从相关表中预加载记录。

public ActionResult Index()
{
    var model = context.Posts.Include("Users");
    return View(model);
}

.cshtml

@model IEnumerable<Post>
@foreach(var post in Model)
{
    <p>@post.Description</p>
    @Html.Raw(post.Content)
    <p>By @post.Users.UserFullName</p>
}

有关详细信息,请参阅http://msdn.microsoft.com/en-us/data/jj574232.aspx