Appendix
The appendix is mostly a collection of blog post-sized writings about problems I discovered. Apart from the upcoming list of suggested reading, the articles are in no particular order.
Further Reading
Interesting Links
You should really check out the following:
- SourceView sample code (Objective-C)
- https://developer.apple.com/library/mac/samplecode/SourceView/Listings/BaseNode_m.html#//apple_ref/doc/uid/DTS10004441-BaseNode_m-DontLinkElementID_6
- Example application by Apple where
NSOutlineViewis used. Good for getting started, although the example app doesn’t run properly anymore – I don’t see any images in the source view. - Clean Architecture
- http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html
- http://blog.8thlight.com/uncle-bob/2011/11/22/Clean-Architecture.html
- Uncle Bob’s explanation of the architectural concepts I tried to adhere to. Goes beyond Hex
- Uncle Bob: Architecture – The Lost Years (Video)
- https://www.youtube.com/watch?v=WpkDN78P884
- This talk introduced me to Hexagonal and Clean Architecture.
- Jim Gay: Clean (Ruby) Code
- Video: East-Oriented Code at RubyConf 2014
- Book: “Clean Ruby” – full of good examples which you can apply to Swift, too, and even more so to Objective-C and its meta-programming capabilities.
- Avdi Grimm: Objects on Rails
- http://objectsonrails.com
- A free e-book which taught me how to decouple my application from Ruby on Rails. This one got me hooked on thinking past using the framework properly.
Other links of interest on the topic of software architecture:
- “250 Days Shipping With Swift and VIPER” (Video)
- “Integrated Tests are a Scam” (Video)
- “Advanced iOS Application Architecture and Patterns”, Session 229 at WWDC 2014 (Video)
- “Building Better Apps with Value Types in Swift” (Video) at WWDC 2015
- What service objects are not, with Ruby examples
Interesting Books
I recommend reading the following books, ordered by subjective significance to the topic.
Vaughn Vernon (2013): Implementing domain driven design, Upper Saddle River, NJ: Addison-Wesley.
— Lots of practical examples and explanation for the patterns Evans laid out.
Eric Evans (2006): Domain-Driven Design. Tackling complexity in the heart of software, Upper Saddle River, NJ: Addison-Wesley.
— Full of good examples and refactorings itself but a little light on actually solving implementation problems.
Michael C. Feathers (2011): Working effectively with legacy code, Upper Saddle River, NJ: Prentice Hall Professional Technical Reference.
— Helps to learn decoupling code incrementally and how to test hard-to-test parts. That’s where I learned to provide means to reset singletons, and that it’s better to wrap NotificationCenter in order to replace the wrapper in tests than not test notifications at all.
Steve Freeman and Nat Pryce (2010): Growing object-oriented software, guided by tests, Boston: Pearson Education.
— This book has taught me so much about Test-Driven Development! I figured out when to use functional tests, why it’s beneficial to start with a failing test on the system level to guide development, and how to create multi-layered applications with test fakes all thanks to this book.
Ivar Jacobson, Magnus Christerson, Patrik Jonsson, and Gunnar Övergaard (1990): Object-Oriented Software Engineering. A Use Case Driven Approach, Wokingham: Addison-Wesley.
— Actually a recommendation by Uncle Bob in _Architecture: The Lost Years. It taught me to think about application services and use case objects. The book’s focus is on architecture, not on code. Useful practices. You may get this one used for a few dollars. I found it in my local university’s library._
Scott Millett (2014): Practicing Domain-Driven Design. Practical advice for teams implementing the development philosophy of Domain-Driven Design. With code examples in C# .NET, Scott Millett.
Robert C. Martin (2009): Clean Code. A Handbook of Agile Software Craftsmanship, Upper Saddle River: Prentice Hall.
David West (2004): Object thinking, Redmond, Wash.: Microsoft Press.
Andy Oram and Greg Wilson (Eds.) (2007): Beautiful Code, Beijing: O’Reilly.
Sandi Metz (2013): Practical object-oriented design in Ruby: an agile primer, Upper Saddle River, NJ: Addison-Wesley.
— A really good read. Sadly, it’s about Ruby, not about Swift or Objective-C, but you may want to peek into it anyway.