ch18
dz / grokking_simplicity / ch18Summary
Grokking Simplicity Chapter 18: Reactive and Onion Architectures
Node Tree
- cells
- extracting_actions_natural_onion
- onion_arch
- reactive_arch
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 |