【问题标题】:DDD layers - Communication with entitiesDDD 层 - 与实体的通信
【发布时间】:2012-09-15 05:40:53
【问题描述】:

我开始使用 c# 在 asp.net mvc 中进行域驱动设计,并且正在创建一个小型示例项目。我目前有一个用于我的域层、服务层、Web 以及控制台应用程序的项目。我也使用 mongodb 作为我的数据库。

目前,我的项目有属于这些组的人的组,我在我的域层中有一个名为 GroupPerson 的类,如下所示(简化)。 GroupPerson 也代表集合 Group 在我的 mongodb 数据库中的样子。

public class Group
{
   public string Name { get; set; }
   public List<Person> People { get; set; }
}

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

我理解它的方式是我的网站和我的控制台应用程序应该与我的服务层进行通信,该服务层充当一种外观并且永远不应该看到域层?

我不确定的事情是在我的控制台应用程序或网站中,如果我想询问所有组的服务层,通常我希望我会要求类似的东西

var groupService = new GroupService();
List<Group> groups =  groupService.GetGroups();

除了在这种情况下作为我的组,并且人员类位于我的控制台应用程序和网站不知道的域层中,我无法请求 Group 的列表,因为我的应用程序不知道 @ 是什么987654329@是。

我的服务层是否应该将结果输出为其他内容,例如 Json,这取决于我的网站和控制台应用程序,或者说我是否有其他人可以访问的 API 来确定如何处理这些数据?还是我在这里搞混了什么?

编辑:

将来我计划在安卓应用中使用我的服务和域。我正在考虑使用宁静的服务。我不打算(现阶段)将其作为公共 API。

【问题讨论】:

    标签: c# asp.net-mvc mongodb domain-driven-design


    【解决方案1】:

    您的服务层将与数据传输对象进行通信,而不是域对象。域实体和数据传输对象的区别在于域实体具有行为,而数据传输对象(DTO)只是数据。

    所以,回答您的问题:您的服务层将使用数据传输对象从您的控制台应用程序或您的网站获取命令和查询,并将它们转换为域实体。它将从域实体中获取结果并将结果转换回 DTO。

    很可能单个域实体根本不转换为 DTO,或者单个域实体转换为 10 个 DTO。这些是 2 个非常不同的 api,用于 2 个非常不同的目的。我的建议是开发你的领域层,然后在上面构建你的服务层,以便根据客户端(控制台和 Web 应用程序)的需求进行通信。

    【讨论】:

    • 感谢克雷格的回复。我昨天花了很多时间研究使用 DTO,但我仍然有点不确定如何实现它。你有例子吗?例如,我是否应该将我的对象变成 Json 之类的东西,并让接收应用程序将它们变成它更好理解的东西?最终我计划为这个项目创建一个 android 应用程序,所以我正在考虑使用一个 restful 服务。这会改变上述任何一项吗?
    • 不,它不会改变任何东西。这是一篇文章的链接,该文章介绍了如何使用特定技术来帮助在您的域和某些 DTO 之间进行映射。它有一个很好的例子来说明这些外观和区别是什么。 weblogs.asp.net/gunnarpeipman/archive/2009/03/01/…
    • 谢谢!我想这正是我所追求的。
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2010-10-04
    • 2021-10-16
    相关资源
    最近更新 更多