我正在尝试使用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[]{};
}
评论中的声音: - )
答案 0 :(得分:3)
我几乎肯定会创建不同的控制器或更可能创建完全独立的项目
http://sales-hostname/api/contacts
http://billing-hostname/api/contacts
http://crm-hostname/api/contacts
如果你尝试组合成一个控制器,使用上面的方法1或方法3,你将最终负责太多。您最终必须随时更改任何有界上下文更改,更不用说控制器需要的任何依赖项。