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

Общие вопросы о Unity3D

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

Сообщение NeNpc 17 ноя 2022, 16:11

День добрый.

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

private Action restartGameAction;

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

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

Но мне кажется такая конструкция избыточной, но другого метода решения проблемы не придумал и не нагуглил.
Подскажите пожалуйста какие ещё есть методы для решения этой проблемы?
NeNpc
UNец
 
Сообщения: 4
Зарегистрирован: 29 сен 2022, 15:50

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

Сообщение Tolking 17 ноя 2022, 16:56

правильно/правильно, принципы солид и т.п. имеют смысл когда ты разрабатываешь мидлварю... Какую-то приблуду, которой будут пользоваться толпы огалтелых программистов... Тогда нужно сделать так, чтобы они своими рученками не могли сломать, то что ты делаешь... Если делаешь конечный продукт используй принципы KISS и не парься...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2675
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение NeNpc 17 ноя 2022, 17:08

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

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

Сообщение Saltant 17 ноя 2022, 19:00

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, его например не нужно отписывать, он сам отпишется при удалении объекта.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2017
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
Skype: saltant1989
  • Сайт

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

Сообщение Tolking 17 ноя 2022, 19:38

Блииин... А у меня нет гитхаба и никогда не думал, что когда пишешь программу нужно думать о том, чтобы твой код кому-то нравился...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2675
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение waruiyume 17 ноя 2022, 21:48

public event Action ERestartGameAction;
Если стоит слово "event" то такой делегат нельзя инвокнуть из другого класса, а анализаторы кода не высирают кирпичи про вычитание делегатов.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6009
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

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

Сообщение NeNpc 18 ноя 2022, 13:28

waruiyume. Спасибо! Именно то что я искал.
NeNpc
UNец
 
Сообщения: 4
Зарегистрирован: 29 сен 2022, 15:50


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14