Queens! • Fullstack engineer since I was a fetus • Started iOS dev 2+ years ago • Front-end/iOS @ Twitter for 5 years • iOS Platform @ UBER for 2 months • I ❤ pugs & behavioral economics
a common language to describe patterns with others • Promotes system that can be easily extended in the future • Helps isolate areas of code base that change frequently • Makes testing a breeeeeze
low-level modules. • Both modules should depend on abstractions • High Level Classes -> Abstraction Layer -> Low Level Classes • Decouples your classes and allows for easy behavior replacement
client that automatically updates the home timeline and user profile while browsing the app. We would also like to have the ability to change the frequencies of these updates in case our servers get overloaded.
means passing a method to the scheduler (no disection needed) • Changing the frequency of a service only requires a change to the factory • All core non-domain specific classes remain untouched
its single responsibility • Protocols allowed us to create dummy helper classes to isolate the system under test • Component tests had no mention of domain knowledge • Behavior-focused so less likely to change if implementation changes
responsibilities does this class have? • Do I need to change this class to extend its behavior? • What parts of this class change frequency and which rarely change? • Does this class depend on concrete dependencies? • Does my class need THIS many imports?