summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/decisions_history.md59
1 files changed, 21 insertions, 38 deletions
diff --git a/doc/decisions_history.md b/doc/decisions_history.md
index fd114ff0..3ced1889 100644
--- a/doc/decisions_history.md
+++ b/doc/decisions_history.md
@@ -1,39 +1,31 @@
# Technical decisions and issues log
## 2019.07-2020.04 Full Kotlin migration
-[@joffrey-bion][1] — :key: *Frontend, Kotlin*
Synchronizing backend and frontend when making changes to the API is a pain.
Model classes need to be written and modified twice to be kept in sync.
-Moreover, a Java client also needs to be maintained to run integration tests
-for the server.
-
-This is why I decided to leverage Kotlin multiplatform capabilities to define
-a reusable common model and client.
+Moreover, a Java client also needs to be maintained to run integration tests for the server.
+This is why I decided to leverage Kotlin multiplatform capabilities to define a reusable common model and client.
It took some time because Kotlin itself changed a lot during the past year.
-Also, there was no existing solution for a multiplatform STOMP client, so I
-ended up building [Krossbow](https://github.com/joffrey-bion/krossbow).
-This took a bit of time too.
+Also, there was no existing solution for a multiplatform STOMP client, so I ended up building
+[Krossbow](https://github.com/joffrey-bion/krossbow).
+This took a lot of time too.
-Once a common client and model was defined, there is the problem of the local
-project dependencies.
-Using a TypeScript/React frontend built with npm, it wasn't possible to depend
-on a local gradle subproject.
+Once a common client and model was defined, there is the problem of the local project dependencies.
+Using a TypeScript/React frontend built with npm, it wasn't possible to depend on a local gradle subprojects for the
+model and the client.
That's why it was time to try out Kotlin React.
-Kotlin React is easy to use in itself, but using React component libraries
-from Kotlin is quite tedious at the time.
-Dukat, the TypeScript to Kotlin externals conversion tool, doesn't work
-reliably and doesn't work at all for React stuff, so the declarations have to
-be written manually.
+Kotlin React is easy to use in itself, but using React component libraries from Kotlin is quite tedious at the time.
+Dukat, the TypeScript to Kotlin externals conversion tool, doesn't work reliably and doesn't work at all for React
+stuff, so the declarations have to be written manually.
## 2019.05.02-07 Frontend migration to TypeScript
-[@joffrey-bion][1] — :key: *Frontend, TypeScript*
Flow is nice, but doesn't give me the safety I expect. In its nature, Flow is a type checker aside from the build of
-the project. This means that it is possible to build the project successfully even with type errors in it, depending on how it is
-configured.
+the project. This means that it is possible to build the project successfully even with type errors in it, depending on
+how it is configured.
I also wasn't too happy about the performance of the IDE integration of Flow. Maybe I didn't put much effort into
configuring things properly, but I did try multiple settings with more or less safety/performance. The overall
@@ -43,7 +35,6 @@ TypeScript came and saved the day. During the migration, it spotted several plac
where the types were incorrect. Also, I could clean up a bit the types of the redux actions and their creators.
## 2018.07.05-10 Backend migration to Kotlin
-[@joffrey-bion][1] — :key: *Backend, Kotlin*
Kotlin really improves on Java on multiple aspects:
@@ -59,7 +50,6 @@ I migrated the game engine and backend server of Seven Wonders to see how it goe
kind of change at work. For now, this has been quite a success.
## 2017.08-2018.04 Livedoc development
-[@joffrey-bion][1] — :key: *API, Documentation*
Not much has been done on the Seven Wonders project for a while, because I stopped to build
[Livedoc](https://joffrey-bion.github.io/livedoc/).
@@ -72,7 +62,6 @@ It still lacks a couple features:
I feel like we're not far from having something very useful now.
## 2017.05.25-28 Flow type-checking + ImmutableJS
-[@joffrey-bion][1] — :key: *Frontend*
Javascript can easily become a mess when the code base grows, and static typing helps wrapping one's head around
what's going on, especially when multiple people are involved in writing code in the same project.
@@ -90,7 +79,6 @@ Of course, there is still the problem of debugging immutable structures in the c
that for now. Here we are, back to Immutable JS.
## 2017.05.25-27 Web socket integration tests - Jackstomp
-[@joffrey-bion][1] — :key: *Backend, Tests*
Unit tests are great, but only check individual components. To build a more robust test suite, we needed to add
tests that validate:
@@ -107,7 +95,6 @@ Since the configuration of such a client was not as smooth as I expected, I crea
running with sensible defaults.
## 2017.05.13 Migration to seamless-immutable
-[@joffrey-bion][1] — :key: *Frontend, Immutable*
Using Immutable JS has proved to be a pain, especially because the cumbersome API is not contained in the reducers but
leaks out in the React components. As far as accessing the data is concerned, I dislike not being able to do it the
@@ -126,7 +113,6 @@ Seamless Immutable required using [redux-seamless-immutable](https://github.com/
seamless-immutable-compatible `combineReducers()` and `routerReducer()` functions.
## 2017.04.06 Live API documentation
-[@joffrey-bion][1] — :key: *Backend, API, Documentation*
As frontend development was starting, we felt the need for a better API doc than a plain shared Google Sheet.
The best doc is an up-to-date doc that stays so. The easiest way I found to keep it up-to-date is to generate it.
@@ -144,23 +130,22 @@ That being said, Fabio Mafioletti does not seem to have a lot of time available
this support, so I might have to release from my own fork of the project, or create a new project based on JsonDoc.
## 2017.01.20 Frontend architecture refactoring
-[@victorchabbert][2] — :key: Frontend, Redux*
-I based the frontend architecture on [mxstbr](https://twitter.com/mxstbr)'s
+[@victorchabbert][2] based the frontend architecture on [mxstbr](https://twitter.com/mxstbr)'s
[react-boilerplate](https://github.com/mxstbr/react-boilerplate) (thanks Max!). The recommended structure for his
boilerplate is to group files by features. As such, in a feature folder, you would find reducers, actions types and
creators, selectors, sagas as well as containers.
-At first, this choice seemed suitable for our project but with time, I found out that it was causing us headaches
-because of the amount of shared data and logic we have between containers and pages. This is when I remembered
+At first, this choice seemed suitable for our project but with time, we found out that it was causing us headaches
+because of the amount of shared data and logic we have between containers and pages. This is when Victor remembered
[Matteo's](https://twitter.com/mazzarolomatteo) blog post on
-[a maintainable project structure](https://hackernoon.com/my-journey-toward-a-maintainable-project-structure-for-react-redux-b05dfd999b5#.o9pn60cv9) from last october. I highly recommend reading.
+[a maintainable project structure](https://hackernoon.com/my-journey-toward-a-maintainable-project-structure-for-react-redux-b05dfd999b5#.o9pn60cv9)
+from last october. He highly recommends reading it.
-I refactored our code to use the `Ducks` principle (the word comes from re*DUX*) and I can already see the ease to
-import all redux specific files. I will update this section with more info after using it more extensively.
+He refactored our code to use the `Ducks` principle (the word comes from re*DUX*) and can already see the ease to
+import all redux specific files.
## 2017.01.20 Unified build Spring Boot + React
-[@joffrey-bion][1] — :key: *Build, CI, Deployment*
Some nice plugins allowed for bundling, minification etc. directly from Gradle, but I wanted to make use of the local
`package.json` scripts to be consistent with the frontend development workflow.
@@ -192,12 +177,11 @@ to add a Procfile to manually specify the `backend` subproject in the process co
web: java -Dserver.port=$PORT $JAVA_OPTS -jar backend/build/libs/*.jar
## 2016.12.08 React frontend
-[@joffrey-bion][1] — :key: *Frontend*
We decided to put the react stuff into `src/main/js` as it matches maven/gradle project structure conventions. As
`src/main/java` contains the Java sources, why not put the JavaScript sources in `src/main/js`?
-The technical choices were mostly guided by [@victorchabbert][1], as I had little experience with React, and the
+The technical choices were mostly guided by [@victorchabbert][2], as I had little experience with React, and the
frontend stuff in general.
Technical decisions:
@@ -214,7 +198,6 @@ So far, no special build including the produced static inside the webapp's Jar.
independently and both the frontend dev server and the spring boot server can run locally and communicate.
## 2016.12.04 Spring Boot backend
-[@joffrey-bion][1] — :key: *Backend*
Technical decisions:
bgstack15