Вы имеете в виду об обслуживании удаленного фасада (веб-службы), который будет вызывать прикладной уровень, потому что доменная служба - это другое.
Уровень удаленного фасада (веб-сервис), если вы разрабатываете n-уровневое приложение для предоставления сервисов приложений другим уровням, откроет ваш бизнес и команды, вызвав уровень приложения, уровень приложения, как упомянул Дэвид:
Для Read Part, на вашем прикладном уровне вам нужно спроектировать Query Service с такими методами, как FindOrders(x, y, z)
, GetMostOrderedItems()
, ...
Для части Write вы можете спроектировать службу команд одним из следующих способов:
- Служба, которая принимает DTO и выполняет доменную логику на ее основе [Least CQRS]:
public void ActivateOrder(int orderID)
{
var order = _orderRepository.FindOrder(orderID);
order.Activate();
}
public void UpdateClientAddress(ClientAddressDTO address)
{
var client = _clientRepository.FindClient(address.ClientID);
client.Address = // .. map ClientAddressDTO to Address
}
- Служба, которая принимает DTO и преобразует их в Команду, выполняемую в доменной модели:
public void ActivateOrder(int orderID)
{
var orderActivationCommand = new OrderActivationCommand(orderID);
_commandExecuter.Execute(orderActivationCommand);
}
public void UpdateClientAddress(ClientAddressDTO address)
{
var clientMovingCommand = new clientMovingCommand(address.ClientID, address.PostalCode, ...);
_commandExecuter.Execute(clientMovingCommand);
}
- Универсальная служба, которая принимает объект Command (вместо DTO) и выполняет его:
// ... in remote facade or client code ...
var orderActivationCommand = new OrderActivationCommand(orderID);
_commandService.ExecuteCommand(orderActivationCommand);
// ... in application layer (service) ...
public void ExecuteCommand(Command command)
{
_commandExeuter.Execute(command);
}