Я работаю над функцией, в которой мне нужно отправлять аналитические данные всякий раз, когда выполняется команда - например, была ли команда запустить через горячую кладку или кнопку пользовательского интерфейса. Тем не менее, я хочу достичь этого без изменения существующего командного интерфейса. Но я не уверен, как передать дополнительный контекст (например, источник триггера) в декоратор, не изменяя подпись метода интерфейса. < /P>
Вот упрощенная версия моего кода: < /p>
Интерфейс, определяющий команду, способную выполнять действие: < /li>
< /ul>
public interface IActionCommand
{
void ExeciteAction(ActionModel actionModel);
}
< /code>
ActionModel может содержать все, что связано с действием (параметры, метаданные и т. Д.) public abstract class ActionCommandDecorator : IActionCommand
{
protected IActionCommand Decorator { get; }
public ActionCommandDecorator(IActionCommand decorator)
{
Decorator = decorator;
}
public abstract void ExeciteAction(ActionModel actionModel);
}
< /code>
Конкретная реализация iaictionCommand. Это фактическая логика для выполнения какого -то действия. < /Li>
< /ul>
public class AnyActiomCommand : IActionCommand
{
public void ExeciteAction(ActionModel actionModel)
{
//Do action
}
}
< /code>
Декоратор, который завершает команду для отслеживания аналитики: < /li>
< /ul>
public class AnyActiomCommandAnalyticsDecorator : ActionCommandDecorator
{
private AnaliticaService _analiticaService = new AnaliticaService();
public AnyActiomCommandAnaliticDecorator(IActionCommand decorator) : base(decorator)
{
}
public override void ExeciteAction(ActionModel actionModel)
{
_analiticaService.SendData(new AnalyticsModel());
Decorator.ExeciteAction(actionModel);
}
}
< /code>
Аналитическая модель может содержать все что -либо < /li>
< /ul>
Проблема: < /strong> < /em>
Я не хочу изменять интерфейс IActionCommand, чтобы включить MetAdata или параметр, такой как Execute (ActionModel Source, анализ. Я хочу, чтобы интерфейс был чист.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... nd-interfa
Как передавать контекстные данные в декоратор без изменения командного интерфейса? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как передавать контекстные данные в декоратор без изменения командного интерфейса?
Anonymous » » в форуме C# - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как передавать контекстные данные в декоратор без изменения командного интерфейса?
Anonymous » » в форуме C# - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Symfony Mailer: сообщение теряло контекстные данные при захвате события MessageSent
Anonymous » » в форуме Php - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Передавать или не передавать модель представления в составной элемент
Anonymous » » в форуме Android - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Anonymous
-