LikeC4 Code
This is the same Big Bank C4 model defined with LikeC4.
The specification with similar element kinds:
_spec.c4
specification {
element enterprise
element softwaresystem
element container
element component
element person {
style {
color secondary
shape person
}
}
// Structurizr does not have a database element
// Just for the sake of the example
element database {
style {
shape storage
}
}
}LikeC4 language is partially compatible with Structurizr DSL.
So we may copy-paste the model and views from it.
Deployments are skipped as LikeC4 currently does not support that.
views requires some additional work, this is covered in the next sections:
bigbank.c4
model {
customer = person "Personal Banking Customer" {
description "A customer of the bank, with personal bank accounts."
}
bigbank = enterprise "Big Bank plc" {
supportStaff = person "Customer Service Staff" {
description: "Customer service staff within the bank."
}
backoffice = person "Back Office Staff" {
description: "Administration and support staff within the bank."
}
mainframe = softwaresystem "Mainframe Banking System" {
description: "Stores all of the core banking information about customers, accounts, transactions, etc."
style {
color: secondary
}
}
email = softwaresystem "E-mail System" {
description: "The internal Microsoft Exchange e-mail system."
style {
color: muted
}
}
atm = softwaresystem "ATM" {
description: "Allows customers to withdraw cash."
}
internetBankingSystem = softwaresystem "Internet Banking System" {
description: "Allows customers to view information about their bank accounts, and make payments."
singlePageApplication = container "Single-Page Application" {
description: "Provides all of the Internet banking functionality to customers via their web browser."
technology: "JavaScript and Angular"
style {
shape browser
}
}
mobileApp = container "Mobile App" {
description: "Provides a limited subset of the Internet banking functionality to customers via their mobile device."
technology: "Xamarin"
style {
shape mobile
}
}
webApplication = container "Web Application" {
description: "Delivers the static content and the Internet banking single page application."
technology: "Java and Spring MVC"
}
apiApplication = container "API Application" {
description: "Provides Internet banking functionality via a JSON/HTTPS API."
technology: "Java and Spring MVC"
signinController = component "Sign In Controller" {
description: "Allows users to sign in to the Internet Banking System."
technology: "Spring MVC Rest Controller"
}
accountsSummaryController = component "Accounts Summary Controller" {
description: "Provides customers with a summary of their bank accounts."
technology: "Spring MVC Rest Controller"
}
resetPasswordController = component "Reset Password Controller" {
description: "Allows users to reset their passwords with a single use URL."
technology: "Spring MVC Rest Controller"
}
securityComponent = component "Security Component" {
description: "Provides functionality related to signing in, changing passwords, etc."
technology: "Spring Bean"
}
mainframeBankingSystemFacade = component "Mainframe Banking System Facade" {
description: "A facade onto the mainframe banking system."
technology: "Spring Bean"
}
emailComponent = component "E-mail Component"{
description: "Sends e-mails to users."
technology: "Spring Bean"
}
}
database = database "Database" {
description: "Stores user registration information, hashed authentication credentials, access logs, etc."
technology: "Oracle Database Schema"
}
}
}
// relationships between people and software systems
customer -> internetBankingSystem "Views account balances, and makes payments using"
internetBankingSystem -> mainframe "Gets account information from, and makes payments using"
internetBankingSystem -> email "Sends e-mail using"
email -> customer "Sends e-mails to"
customer -> supportStaff "Asks questions to"
supportStaff -> mainframe "Uses"
customer -> atm "Withdraws cash using"
atm -> mainframe "Uses"
backoffice -> mainframe "Uses"
// relationships to/from containers
customer -> webApplication "Visits bigbank.com using HTTPS"
customer -> singlePageApplication "Views account balances, and makes payments using"
customer -> mobileApp "Views account balances, and makes payments using"
webApplication -> singlePageApplication "Delivers to the customer's web browser"
// relationships to/from components
singlePageApplication -> signinController "Makes API calls to"
singlePageApplication -> accountsSummaryController "Makes API calls to"
singlePageApplication -> resetPasswordController "Makes API calls to"
mobileApp -> signinController "Makes API calls to"
mobileApp -> accountsSummaryController "Makes API calls to"
mobileApp -> resetPasswordController "Makes API calls to"
signinController -> securityComponent "Uses"
accountsSummaryController -> mainframeBankingSystemFacade "Uses"
resetPasswordController -> securityComponent "Uses"
resetPasswordController -> emailComponent "Uses"
securityComponent -> database "Reads from and writes to"
mainframeBankingSystemFacade -> mainframe "Makes API calls to"
emailComponent -> email "Sends e-mail using"
}
views {
view index of bigbank {
title "Big Bank - Landscape"
include *
}
view context of bigbank {
title "Internet Banking System - SystemContext"
include
bigbank,
mainframe,
internetBankingSystem,
email,
customer
style * {
color secondary
}
style bigbank, internetBankingSystem {
color primary
}
}
view ibsContainers of internetBankingSystem {
title "Internet Banking System - Containers"
include
*,
-> customer
}
view customer of customer {
include
*,
customer -> internetBankingSystem.*,
customer -> bigbank.*
exclude webApplication
style bigbank {
color muted
}
style customer {
color green
}
}
view spa of singlePageApplication {
include
*,
apiApplication,
internetBankingSystem,
-> singlePageApplication ->
style * {
color secondary
}
style internetBankingSystem {
color muted
}
style singlePageApplication {
color green
}
}
view support of supportStaff {
include
*,
bigbank,
-> backoffice ->
}
view apiApp of internetBankingSystem.apiApplication {
title "API Application - Components"
include *
style * {
color muted
}
style singlePageApplication, mobileApp {
color secondary
}
style apiApplication, apiApplication.* {
color primary
}
}
view webapp of webApplication {
include
*,
internetBankingSystem,
bigbank
style bigbank {
color muted
}
}
view mobileApp of mobileApp {
include
*,
internetBankingSystem,
internetBankingSystem.apiApplication,
mobileApp -> internetBankingSystem.apiApplication.*
style * {
color secondary
}
style apiApplication, internetBankingSystem {
color muted
}
style mobileApp {
color green
}
}
}Let's start with the System Landscape diagram.