Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DDD层-与实体的通信_C#_Asp.net Mvc_Mongodb_Domain Driven Design - Fatal编程技术网

C# DDD层-与实体的通信

C# DDD层-与实体的通信,c#,asp.net-mvc,mongodb,domain-driven-design,C#,Asp.net Mvc,Mongodb,Domain Driven Design,我开始在asp.net mvc中使用c#进行域驱动设计,并创建了一个小样本项目。我目前有一个域层、服务层、web的项目,还有一个控制台应用程序。我还使用mongodb作为我的数据库 public class Group { public string Name { get; set; } public List<Person> People { get; set; } } public class Person { public string FirstName

我开始在asp.net mvc中使用c#进行域驱动设计,并创建了一个小样本项目。我目前有一个域层、服务层、web的项目,还有一个控制台应用程序。我还使用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; }
}
目前,我的项目中有属于这些组的人组成的组,在我的域层中有一个名为
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; }
}
公共类组
{
公共字符串名称{get;set;}
公共列表人员{get;set;}
}
公共阶层人士
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
我的理解是,我的网站和我的控制台应用程序应该与我的服务层进行通信,服务层作为一种门面,不应该看到域层

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

var groupService = new GroupService();
List<Group> groups =  groupService.GetGroups();
var groupService=newgroupservice();
List groups=groupService.GetGroups();
除了在本例中作为我的组之外,person类位于我的控制台应用程序和网站不知道的域层,我不能要求提供
的列表,因为我的应用程序不知道什么是

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

编辑:


将来,我计划在android应用程序中使用我的服务和域。我正在考虑使用restful服务。我不打算(在这个阶段)将其作为公共API。

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

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


很可能一个域实体根本不转换成DTO,或者一个域实体转换成10个DTO。这是两个非常不同的API,用于两个非常不同的目的。我的建议是开发您的域层,然后在上面构建您的服务层,以便根据客户端(控制台和web应用程序)的需要进行通信。

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

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


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

谢谢Craig的回复。我花了昨天的时间研究使用DTO,但我仍然有点不确定如何实现它。你有什么例子吗?例如,我应该将我的对象转换成类似Json的东西,并让接收应用程序将它们转换成它更了解的东西吗?最后,我计划为这个项目创建一个android应用程序,所以我考虑使用restful服务。这会改变上述任何一项吗?不会,它不会改变任何东西。下面是一篇文章的链接,该文章介绍如何使用一种特定的技术来帮助在您的域和某些DTO之间进行映射。它提供了一个很好的例子,说明了它们的外观和区别。谢谢我想这正是我想要的。谢谢克雷格的回复。我花了昨天的时间研究使用DTO,但我仍然有点不确定如何实现它。你有什么例子吗?例如,我应该将我的对象转换成类似Json的东西,并让接收应用程序将它们转换成它更了解的东西吗?最后,我计划为这个项目创建一个android应用程序,所以我考虑使用restful服务。这会改变上述任何一项吗?不会,它不会改变任何东西。下面是一篇文章的链接,该文章介绍如何使用一种特定的技术来帮助在您的域和某些DTO之间进行映射。它提供了一个很好的例子,说明了它们的外观和区别。谢谢我想这正是我想要的。