2

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

目前,我的项目有组,这些组的人属于我有一个名为的类Group,并且Person在我的域层中类似于下面(简化)。Group并且Person还代表了集合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因为我的应用程序不知道 aGroup是什么。

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

编辑:

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

4

1 回答 1

4

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

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

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

于 2012-09-16T01:05:38.483 回答