350 parts
i-bank functional structure ▪technical modules – authentication – auditing – user profile – OTP functionality – notifications – push notifications – etc ▪business modules – deposits – cards – loans – bill payments – investments – transaction files – etc
i-bank code structure ▪15 technical modules ▪35 business modules ▪350 projects ▪240k lines
ALM planning defining designing building deployment testing
modular design business area designing building deployment testing designing building deployment testing designing building deployment testing planning defining planning defining planning defining
modular design customer component (c# project) product component (c# project) order component (c# project) day #1 designing building deployment testing designing building deployment testing designing building deployment testing
modular design customer component (c# project) product component (c# project) order component (c# project) day #2 designing building deployment testing designing building deployment testing designing building deployment testing
circular reference customer component (c# project) product component (c# project) order component (c# project) day #3 designing building deployment testing designing building deployment testing designing building deployment testing
modular design customer component (c# project) product component (c# project) order component (c# project) day #4 designing building deployment testing designing building deployment testing designing building deployment testing
modular design customerproductorder component (c# project) day #5 designing building deployment testing
dependency resolution customer component (c# project) product component (c# project) order component (c# project)
modular design component implementation component interface component (folder) component publishing component implementation component interface component (folder) component publishing component implementation component interface component (folder) component publishing c# projects customer productorder implementation projects web service dependency rdbms dependency
component interface data contractsservice interfaces very simple reusable methods classes vs interfaces
invalid paths component implementation c# projects component interface component (folder) component publishing customer component (folder) component implementation component interface component publishing product component implementation component interface component (folder) component publishing order
valid paths c# projects component implementation component interface component (folder) component publishing customer component implementation component interface component (folder) component publishing order component implementation component interface component (folder) component publishing product
modular design component implementation component interface component (folder) component publishing customer component implementation component interface component (folder) component publishing product component implementation component interface component (folder) component publishing order nuget packages
interfaceimplementation c# decoupling tools extension methods
type mapping c# decoupling toolsextension methods
dependency propagation component (c# project) unit component (c# project) unit component (c# project) unit component (c# project) unit component (c# project) unit application high level libraries low level libraries configuration db connection logging c# decoupling tools dependency injection
dependency resolution component (c# project) unit component (c# project) unit component (c# project) unit component (c# project) unit component (c# project) unit application high level libraries low level libraries configuration factory abstract factory static factory service locator c# decoupling tools dependency injection
controller constructor c# decoupling tools dependency injection
simple injector configuration c# decoupling tools dependency injection
1 st upload (Sept 2014) ▪255k lines ▪30% Duplicated Code (49k lines, 9.5k units) ▪11k C# lines 61+ LOC ▪2k C# lines McCabe 26+ ▪1k C# lines > 4 Parameters
1 st upload (Sept 2014) ▪255k lines ▪30% Duplicated Code (49k lines, 9.5k units) ▪11k C# lines 61+ LOC ▪2k C# lines McCabe 26+ ▪1k C# lines > 4 Parameters
unit & module guidelines ▪short units of code – up to 15 lines ▪simple units of code – up to 4 branch points ▪write code once ▪small unit interface ▪separate concerns in modules – small modules refactoring techniques extract method extract object unit: method, function module: file, class, function
module guidelines ▪loosely coupled components – small module interface ▪balanced number & size of top level components ▪small codebase
technology & tools ▪ TypeScript ▪ npm, bower, gulp, tsd, … ▪ internal package repository (Nexus) ▪ build automation (TFS) ▪ maintainability tools (SonarLint) ▪ maintainability monitoring (SIG, SonarQube)