Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor CoreEvent & Command enums into bunch of structs & traits #253

Open
ozkriff opened this issue Dec 23, 2016 · 3 comments
Open

Refactor CoreEvent & Command enums into bunch of structs & traits #253

ozkriff opened this issue Dec 23, 2016 · 3 comments

Comments

@ozkriff
Copy link
Owner

ozkriff commented Dec 23, 2016

У меня есть важный тип - CoreEvent. он перечисление всех возможных событий.

Он много где обрабатываются и везде его обработка выглядит как огромная функция с огромным match хотя бы строк на 150:

и еще в паре мест.

Вроде бы это мне пока особо и не мешает, но как-то раздражает.
(и кроме CoreEvent еще есть похожий Command с теми же проблемами).

Вот я думаю, может мне варианты этого перечисления вынести в честные структуры, сделать для каждого такого match свой типаж и реализовать его для каждого события/команды?

Сейчас есть, например,

InternalState::apply_event(&mut self, event: CoreEvent)

а будет какой-нибудь

impl InternalStateEvent from CoreEventMove {
    fn apply(&self, state: &mut InternalState() {....}
}
@ozkriff
Copy link
Owner Author

ozkriff commented Dec 25, 2016

Экспериментирую в https://github.com/ozkriff/zoc/tree/WIP_253_command_event_into_trait

  • Пометка: не забыть проверить что (де)сериализация команд-событий из/в json для подхода с типажами не будет вызывать особых проблем.

@ozkriff
Copy link
Owner Author

ozkriff commented Dec 26, 2016

Какая жесть, епрст. Пришлось делать что-то сатанинское с for<'a> ( "higher-ranked lifetime bounds"), что бы команды заработали.

Теперь перехожу к переработке CoreEvent.

@ozkriff
Copy link
Owner Author

ozkriff commented Dec 27, 2016

Есть мысль слепить всю мою кучу состояний (GameState, InternalState, FullState, PartialState, TmPartialState) в одну структуру, которая может выполнять все роли без дополнительных ВЖ и типовых параметров по всему коду.

Потому что с текущей архитектурой количество костылей растет квадратично.

Через костыль с Option для тумана войны - https://play.rust-lang.org/?gist=401412510e667a291c151b84b7be6a98

Может. в отдельной задаче это делать?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant