如何在ASPNET WebAPI中建模有界上下文

时间:2016-07-26 03:01:53

标签: rest asp.net-web-api domain-driven-design

我正在尝试使用WebAPI端点模拟Fowler here概述的有界上下文的等价物。

基本上,我有一个“联系人”DTO,它代表了客户的CRM中心视图。 “联系人”的销售或以帐单为中心的视图可能不同,包括查询多个表中的属性以构建他们的“联系人”视图。

在WebAPI中,通常会有一个“联系人”控制器,它将返回“ContactDTOs”的集合。

使用WebAPI以干净,RESTful方式支持上述场景的最佳方法是什么?

以下一些想法:

一个。为每个用例创建一个单独的操作,并在ContactsController中返回一个不同的DTO,如“SalesContactDTO”,“BillingContactDTO”

http://hostname/api/SalesContacts
http://hostname/api/BillingContacts
http://hostname/api/CRMContacts

湾创建单独的控制器,Get()返回相应的DTO。

"SalesContactsController"
"BillingContactsConroller"

℃。创建一个“ContactsController”,设置一个指示的“请求标头”     联系“视图”返回:

   public ContactDTOBase[] Get()
      {
         //read request header
         var contactType = Request.GetHeaders("whatever");
         switch(contactType)
         {
             case "Billing":{ return new SalesContactDTO[]{};}
             case "Sales": { return new BillingContactDTO[]{};}
         }
         return CRMContact[]{};
      } 

评论中的声音: - )

1 个答案:

答案 0 :(得分:3)

我几乎肯定会创建不同的控制器或更可能创建完全独立的项目

http://sales-hostname/api/contacts

http://billing-hostname/api/contacts

http://crm-hostname/api/contacts

如果你尝试组合成一个控制器,使用上面的方法1或方法3,你将最终负责太多。您最终必须随时更改任何有界上下文更改,更不用说控制器需要的任何依赖项。