#kotlin #axon-framework
Вопрос:
Таким образом, у меня есть совокупность, которая отвечает за управление сетевой информацией. Эта сетевая совокупность имеет несколько типов сетевых экс. (Хозяин, Вглядываясь). Поэтому я хочу создать абстрактный класс для управления, потому что у него есть разные методы управления для каждого типа сети. Например, у хост-сети должен быть метод allocateIp/releaseIp, но у пиринговой сети должен быть метод connectClient.
@Aggregate class NetworkPoolAggregate() { @AggregateIdentifier private lateinit var networkPoolId: String @AggregateMember(forwardCommands = true) private lateinit var management: INetworkPoolManagement } abstract class INetworkPoolManagement { } // there're some network type that has this kind of behavior // so I also want to use strategy pattern interface IAddressManagement { fun handle(command: AllocateNetworkPoolIpCommand): String fun handle(command: ReleaseNetworkPoolIpCommand): String } interface IPeeringManagement { fun handle(command: ConnectClientCommand): String } class HostNetworkPoolManagement: INetworkPoolManagement(), IAddressManagement { @CommandHandler override fun handle(command: AllocateNetworkPoolIpCommand): String { AggregateLifecycle.apply(command.toNetworkPoolIpAllocated()) return "test" } @CommandHandler override fun handle(command: ReleaseNetworkPoolIpCommand): String { AggregateLifecycle.apply(command.toNetworkPoolIpReleased()) return "test" } } class PeeringNetworkPoolManagement: INetworkPoolManagement(), IPeeringManagement { @CommandHandler override fun handle(command: ConnectClientCommand): String { AggregateLifecycle.apply(command.toClientConnected()) return "test" } }
Проблема в том, что при отправке команды возникает это исключение.
org.axonframework.commandhandling.NoHandlerForCommandException: No handler was subscribed to command [io.practice.AllocateNetworkPoolIpCommand]
Так что это имеет смысл, потому что эти обработчики команд не находятся в абстрактном классе, но я хочу разделить их в конкретном классе, а не в абстрактном классе, возможно ли это сделать?