our app development 1 Modularization Strategies, conventions, problems and how we solve it. 2 Looking Forward Possible changes, challenges, things to consider 3
our architecture to be based on a plugin-like system from code to module declaration • We want strong ownership of the modules • We don’t want a complex setup as our achievement
LoggedInRoute class LoginCheckMiddleWare : MiddleWare { override fun onRouting(route: BaseRoute<*>, routeParam: RouteParam) { // Check if is current not logged in if(route is LoggedInRoute && !isLoggedIn) { return MiddleWareResult( LoginRoute, LoginRouteParam(createRedirectParam() ) } return MiddleWareResult(route, routeParam) } }
LoggedInRoute class LoginCheckMiddleWare : MiddleWare { override fun onRouting(route: BaseRoute<*>, routeParam: RouteParam) { // Check if is current not logged in if(route is LoggedInRoute && !isLoggedIn) { return MiddleWareResult( LoginRoute, LoginRouteParam(createRedirectParam() ) } return MiddleWareResult(route, routeParam) } }
LoggedInRoute class LoginCheckMiddleWare : MiddleWare { override fun onRouting(route: BaseRoute<*>, routeParam: RouteParam) { // Check if is current not logged in if(route is LoggedInRoute && !isLoggedIn) { return MiddleWareResult( LoginRoute, LoginRouteParam(createRedirectParam() ) } return MiddleWareResult(route, routeParam) } }
LoggedInRoute class LoginCheckMiddleWare : MiddleWare { override fun onRouting(route: BaseRoute<*>, routeParam: RouteParam) { // Check if is current not logged in if(route is LoggedInRoute && !isLoggedIn) { return MiddleWareResult( LoginRoute, LoginRouteParam(createRedirectParam() ) } return MiddleWareResult(route, routeParam) } }
LoggedInRoute class LoginCheckMiddleWare : MiddleWare { override fun onRouting(route: BaseRoute<*>, routeParam: RouteParam) { // Check if is current not logged in if(route is LoggedInRoute && !isLoggedIn) { return MiddleWareResult( LoginRoute, LoginRouteParam(createRedirectParam() ) } return MiddleWareResult(route, routeParam) } }
build speed, and in software development build speed is greatly affect iteration speed • Even if the modularization done right, the actual gain is on parallel computation and more effective incremental build • No to mention… ◦ Times to take us from the start of our app to our feature ◦ Creating specific environment for our development
:feature_hotel:impl, :feature_hotel:public • Separate wiring ◦ Feature hotel → :feature_hotel:wiring, :feature_hotel:fake_wiring • No more common modules, separated into tiny specific modules • Separated route module? Even more modules • Might be overkill 🤔 • But….