commit
ae1d28be12
@ -0,0 +1,23 @@
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
|
||||
' uncomment the following line and comment the first to use locally
|
||||
' !include C4_Container.puml
|
||||
|
||||
' Styling
|
||||
' ##################################
|
||||
|
||||
skinparam rectangle<<node>> {
|
||||
Shadowing false
|
||||
StereotypeFontSize 0
|
||||
FontColor #000000
|
||||
BorderColor #A2A2A2
|
||||
BorderStyle solid
|
||||
}
|
||||
|
||||
' Elements
|
||||
' ##################################
|
||||
!unquoted function Deployment_Node($alias, $label)
|
||||
!return 'rectangle "=='+$label+'" <<node>> as '+$alias
|
||||
!endfunction
|
||||
!unquoted function Deployment_Node($alias, $label, $type)
|
||||
!return 'rectangle "=='+$label+'\n<size:'+$TECHN_FONT_SIZE+'>['+$type+']</size>" <<node>> as '+$alias
|
||||
!endfunction
|
||||
@ -0,0 +1,218 @@
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
|
||||
' uncomment the following line and comment the first to use locally
|
||||
' !include C4_Component.puml
|
||||
|
||||
' Scope: Interactions in an enterprise, software system or container.
|
||||
' Primary and supporting elements: Depends on the diagram scope -
|
||||
' enterprise - people and software systems Related to the enterprise in scope
|
||||
' software system - see system context or container diagrams,
|
||||
' container - see component diagram.
|
||||
' Intended audience: Technical and non-technical people, inside and outside of the software development team.
|
||||
|
||||
' Dynamic diagram introduces (automatically) numbered interactions:
|
||||
' SetIndex(): set the next index,
|
||||
' GetIndex(): get the index and automatically increase index
|
||||
|
||||
' Index
|
||||
' ##################################
|
||||
|
||||
!$index=1
|
||||
|
||||
!procedure increment($step=1)
|
||||
!$index = $index + $step
|
||||
!endprocedure
|
||||
|
||||
!procedure setIndex($new_index)
|
||||
!$index=$new_index
|
||||
!endprocedure
|
||||
|
||||
' Relationship override
|
||||
' ##################################
|
||||
|
||||
' Relationship
|
||||
' ##################################
|
||||
|
||||
!unquoted procedure Rel_($e_index, $alias1, $alias2, $label, $direction="")
|
||||
$alias1 $direction $alias2 : **$e_index: $label**
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_($e_index, $alias1, $alias2, $label, $techn, $direction="")
|
||||
$alias1 $direction $alias2 : **$e_index: $label**\n//<size:$TECHN_FONT_SIZE>[$techn]</size>//
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "-->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "-->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex($e_index, $from, $to, $label, $tech)
|
||||
Rel_($e_index, $from, $to, $label, $tech, "-->>")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_Back($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "<<--")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Back($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "<<--")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Back($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "<<--")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Back($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "<<--")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_Neighbor($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Neighbor($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Neighbor($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Neighbor($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "->>")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_Back_Neighbor($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "<<-")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Back_Neighbor($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "<<-")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Back_Neighbor($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "<<-")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Back_Neighbor($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "<<-")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_D($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "-DOWN->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_D($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "-DOWN->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Down($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "-DOWN->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Down($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "-DOWN->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_D($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-DOWN->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_D($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-DOWN->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Down($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-DOWN->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Down($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-DOWN->>")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_U($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "-UP->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_U($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "-UP->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Up($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "-UP->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Up($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "-UP->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_U($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-UP->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_U($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-UP->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Up($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-UP->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Up($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-UP->>")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_L($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "-LEFT->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_L($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "-LEFT->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Left($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "-LEFT->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Left($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "-LEFT->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_L($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-LEFT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_L($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-LEFT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Left($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-LEFT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Left($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-LEFT->>")
|
||||
!endprocedure
|
||||
|
||||
!unquoted procedure Rel_R($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "-RIGHT->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_R($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "-RIGHT->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Right($from, $to, $label)
|
||||
Rel_($index, $from, $to, $label, "-RIGHT->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure Rel_Right($from, $to, $label, $techn)
|
||||
Rel_($index, $from, $to, $label, $techn, "-RIGHT->>")
|
||||
increment()
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_R($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-RIGHT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_R($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-RIGHT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Right($e_index, $from, $to, $label)
|
||||
Rel_($e_index, $from, $to, $label, "-RIGHT->>")
|
||||
!endprocedure
|
||||
!unquoted procedure RelIndex_Right($e_index, $from, $to, $label, $techn)
|
||||
Rel_($e_index, $from, $to, $label, $techn, "-RIGHT->>")
|
||||
!endprocedure
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 685 KiB After Width: | Height: | Size: 4.1 MiB |
@ -0,0 +1,45 @@
|
||||
@startuml
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
|
||||
!define DEVICONS https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons
|
||||
!define FONTAWESOME https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/font-awesome-5
|
||||
' uncomment the following line and comment the first to use locally
|
||||
' !include C4_Container.puml
|
||||
!include DEVICONS/angular.puml
|
||||
!include DEVICONS/dotnet.puml
|
||||
!include DEVICONS/java.puml
|
||||
!include DEVICONS/msql_server.puml
|
||||
!include FONTAWESOME/server.puml
|
||||
!include FONTAWESOME/envelope.puml
|
||||
|
||||
' LAYOUT_TOP_DOWN()
|
||||
' LAYOUT_AS_SKETCH()
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
title Container diagram for Internet Banking System
|
||||
|
||||
Person(customer, Customer, "A customer of the bank, with personal bank accounts")
|
||||
|
||||
System_Boundary(c1, "Internet Banking") {
|
||||
Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA", "java")
|
||||
Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser", "angular")
|
||||
Container(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device", "dotnet")
|
||||
ContainerDb(database, "Database", "SQL Database", "Stores user registraion information, hased auth credentials, access logs, etc.", "msql_server")
|
||||
Container(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API", "server")
|
||||
}
|
||||
|
||||
System_Ext(email_system, "E-Mail System", "The internal Microsoft Exchange system", "envelope")
|
||||
System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
|
||||
|
||||
Rel(customer, web_app, "Uses", "HTTPS")
|
||||
Rel(customer, spa, "Uses", "HTTPS")
|
||||
Rel(customer, mobile_app, "Uses")
|
||||
|
||||
Rel_Neighbor(web_app, spa, "Delivers")
|
||||
Rel(spa, backend_api, "Uses", "async, JSON/HTTPS")
|
||||
Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS")
|
||||
Rel_Back_Neighbor(database, backend_api, "Reads from and writes to", "sync, JDBC")
|
||||
|
||||
Rel_Back(customer, email_system, "Sends e-mails to")
|
||||
Rel_Back(email_system, backend_api, "Sends e-mails using", "sync, SMTP")
|
||||
Rel_Neighbor(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS")
|
||||
@enduml
|
||||
@ -0,0 +1,51 @@
|
||||
@startuml
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
|
||||
' uncomment the following line and comment the first to use locally
|
||||
' !include C4_Deployment.puml
|
||||
|
||||
'LAYOUT_AS_SKETCH
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
title Deployment Diagram for Internet Banking System - Live
|
||||
|
||||
Deployment_Node(plc, "Big Bank plc", "Big Bank plc data center"){
|
||||
Deployment_Node(dn, "bigbank-api***\tx8", "Ubuntu 16.04 LTS"){
|
||||
Deployment_Node(apache, "Apache Tomcat", "Apache Tomcat 8.x"){
|
||||
Container(api, "API Application", "Java and Spring MVC", "Provides Internet Banking functionality via a JSON/HTTPS API.")
|
||||
}
|
||||
}
|
||||
Deployment_Node(bigbankdb01, "bigbank-db01", "Ubuntu 16.04 LTS"){
|
||||
Deployment_Node(oracle, "Oracle - Primary", "Oracle 12c"){
|
||||
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
||||
}
|
||||
}
|
||||
Deployment_Node(bigbankdb02, "bigbank-db02", "Ubuntu 16.04 LTS"){
|
||||
Deployment_Node(oracle2, "Oracle - Secondary", "Oracle 12c"){
|
||||
ContainerDb(db2, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
||||
}
|
||||
}
|
||||
Deployment_Node(bb2, "bigbank-web***\tx4", "Ubuntu 16.04 LTS"){
|
||||
Deployment_Node(apache2, "Apache Tomcat", "Apache Tomcat 8.x"){
|
||||
Container(web, "Web Application", "Java and Spring MVC", "Delivers the static content and the Internet Banking single page application.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Deployment_Node(mob, "Customer's mobile device", "Apple IOS or Android"){
|
||||
Container(mobile, "Mobile App", "Xamarin", "Provides a limited subset of the Internet Banking functionality to customers via their mobile device.")
|
||||
}
|
||||
|
||||
Deployment_Node(comp, "Customer's computer", "Mircosoft Windows of Apple macOS"){
|
||||
Deployment_Node(browser, "Web Browser", "Google Chrome, Mozilla Firefox"){
|
||||
Container(spa, "Single Page Application", "JavaScript and Angular", "Provides all of the Internet Banking functionality to customers via their web browser.")
|
||||
}
|
||||
}
|
||||
|
||||
Rel(mobile, api, "Makes API calls to", "json/HTTPS")
|
||||
Rel(spa, api, "Makes API calls to", "json/HTTPS")
|
||||
Rel(web, spa, "Delivers to the customer's web browser")
|
||||
Rel(api, db, "Reads from and writes to", "JDBC")
|
||||
Rel(api, db2, "Reads from and writes to", "JDBC")
|
||||
Rel(db, db2, "Replicates data to")
|
||||
|
||||
@enduml
|
||||
@ -0,0 +1,15 @@
|
||||
@startuml
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Dynamic.puml
|
||||
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
ContainerDb(c4, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
||||
Container(c1, "Single-Page Application", "JavaScript and Angular", "Provides all of the Internet banking functionality to customers via their web browser.")
|
||||
Container_Boundary(b, "API Application") {
|
||||
Component(c3, "Security Component", "Spring Bean", "Provides functionality Related to signing in, changing passwords, etc.")
|
||||
Component(c2, "Sign In Controller", "Spring MVC Rest Controller", "Allows users to sign in to the Internet Banking System.")
|
||||
}
|
||||
Rel_R(c1, c2, "Submits credentials to", "JSON/HTTPS")
|
||||
Rel(c2, c3, "Calls isAuthenticated() on")
|
||||
Rel_R(c3, c4, "select * from users where username = ?", "JDBC")
|
||||
@enduml
|
||||
@ -0,0 +1,35 @@
|
||||
@startuml
|
||||
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Dynamic.puml
|
||||
|
||||
LAYOUT_TOP_DOWN()
|
||||
LAYOUT_WITH_LEGEND()
|
||||
|
||||
Person(customer, Customer, "A customer")
|
||||
System_Boundary(c1, "Customer Information") {
|
||||
Container(app, "Customer Application", "Javascript, Angular", "Allows customers to manage their profile")
|
||||
Container(customer_service, "Customer Service", "Java, Spring Boot", "The point of access for customer information")
|
||||
Container(message_bus, "Message Bus", "RabbitMQ", "Transport for business events")
|
||||
Container(reporting_service, "Reporting Service", "Ruby", "Creates normalised data for reporting purposes")
|
||||
Container(audit_service, "Audit Service", "C#/.NET", "Provides organisation-wide auditing facilities")
|
||||
ContainerDb(customer_db, "Customer Database", "Oracle 12c", "Stores customer information")
|
||||
ContainerDb(reporting_db, "Reporting Database", "MySQL", "Stores a normalized version of all business data for ad hoc reporting purposes")
|
||||
Container(audit_store, "Audit Store", "Event Store", "Stores information about events that have happened")
|
||||
}
|
||||
|
||||
Rel(customer, app, "Updates his profile using", "HTTPS")
|
||||
Rel(app, customer_service, "Updates customer information using", "JSON/HTTPS")
|
||||
Rel(customer_service, customer_db, "Stores data in", "JDBC")
|
||||
|
||||
RelIndex($index-1, customer_service, message_bus, "Sends customer update events to", "async")
|
||||
RelIndex($index-2, customer_service, app, "Confirm update to", "async")
|
||||
increment()
|
||||
|
||||
RelIndex($index-1, message_bus, reporting_service, "Sends customer update events to", "async")
|
||||
increment()
|
||||
RelIndex($index-1, reporting_service, reporting_db, "Stores data in")
|
||||
|
||||
setIndex(5)
|
||||
RelIndex($index-2, message_bus, audit_service, "Sends customer update events to", "async")
|
||||
increment()
|
||||
RelIndex($index-2, audit_service, audit_store, "Stores events in")
|
||||
@enduml
|
||||
Loading…
Reference in New Issue