Category: PlantUML

PlantUML – N Tier architecture Diagram

1 Introduction

  • PlantUML is an open source tool that can create a variety of diagrams, including
    sequence diagrams.
  • Each diagram is created from a set of instructions contained in a text file.
  • Anyeditor that does not introduce formatting characters (e.g., notepad, wordpad) may be used to create or edit the files.
  • .NET programmers can use VS Code with PlantUML plugin.
  • PlantUML can be downloaded at http://plantuml.sourceforge.net/index.html

2. Quick reference

  • All frequently used symbols are documented in the page http://ogom.github.io/draw_uml/plantuml/
  • PlantUML file contains processing instructions starting with @startuml on the first line and @enduml on the last line.
  • You can create a common theme file and include in your code files. !include Theme.txt
  • Indentations, white spaces, line continuation
    • PlantUML ignores blank lines and whitespace at the beginning of a line. Liberal use of whitespace to offset logical blocks in the text file can enhance readability.
    • Place backslash at the end of the line “\”. Preprocessor will concatenate subsequent line to the current line
  • Comments
    • Comments can be included in the file by starting the line with a single quote (‘).
    • To put a comment on several lines you can start with /’ and end the quote with ‘/
      • 'This is a short comment
        /' This is how you can
        span multiple lines
        of comments
        '/ 
  • Declarations
    • Although PlantUML does not require you to define elements / interfaces / participants (i.e., entities), it is recommended best practice to define all participants together and before they are used.
    • If the element name is long or needs spaces, declare the participant using a short name and the display name. The short name can be used in diagram specific processing instructions.
    • To control the layout of the diagram, you can add spaces in the display name to better
      position the participants.
    • participant POS as " POS "
      participant OPT as " OPT "
      participant LH as "Loyalty Host"
  • Notes
    • Text for notes can be split over multiple lines by inserting new lines (\n) into the note text. Alternatively, the keyword note may be used, followed by the note text on one or more lines, followed by keyword end note.
    • note right of OPT: right of OPT\non two lines
    • note over POS
      over POS
      on two lines
      end note
  • Splitting Diagrams
    • When a diagram is too long to fit on a page without losing readability, split it into one or more graphic files using the keyword newpage.
    • Each additional graphic file generated will have 00x appended (e.g., example.png, example_001.png, example_002.png).
    • Place a divider at the bottom of the first page and at the top of the second page to make it clear that the diagram is split.

3. N Tier architecture Diagram

  • I created as typical N Tier architecture using PlantUML’s diagram. Please find the code below.

[sourcecode]
@startuml MultiTierArchiteture

‘ Include section with id mail of PlantUMLTheme.pu
!include PlantUMLTheme.pu!theme

title
<u>Generic Multi Tier Architeture</u>
end title

caption Prepared by Sabarinathan A.

/’
‘When a line ends with a backslash, the preprocessor will merge the two lines.
‘http://forum.plantuml.net/3104/sequence-diagram-messages-on-multiple-lines
Try to keep 2 items together, so they are at the same level in the diagram.
http://mrhaki.blogspot.in/2016/12/plantuml-pleasantness-keeping-elements.html
‘/

Cloud "External Consumers <&people>" {
actor Clients
[Identity Providers] <> as IdentityProvider
[Single Sign On Services] <> as SSOServer

}
Cloud "Third Parties <&people>" {
[Third party application] <> as ThirdPartyApp
}

Folder N-TierArchitecture {
node "UI Tier in DMZ" {
[Front End Controllers] <> as UILayer
}
node "Application Tier" {
queue Messaging
[Core Business Logic] <> as BusinessServices
[UOW with Generic Repository] <> as DataAccessLayer
}

node "Data Tier" {
‘[Cache] <> as CacheServer
Database CacheServer
Database OLTPDatabase

}
}
[Mail server] <> as Mail
[Remote Services] <> as ThirdPartyServices

note as ArchitectureNote
**N-Tier architecture**
*A layer is a reusable portion of code that performs a specific function.
*Each layer has specific function and interacts with only the layer directly below.
end note

note as BLLNote
**Patterns in Services and Business Layer**
* Facade – single point of entry – unified interface to a set of interfaces in a subsystem
*Factory: Define an interface for creating an object,
but let subclasses decide which class to instantiate.
Factory Method lets a class defer instantiation to subclasses.
* Dependency Injection DI – allows removing hard-coded dependencies
making it possible to change them, whether at run-time or compile-time.
* Strategy: Allow algorithm selection at runtime.
Encapsulate related algorithms and let the algorithm vary and evolve from the class using it.
Separate the implementation from the delivery of its results.
end note

note as DALNote
**Patterns in Data Access Layer**
* Unit Of Work (UoW) with Generic Repository
* CRUD Methods for domain objects Used in Data layer
* Alternative storage implementations may be easily interchanged.
end note
‘================================

Clients –> IdentityProvider
Clients –> SSOServer
Clients —> UILayer : HTTP

IdentityProvider –> UILayer
SSOServer –> UILayer

ThirdPartyApp —> UILayer : HTTP

UILayer –> Messaging : HTTP
Messaging -> BusinessServices

BusinessServices –> DataAccessLayer

DataAccessLayer <– CacheServer
CacheServer <– OLTPDatabase ‘http://mrhaki.blogspot.in/2017/10/plantuml-pleasantness-align-multi-line.html ‘\n \l \r for left and right alignments DataAccessLayer —> OLTPDatabase

BusinessServices —-> Mail
BusinessServices —-> ThirdPartyServices

ArchitectureNote . UILayer
BLLNote . BusinessServices
DALNote . DataAccessLayer

@enduml
[/sourcecode]

3. UML Diagram Output