在以下示例中,AccountService和ProductService位于 ASP.NET MVC 应用程序中。AccountWebAPI和ProductWebAPI是外部托管的API微服务。
1) 我可以消除ProductService并在CustomerAccountController本身中编排订单的检索吗?这是因为我将控制器视为DDD(域驱动设计)中提到的应用层/服务。
2)我是否违反了n层架构,因为ProductService调用了同一层的AccountService ?
3)由于AccountWebAPI和ProductWebAPI是微服务,它们是否必须在客户端应用程序(MVC App)中分离为AccountService和ProductService以保持职责分离?所以ProductService需要重命名为ProductAppService并且ProductService应该与ProductWebAPI交互,就像AccountService与AccountWebAPI对话一样。
public class CustomerAccountController : Controller
{
IProductService _productService;
public CustomerAccountController(IProductService productService)
{
_productService = productService;
}
public IActionResult Index()
{
return View();
}
public IActionResult Account(int customerId)
{
var orders = _productService.GetOrders(customerId);
return View(orders);
}
}
public class ProductService
{
IAccountService _accountService;
IProductWebAPI _productWebAPI;
ProductService(IAccountService accountService, IProductWebAPI productWebAPI)
{
_accountService = accountService;
_productWebAPI = productWebAPI;
}
IList<Order> GetOrders(int customerId)
{
// Find the International Customer Number for CustomerId
object customer = _accountService.GetInternationCustomerInfo(customerId);
// Convert the string type to int
var modifiedCustomerNumber = Convert.ToInt32(customer.Id);
// Get the orders
return _productWebAPI.GetOrders(modifiedCustomerNumber);
}
}
public class AccountService
{
IAccountWebService _accountWebAPI;
CustomerService(IAccountWebService accountWebAPI)
{
_accountWebAPI = accountWebAPI;
}
object GetInternationCustomerInfo(int customerId)
{
return accountWebAPI.GetCustomer(customerId)
}
}
更新:我意识到OrderService将是订单的适当服务名称,而不是ProductService。
层:
视图 -- 控制器 -- 服务 -- WebAPIs -- 域 -- 存储库
OrderView -- CustomerAccountController -- ProductService(同层调用AccountService) -- ProductWebAPI -- ProductDomain -- ProductRepository