Абстрагирующая часть Диодного государственного управления

Я пытаюсь абстрагировать часть логики управления состоянием Диода, понимая, что все мои обработчики в некоторой степени похожи в контексте данного приложения.

Я пытаюсь создать общие классы, расширяющие действие Diode, и все они представляют определенный тип действия в приложении. Примерами являются FetchAction, CreateAction, DeleteAction. Все они вводятся с параметром Z, который будет использоваться для дифференциации обработчиков. Вот часть логики:

abstract class BasicHandler[Model, Z <: Map[_, _]](model: ModelRW[Model, Pot[Z]]) extends ActionHandler(model) {
  import BasicHandler._

  private def defaultHandling: PartialFunction[Any, ActionResult[Model]] = {
    case action: FetchAction[Z] =>
      action.handleWith(this, fetchEffect(action.url))(PotAction.handler[Z, Model, FetchAction[Z]]())
    case action: LoadAction[Z] =>
      updated(Ready(value.getOrElse(Map.empty) ++ action.load).asInstanceOf[Pot[Z]])
  }

  ...
}

Основной проблемой здесь является стирание типа. Все отправленные действия проходят через FetchAction первого обработчика, объявленного в composeHandlers, полностью игнорируя переданный параметр типа Z. Я безуспешно пытался использовать отражение Scala с TypeTag или ClassTag.

Я чувствую, что с моим подходом что-то принципиально не так. Кто-нибудь когда-нибудь пробовал что-то похожее, или у него есть предложения для достижения вышеизложенного?

Большое спасибо!

0 ответов

Другие вопросы по тегам