Страница 1 из 1

Чем можно заменить публичные Actionы?

СообщениеДобавлено: 17 ноя 2022, 16:11
NeNpc
День добрый.

У меня организовано взаимодействие между интерфейсами через public Action. Но мне периодически говорят что это плохая практика, а как сделать лучше не говорят) Я понимаю что у такой архитектуры может быть проблема с тем что этот Action может вызвать посторонний класс(хотя на мой взгляд очевидно что так делать не нужно).
Тогда я стал писать такую конструкцию, в самом методе и в интерфейсе указывал эти методы.

private Action restartGameAction;

public void RestartGameActionSubscribe(Action function)
{
restartGameAction += function;
}

public void RestartGameActionUnsubscribe(Action function)
{
restartGameAction -= function;
}

Но мне кажется такая конструкция избыточной, но другого метода решения проблемы не придумал и не нагуглил.
Подскажите пожалуйста какие ещё есть методы для решения этой проблемы?

Re: Чем можно заменить публичные Actionы?

СообщениеДобавлено: 17 ноя 2022, 16:56
Tolking
правильно/правильно, принципы солид и т.п. имеют смысл когда ты разрабатываешь мидлварю... Какую-то приблуду, которой будут пользоваться толпы огалтелых программистов... Тогда нужно сделать так, чтобы они своими рученками не могли сломать, то что ты делаешь... Если делаешь конечный продукт используй принципы KISS и не парься...

Re: Чем можно заменить публичные Actionы?

СообщениеДобавлено: 17 ноя 2022, 17:08
NeNpc
@Tolking В данном случае мой проект достаточно сильно разросся и на мой взгляд имеет смысл писать код нормально. Да и работодатели смотрят на гит потенциального сотрудника. И если там всё написано как попало то врядли вам предложат должность выше джуна.

Re: Чем можно заменить публичные Actionы?

СообщениеДобавлено: 17 ноя 2022, 19:00
Saltant
NeNpc писал(а):@Tolking В данном случае мой проект достаточно сильно разросся и на мой взгляд имеет смысл писать код нормально. Да и работодатели смотрят на гит потенциального сотрудника. И если там всё написано как попало то врядли вам предложат должность выше джуна.

Что значит "писать код нормально"? - Ну я например ваще юзаю лямбда и анонимные методы как Action и че? Ну нужно мне каллбек какой сделать, пишу (result) => {...} и чё, типа работодатели посмотрят и такие - "Ой фуу он использует анонимные методы а не объявляет каждый раз" :D
Да ваще пофиг, пиши чтоб работало и чтоб ты сам понимал свой код и мог с ним дальше работать. У каждого кодера свой стиль.
Например в одном из своих проектов я юзаю рефлексию чтоб создать класс когда получаю данные с сервера, ну код в 1 строчку пишу и чо? - скажут типа "Ой фу, там рефлексия да еще в одну строчку!"
Синтаксис:
Используется csharp
HarvesterBase CreateHarvester(HarvesterType harvesterType, HarvesterData harvesterData) => (HarvesterBase)Activator.CreateInstance(Type.GetType(harvesterType.ToString(), true), new object[] { harvesterData });


А что касается конкретно твоего вопроса чем заменить, тебе лучше использовать в данном случае (рестарт) не Action а UnityEvent, его например не нужно отписывать, он сам отпишется при удалении объекта.

Re: Чем можно заменить публичные Actionы?

СообщениеДобавлено: 17 ноя 2022, 19:38
Tolking
Блииин... А у меня нет гитхаба и никогда не думал, что когда пишешь программу нужно думать о том, чтобы твой код кому-то нравился...

Re: Чем можно заменить публичные Actionы?

СообщениеДобавлено: 17 ноя 2022, 21:48
waruiyume
public event Action ERestartGameAction;
Если стоит слово "event" то такой делегат нельзя инвокнуть из другого класса, а анализаторы кода не высирают кирпичи про вычитание делегатов.

Re: Чем можно заменить публичные Actionы?

СообщениеДобавлено: 18 ноя 2022, 13:28
NeNpc
waruiyume. Спасибо! Именно то что я искал.