# Current Architecture evm-cli ```plantuml package "Actor" { [user] } package "Client" { [evm-cli] } [user] -> [evm-cli] ``` # New Architecture evm-cli ```plantuml package "Actor" { [user] } package "Client" { [evm-cli] } cloud { [evm-cli-content] } [user] --> [evm-cli] [evm-cli] --> [evm-cli-content] ``` # Sequence current architect evm-cli (service gen) ```plantuml actor user as u entity "evm-cli" as cli database "s3" u -> cli: Generate Boilerplate cli -> s3: Get Template s3 -> cli: Return Template cli -> cli: Generate Boilerplate Content cli -> u: Generate Boilerplate Files ``` # Sequence new architect evm-cli (service gen) ```plantuml actor user as u entity "evm-cli" as cli entity "evm-cli-content" as content u -> cli: Generate Boilerplate cli -> content: Send Directory and DDL content -> content: Generate Boilerplate Content content -> cli: Return Generated Boilerplate Content cli -> u: Generate Boilerplate Files ``` # Opsi 1 Pros: - We dont need to send any data to server on every changes - Cons: - if we often doing update, user will download updates more frequent - Will having complex algorithm when auto update # Opsi 2 (v) Pros: - Less update in user side (client app) - Easily tracking user behaviour - More fun to develop - Cons: - Transactional will having big request - Need flexible design in client app that the command will be controlled by server app