grokking_simplicity/ch18

ch18

dz / grokking_simplicity / ch18

Summary

Grokking Simplicity Chapter 18: Reactive and Onion Architectures

Node Tree

Nodes

reactive_arch
content Reactive Architecture
children flips_actions, individual_sequence_actions (Level reactive arch works at), level, operates_larger_scale (works on a larger scale than), reactive_features, reactive_manifesto, reactive_reconfig, respond_to_events

onion_arch
content Onion Architecture
children constructs_service_real_world_interaction, dont_know_about_others, entire_service (Level onion arch works at), facilitating_change_reuse, interacts_layer_exclusively, level, onion_fractal, operate_world, operates_larger_scale, trad_vs_functional_arch

flips_actions
content Flips the way actions are sequenced
parents reactive_arch

operate_world
content High-level structure of functional programs that have to operate in the real world
parents onion_arch

level
content Levels Architectures work at
children entire_service, individual_sequence_actions
parents reactive_arch, onion_arch

individual_sequence_actions
content Individual Sequence of Actions
parents reactive_arch, level

entire_service
content Entire service
parents onion_arch, level

respond_to_events
content Main organizing principle: specify what happens in response to events
children do_xyz (example), event_handler
parents reactive_arch

event_handler
content Event Handler
parents respond_to_events

do_xyz
content Do y when x. Do z when y.
parents respond_to_events

reactive_features
content Reactive Architecture Features and Characteristics
children decouples_effects_causes, flexibility_timeline, series_of_steps_pipeline
parents reactive_arch

decouples_effects_causes
content Decouples Effects/Causes
children center_cause_effect, less_readable_code, not_helpful_if
parents reactive_reconfig, reactive_features

less_readable_code
content Potentially less readable code?
parents decouples_effects_causes

series_of_steps_pipeline
content Series of steps to produce a pipeline
parents reactive_features

flexibility_timeline
content Flexibility in timeline
children unwanted_orders
parents reactive_reconfig, reactive_features

unwanted_orders
content Could lead to unwanted orderings
parents flexibility_timeline

value_cells
content ValueCells
children state_first_class, update_called_with_calc (wraps a valuecell), vc_valid_data_not_order, watchers
parents cells

state_first_class
content makes state first-class
parents value_cells

watchers
content Watchers
children watchers_aka, watchers_def (definition)
parents value_cells

watchers_def
content handler functions that get called when state changes
parents watchers

watchers_aka
content AKA
children callbacks, listeners, observers
parents watchers

observers
content Observers
parents watchers_aka

callbacks
content Callbacks
parents watchers_aka

listeners
content Listeners
parents watchers_aka

cells
content Cells
children formula_cells, value_cells

formula_cells
content FormulaCell
children calculate_derived_val, formula_cells_aka, no_way_to_directly_update
parents cells

calculate_derived_val
content Calculate derived value
parents formula_cells

update_called_with_calc
content Update called with calculation, makes it easy to keep current value valid.
children vc_valid_data_not_order
parents value_cells

vc_valid_data_not_order
content Value Cell can't guarantee order, but it can guarantee valid data
parents value_cells, update_called_with_calc

formula_cells_aka
content AKA
children agents_elixr, atoms_clojure, redux_store_recoil_atoms_react, tvars_haskell
parents formula_cells

tvars_haskell
content TVars (Haskell)
parents formula_cells_aka

agents_elixr
content Agents (Elixr)
parents formula_cells_aka

atoms_clojure
content atoms (clojure)
parents formula_cells_aka

redux_store_recoil_atoms_react
content Redux Store, Recoil Atoms (React)
parents formula_cells_aka

no_way_to_directly_update
content No way to directly update. Must change upstream (value)cell. It watches.
parents formula_cells

reactive_reconfig
content How Reactive Reconfigures Systems
children decouples_effects_causes, flexibility_timeline, treats_steps_as_pipeline
parents reactive_arch

treats_steps_as_pipeline
content Treats series of steps as pipeline
children not_passing_data_dont_use
parents reactive_reconfig

center_cause_effect
content decoupling manages a center of cause and effect
children turns_mult_into_addition
parents decouples_effects_causes

turns_mult_into_addition
content Turns multiplication (causes * effects) into addition (causes + effects)
children not_helpful_if
parents center_cause_effect

not_helpful_if
content not helpful if you don't have this in your problem
parents turns_mult_into_addition, decouples_effects_causes

reactive_manifesto
content Reactive Manifesto
parents reactive_arch

not_passing_data_dont_use
content If your steps don't follow the pattern of passing data, this might not be a good fit
parents treats_steps_as_pipeline

operates_larger_scale
content Onion operates on larger scale than Reactive
parents onion_arch, reactive_arch

constructs_service_real_world_interaction
content Constructs entire service that interacts with the real world
children concentric_layers
parents onion_arch

concentric_layers
content Concentric Layers
children domain_layer, interaction_layer, language_layer
parents constructs_service_real_world_interaction

interaction_layer
content interaction
children actions_affect_outside_world, domain_layer, interacts_layer_exclusively
parents concentric_layers

domain_layer
content Domain
children calcs_define_business_rules, language_layer
parents interaction_layer, concentric_layers

language_layer
content Language
children language_utility_libs
parents domain_layer, concentric_layers

actions_affect_outside_world
content Actions that are affected by/affect outside world
parents interaction_layer

calcs_define_business_rules
content Calculations that define rules of your business
parents domain_layer

language_utility_libs
content Language and Utility Libraries
parents language_layer

interacts_layer_exclusively
content Real-world interaction happens in the interaction layer exclusively
parents onion_arch, interaction_layer

dont_know_about_others
content Don't know about other layers outside themselves
parents onion_arch

extracting_actions_natural_onion
content Extraction actions from calculations naturally arrives at something like the onion architecture

trad_layered_arch
content Traditional Layered Architecture (Web)
children db_bottom
parents trad_vs_functional_arch

db_bottom
content Database at Bottom
children db_pulled_out_to_side (By comparison, DB is at bottom in traditional arch), everything_action_above
parents trad_layered_arch

everything_action_above
content Everything above is action
parents db_bottom

trad_vs_functional_arch
content Traditional vs Functional Architecture
children functional_arch, trad_layered_arch
parents onion_arch

functional_arch
content Functional Architecture
children clean_separation_calcs_actions, db_pulled_out_to_side
parents trad_vs_functional_arch

db_pulled_out_to_side
content Database pulled out to side
parents functional_arch, db_bottom

clean_separation_calcs_actions
content Clean separation of calculations and actions
parents functional_arch

facilitating_change_reuse
content Facilitating Change and Reuse
children easy_to, kinds_of_easy_changes
parents onion_arch

kinds_of_easy_changes
content Kinds changes Onion Architecture makes easy
children interaction_layer_easiest
parents facilitating_change_reuse

interaction_layer_easiest
content The interaction layer is easiest to change
children change, external_services
parents kinds_of_easy_changes

external_services
content External Services
children domain_layer_easily_tested (no access)
parents interaction_layer_easiest

easy_to
content Easy to..
children change, reuse
parents facilitating_change_reuse

reuse
content Easy to reuse
parents domain_layer_easily_tested, easy_to

change
content Easy to change
parents easy_to, interaction_layer_easiest

domain_layer_easily_tested
content Domain Layer Easily tested
children reuse
parents external_services

onion_fractal
content Onion architecture is fractal at every level of abstraction in your actions
parents onion_arch