SIOnline
SIOnline copied to clipboard
Рефакторинг кода
Решился всё-таки оставиться пару своих замечаний по поводу веб клиента. На данный момент архитектра проекта не очень хорошо структурирована и плохо масштабируется (файлы на 800+ строк повергают в ужас). Вот пару предложений по улучшению:
-
Хранилище. На данный момент редьюсеры, экешены и тд это просто один файл в проекте (
reducer.ts
,Actions.ts
соответственно). Обычно хранилища разбивают на предметные области и каждый редьюсер отвечает за свою область данных, таким образом отслеживать изменения какой-то отдельно части гораздо проще. Причём где-то это разделение сделано, но в большинстве своём нет. Для этих целей и существуетcombineReducer
. Пример использования:Для автомацизации создания экшенов и редьюсеров я бы предложил использовать typesafe-actions Также эта билиотека позволяет гораздо легче следить за типами в редьюсерах и экшенах, я заметил некоторую проблему с этим на данный момент.
-
Экшены. Много места занимают
mapStateToProps
иmapDispatchToProps
. В целом сократить такое кол-ва кода (либо вообще избавиться с помощью хуковuseSelector
иuseDispatch
) можно с помощью использованияreselect
библиотеки и использовании хуков. Но для этого нужно перейти на функциональные компоненты, что в принципе разумный шаг учитывая что сейчас функциональные компоненты проще в понимании и по коду получаются гораздо короче (а также более активно развиваются сейчас), опять же с помощью хуков иreselect
библиотеки можно скоратить код и реиспользовать многие селекторы изreselect
. -
Thunk. Я бы предложил также перейти на saga так как она более шире в использовании и в целом всю логику можно перенести туда и таким образом лучше разделять логику и представление компонента. Но это опцианально, thunk тоже со своими задачами справляется хоть и хуже на мой взгляд.
-
Компоненты. Как я и писал рассмотреть преспективу перехода на функциональные компоненты. Также я бы предложил выделять под каждый компонент отдельную папку (так обычно и делается), сейчас всё находится в куче что не особо удобно. В целом также практиковать разбитие UI на более меньшие компоненты, это мало того что поможет в оптимизации, также код будет более читаемым.
-
Типы. Выносить типы в отдельный
types.ts
файл чтобы не занимать место в файле компонента. -
Стили. Рассмотреть другой подход к стилизации, либо sass, либо в идеале
styled-components
- помимо множества фич в виде реиспользуемости кода и темизации, также имеет инкапсуляцию стилей, с чем есть проблема на данный момент. -
Структура папок. Пересмотреть структуру папок с учётом изменений выше, на данный момент это больше похоже как будто всё складывают в одну кучу.
-
Очень много C# подобного кода, в JS есть свои практики и подходы. Например: Например for i циклы не используются, вместо них есть методы массива (
forEach
,map
,filter
и тд). Методы и переменные принято называть с малеьнкой буквы. -
Локализация. Лучше было бы спользовать i18n вместо собственного велосипеда.
Пока это того что нашёл беглым взглядом, список ещё будет обновляться.
Referres #2
Идеи в целом здравые, только пока нет на это времени. А основной рефакторинг нужно проводить именно мне, чтобы разрабатывать дальше.
Идеи в целом здравые, только пока нет на это времени. А основной рефакторинг нужно проводить именно мне, чтобы разрабатывать дальше.
А какая политика касательно форков? Я бы потихоньку как пета написал бы порт на svelte+TS, взяв отсюда только всю работу с АПИ. Не возбраняется?
Идеи в целом здравые, только пока нет на это времени. А основной рефакторинг нужно проводить именно мне, чтобы разрабатывать дальше.
А какая политика касательно форков? Я бы потихоньку как пета написал бы порт на svelte+TS, взяв отсюда только всю работу с АПИ. Не возбраняется?
@CountTo25 Автор выкладывал документацию по работе с апи, а также давал добро на использоание исходников в посте вк, там также найдёте ссылки на документацию. Правда зачем делать форк в вашем случае мне непонятно, учитывая что вы используете другой фреймворк, можно просто ориентироваться на исходники и писать с нуля код. Сам пишу мобильный клиент для игры в свободное время, так что всю инфу брал сугубо из доков. @VladimirKhil А вот что касается распорстранения приложения я не уверен насколько у нас развязаны руки? Понятно что будет указано автор оригинальной игры.
Идеи в целом здравые, только пока нет на это времени. А основной рефакторинг нужно проводить именно мне, чтобы разрабатывать дальше.
А какая политика касательно форков? Я бы потихоньку как пета написал бы порт на svelte+TS, взяв отсюда только всю работу с АПИ. Не возбраняется?
@CountTo25 Автор выкладывал документацию по работе с апи, а также давал добро на использоание исходников в посте вк, там также найдёте ссылки на документацию. Правда зачем делать форк в вашем случае мне непонятно, учитывая что вы используете другой фреймворк, можно просто ориентироваться на исходники и писать с нуля код. Сам пишу мобильный клиент для игры в свободное время, так что всю инфу брал сугубо из доков. @VladimirKhil А вот что касается распорстранения приложения я не уверен насколько у нас развязаны руки? Понятно что будет указано автор оригинальной игры.
Предполагал, что чистого АПИ нет -- и придется из местных сорцов оторвать все подвязки к беку. Было бы проще форкнуть, убрать реакт и оставить голые модели с их гидрацией / функции для общения с беком.
Спасибо за информацию. Доки пока не вижу — если поделитесь прямой ссылкой, будет чудесно. Нет — нет, сам найду, кажется, просто с нахрапа не нашел.
Спасибо за информацию. Доки пока не вижу — если поделитесь прямой ссылкой, будет чудесно. Нет — нет, сам найду, кажется, просто с нахрапа не нашел.
@CountTo25 https://github.com/VladimirKhil/SI/wiki
@CountTo25 @bitvalser можно свободно создавать форки и распространять их при указании автора исходной игры.
- [ ] move all Message constants to SIGameServer client folder
- [ ] refactor messageProcessor into class
- [ ] refactor state and reducers: https://github.com/VladimirKhil/SIOnline/issues/2
- [ ] search for css alternative
- Сделано.
- Будет сделано постепенно, по одному подклассу за раз.
- Потребности пока не видно. Выглядит некритично.
- Будет сделано, только не хотелось бы иметь универсальные имена файлов в папках (index.ts, style.css и пр.), так как это затрудняет навигацию между вкладками.
- В планах.
- В планах.
- Можно подумать.
- Не вижу ничего критичного в этом.
- Это отдельная библиотека. Мне кажется, тоже дело вкуса, как и со Thunk.