Я работаю над функцией, в которой мне нужно отправлять аналитические данные всякий раз, когда выполняется команда - например, была ли команда запустить через горячую кладку или кнопку пользовательского интерфейса. Тем не менее, я хочу достичь этого без изменения существующего командного интерфейса. Но я не уверен, как передать дополнительный контекст (например, источник триггера) в декоратор, не изменяя подпись метода интерфейса. < /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#
Место общения программистов C#
1750789585
Anonymous
Я работаю над функцией, в которой мне нужно отправлять аналитические данные всякий раз, когда выполняется команда - например, была ли команда запустить через горячую кладку или кнопку пользовательского интерфейса. Тем не менее, я хочу достичь этого без изменения существующего командного интерфейса. Но я не уверен, как передать дополнительный контекст (например, источник триггера) в декоратор, не изменяя подпись метода интерфейса. < /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, анализ. Я хочу, чтобы интерфейс был чист.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79677715/how-to-pass-contextual-data-to-a-decorator-without-modifying-the-command-interfa[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия