parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Можно и без наследования...

Sumo 03.10.2020 11:09 / 03.10.2020 11:12

Для этого прекрасно подходит шаблон проектирования «стратегия». Выносите специфическое поведение в отдельный класс и параметризируете им основной класс через конструктор.
@main[][locals]
  $actions[
     $.get_data[DataAction]
     $._default[DefaultAction]
  ]
  $options[
     $.sql[...]
  ]
  $handler[^Handler::create[
    ^reflection::create[$actions.[$form:action];create;$options]
  ]
  ^handler.run[]


@CLASS
Handler

@OPTIONS
locals

@create[aAction]
   $self._action[$aAction]

@run[]
   ^self._action.process[$form:fields]


@CLASS
DefaultAction

@create[aOptions]

@process[aForm]
   Default page


@CLASS
DataAction

@OPTIONS
locals

@create[aOptions]
  $self._sql[$aOptions.sql]

@process[aForm]
  $lData[^self._sql.table{
    select * from data where id = ^aForm.id.int(-1)
  }]
  ^if($lData){
     $lData.text
  }{
    Data not found
  }
p.s. Очень надеюсь, что вы пользуетесь исключительно динамическими объектами, а не статическими классами в своем коде. В статических классах вам недоступно большинство ООП-приемов. :)