1/*2 * This is a combined version of the following workspaces:3 *4 * - "Big Bank plc - System Landscape" (https://structurizr.com/share/28201/)5 * - "Big Bank plc - Internet Banking System" (https://structurizr.com/share/36141/)6*/7workspace "Big Bank plc" "This is an example workspace to illustrate the key features of Structurizr, via the DSL, based around a fictional online banking system." {89 model {10 customer = person "Personal Banking Customer" "A customer of the bank, with personal bank accounts." "Customer"1112 group "Big Bank plc" {13 supportStaff = person "Customer Service Staff" "Customer service staff within the bank." "Bank Staff"14 backoffice = person "Back Office Staff" "Administration and support staff within the bank." "Bank Staff"1516 mainframe = softwaresystem "Mainframe Banking System" "Stores all of the core banking information about customers, accounts, transactions, etc." "Existing System"17 email = softwaresystem "E-mail System" "The internal Microsoft Exchange e-mail system." "Existing System"18 atm = softwaresystem "ATM" "Allows customers to withdraw cash." "Existing System"1920 internetBankingSystem = softwaresystem "Internet Banking System" "Allows customers to view information about their bank accounts, and make payments." {21 singlePageApplication = container "Single-Page Application" "Provides all of the Internet banking functionality to customers via their web browser." "JavaScript and Angular" "Web Browser"22 mobileApp = container "Mobile App" "Provides a limited subset of the Internet banking functionality to customers via their mobile device." "Xamarin" "Mobile App"23 webApplication = container "Web Application" "Delivers the static content and the Internet banking single page application." "Java and Spring MVC"24 apiApplication = container "API Application" "Provides Internet banking functionality via a JSON/HTTPS API." "Java and Spring MVC" {25 signinController = component "Sign In Controller" "Allows users to sign in to the Internet Banking System." "Spring MVC Rest Controller"26 accountsSummaryController = component "Accounts Summary Controller" "Provides customers with a summary of their bank accounts." "Spring MVC Rest Controller"27 resetPasswordController = component "Reset Password Controller" "Allows users to reset their passwords with a single use URL." "Spring MVC Rest Controller"28 securityComponent = component "Security Component" "Provides functionality related to signing in, changing passwords, etc." "Spring Bean"29 mainframeBankingSystemFacade = component "Mainframe Banking System Facade" "A facade onto the mainframe banking system." "Spring Bean"30 emailComponent = component "E-mail Component" "Sends e-mails to users." "Spring Bean"31 }32 database = container "Database" "Stores user registration information, hashed authentication credentials, access logs, etc." "Oracle Database Schema" "Database"33 }34 }3536 # relationships between people and software systems37 customer -> internetBankingSystem "Views account balances, and makes payments using"38 internetBankingSystem -> mainframe "Gets account information from, and makes payments using"39 internetBankingSystem -> email "Sends e-mail using"40 email -> customer "Sends e-mails to"41 customer -> supportStaff "Asks questions to" "Telephone"42 supportStaff -> mainframe "Uses"43 customer -> atm "Withdraws cash using"44 atm -> mainframe "Uses"45 backoffice -> mainframe "Uses"4647 # relationships to/from containers48 customer -> webApplication "Visits bigbank.com/ib using" "HTTPS"49 customer -> singlePageApplication "Views account balances, and makes payments using"50 customer -> mobileApp "Views account balances, and makes payments using"51 webApplication -> singlePageApplication "Delivers to the customer's web browser"5253 # relationships to/from components54 singlePageApplication -> signinController "Makes API calls to" "JSON/HTTPS"55 singlePageApplication -> accountsSummaryController "Makes API calls to" "JSON/HTTPS"56 singlePageApplication -> resetPasswordController "Makes API calls to" "JSON/HTTPS"57 mobileApp -> signinController "Makes API calls to" "JSON/HTTPS"58 mobileApp -> accountsSummaryController "Makes API calls to" "JSON/HTTPS"59 mobileApp -> resetPasswordController "Makes API calls to" "JSON/HTTPS"60 signinController -> securityComponent "Uses"61 accountsSummaryController -> mainframeBankingSystemFacade "Uses"62 resetPasswordController -> securityComponent "Uses"63 resetPasswordController -> emailComponent "Uses"64 securityComponent -> database "Reads from and writes to" "JDBC"65 mainframeBankingSystemFacade -> mainframe "Makes API calls to" "XML/HTTPS"66 emailComponent -> email "Sends e-mail using"6768 deploymentEnvironment "Development" {69 deploymentNode "Developer Laptop" "" "Microsoft Windows 10 or Apple macOS" {70 deploymentNode "Web Browser" "" "Chrome, Firefox, Safari, or Edge" {71 developerSinglePageApplicationInstance = containerInstance singlePageApplication72 }73 deploymentNode "Docker Container - Web Server" "" "Docker" {74 deploymentNode "Apache Tomcat" "" "Apache Tomcat 8.x" {75 developerWebApplicationInstance = containerInstance webApplication76 developerApiApplicationInstance = containerInstance apiApplication77 }78 }79 deploymentNode "Docker Container - Database Server" "" "Docker" {80 deploymentNode "Database Server" "" "Oracle 12c" {81 developerDatabaseInstance = containerInstance database82 }83 }84 }85 deploymentNode "Big Bank plc" "" "Big Bank plc data center" "" {86 deploymentNode "bigbank-dev001" "" "" "" {87 softwareSystemInstance mainframe88 }89 }9091 }9293 deploymentEnvironment "Live" {94 deploymentNode "Customer's mobile device" "" "Apple iOS or Android" {95 liveMobileAppInstance = containerInstance mobileApp96 }97 deploymentNode "Customer's computer" "" "Microsoft Windows or Apple macOS" {98 deploymentNode "Web Browser" "" "Chrome, Firefox, Safari, or Edge" {99 liveSinglePageApplicationInstance = containerInstance singlePageApplication100 }101 }102103 deploymentNode "Big Bank plc" "" "Big Bank plc data center" {104 deploymentNode "bigbank-web***" "" "Ubuntu 16.04 LTS" "" 4 {105 deploymentNode "Apache Tomcat" "" "Apache Tomcat 8.x" {106 liveWebApplicationInstance = containerInstance webApplication107 }108 }109 deploymentNode "bigbank-api***" "" "Ubuntu 16.04 LTS" "" 8 {110 deploymentNode "Apache Tomcat" "" "Apache Tomcat 8.x" {111 liveApiApplicationInstance = containerInstance apiApplication112 }113 }114115 deploymentNode "bigbank-db01" "" "Ubuntu 16.04 LTS" {116 primaryDatabaseServer = deploymentNode "Oracle - Primary" "" "Oracle 12c" {117 livePrimaryDatabaseInstance = containerInstance database118 }119 }120 deploymentNode "bigbank-db02" "" "Ubuntu 16.04 LTS" "Failover" {121 secondaryDatabaseServer = deploymentNode "Oracle - Secondary" "" "Oracle 12c" "Failover" {122 liveSecondaryDatabaseInstance = containerInstance database "Failover"123 }124 }125 deploymentNode "bigbank-prod001" "" "" "" {126 softwareSystemInstance mainframe127 }128 }129130 primaryDatabaseServer -> secondaryDatabaseServer "Replicates data to"131 }132 }133134 views {135 systemlandscape "SystemLandscape" {136 include *137 autoLayout138 }139140 systemcontext internetBankingSystem "SystemContext" {141 include *142 animation {143 internetBankingSystem144 customer145 mainframe146 email147 }148 autoLayout149 }150151 container internetBankingSystem "Containers" {152 include *153 animation {154 customer mainframe email155 webApplication156 singlePageApplication157 mobileApp158 apiApplication159 database160 }161 autoLayout162 }163164 component apiApplication "Components" {165 include *166 animation {167 singlePageApplication mobileApp database email mainframe168 signinController securityComponent169 accountsSummaryController mainframeBankingSystemFacade170 resetPasswordController emailComponent171 }172 autoLayout173 }174175 dynamic apiApplication "SignIn" "Summarises how the sign in feature works in the single-page application." {176 singlePageApplication -> signinController "Submits credentials to"177 signinController -> securityComponent "Validates credentials using"178 securityComponent -> database "select * from users where username = ?"179 database -> securityComponent "Returns user data to"180 securityComponent -> signinController "Returns true if the hashed password matches"181 signinController -> singlePageApplication "Sends back an authentication token to"182 autoLayout183 }184185 deployment internetBankingSystem "Development" "DevelopmentDeployment" {186 include *187 animation {188 developerSinglePageApplicationInstance189 developerWebApplicationInstance developerApiApplicationInstance190 developerDatabaseInstance191 }192 autoLayout193 }194195 deployment internetBankingSystem "Live" "LiveDeployment" {196 include *197 animation {198 liveSinglePageApplicationInstance199 liveMobileAppInstance200 liveWebApplicationInstance liveApiApplicationInstance201 livePrimaryDatabaseInstance202 liveSecondaryDatabaseInstance203 }204 autoLayout205 }206207 styles {208 element "Person" {209 color #ffffff210 fontSize 22211 shape Person212 }213 element "Customer" {214 background #08427b215 }216 element "Bank Staff" {217 background #999999218 }219 element "Software System" {220 background #1168bd221 color #ffffff222 }223 element "Existing System" {224 background #999999225 color #ffffff226 }227 element "Container" {228 background #438dd5229 color #ffffff230 }231 element "Web Browser" {232 shape WebBrowser233 }234 element "Mobile App" {235 shape MobileDeviceLandscape236 }237 element "Database" {238 shape Cylinder239 }240 element "Component" {241 background #85bbf0242 color #000000243 }244 element "Failover" {245 opacity 25246 }247 }248 }249}