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 |