Skip to main content

Structural Styles (Internal Application Structure)

Within software architecture, Structural Styles deal with: "How to divide the inside of a single application (1 process / 1 service), and how classes/modules/layers/components depend on each other."

In this chapter, representative Structural Styles are organized by "Family", explaining them from perspectives such as:

  • History and background of their origin
  • Problems they attempt to solve
  • Applications they are suitable for

✅ Problems Addressed by This Category

Structural Styles primarily address problems such as:

  • Business logic getting buried in UI or DB code, making changes difficult.
  • Ambiguous responsibilities of classes and modules leading to spaghetti dependencies.
  • Testing units being too large, making it hard to write automated tests.
  • Breaking existing code every time a new feature is added.

In other words, the various schools of Structural Styles are answers to the question:

"How should structure and dependencies be organized within a single application?"

✅ Families of Structural Styles

This site organizes representative styles into the following "Families":

A. Non-structured / Early

B. Data / Record Centric

C. Layered / Domain Model

D. UI Interaction / Presentation

These UI patterns deal with the structure of the presentation layer (screen related) and exist on a different layer from system-wide internal structural styles like Classic Layered or Hexagonal. Therefore, they can be used in combination, for example, "Backend is Hexagonal, UI is MVVM".

E. Flow / Pipeline

F. Microkernel / Plugin

G. Reactive / Actor

Each family page organizes the philosophy and history common to that family, and then delves into individual style pages (e.g., MVC, Classic Layered, Microkernel...).

✅ How to Read This Category

It is assumed that you read this category in the following order:

  1. Glance through the Family-level pages Grasp "what families exist" and "which ones seem relevant to your app".

  2. Read the detailed pages of styles that interest you

    • Background/History (Where did it come from?)
    • Problems it attempts to solve
    • Basic Rules (Dependency direction, responsibility division, etc.)
    • Suitable applications and unsuitable cases
  3. Return to "How to Choose" in your context Use it as material to judge whether to use a style as is, combine it, or dare not to adopt it.

✅ Relationship with Other Layers

Structural Styles are closely related to other architectural layers.

This chapter aims to be an entry point for reviewing architecture from the perspective of internal application structure, while being conscious of these relationships with "other layers".

✅ Relationship between DDD and Structural Styles

This site treats DDD (Domain-Driven Design) not as "Architecture itself", but as a "Perspective (Lens)" for thinking about internal application structure.

DDD is related to multiple Structural Styles as follows:

Thus, DDD is involved in each family not as a technique that requires a specific style, but as:

"Common patterns that appear when thinking about structure centered on the domain"

This site adopts a policy of touching upon DDD only where it naturally relates within the explanation of each style, and does not cover detailed DDD introduction.

✅ "Architectural Flavors" Indicated by Frameworks

Modern frameworks do not strictly enforce a specific architectural style. However, React / Rails / Spring Boot / Node.js etc. each have a "direction (flavor) where designing in a certain way feels natural".

Examples:

Understanding these "flavors" allows you to intuitively grasp which Structural Style your framework is close to, deepening your understanding of each style.

👉 Table of Major Frameworks and Architectural Flavors

✅ Design Patterns Supporting Structural Styles

Internal Application Structure (Structural Styles) is often established and strengthened by specific Design Patterns.

  • Adapter / Strategy / Command are central to Clean / Hexagonal / Onion.
  • Observer / State / Mediator support UI updates in MVC / MVVM / MVU.
  • Strategy / Abstract Factory / Proxy realize the plugin mechanism in Microkernel.
  • Chain of Responsibility / Iterator / Observer become the basic structure for Pipeline / Reactive families.

The relationship is not 1 Style = 1 Pattern, but rather architectural characteristics are born from the combination of multiple patterns.

A detailed mapping table is summarized on the following page:

👉 Table of Structural Styles and Design Patterns

Design pattern explanations (including anti-patterns) are based on the Tutorial.