Just some thoughts on the choices we make about the patterns we use in development.
Presented at NSBarcelona September 2016
DESIGN PATTERNS AND BEST PRACTICES
Abizer Nasir | @abizern | abizern.org
IN A PERFECT
THE PERFECT WORLD
▸ Technical presentations
▸ Our Friends
▸ Nothing works?
▸ Autolayout, View hierarchies, Threading, Networking,
▸ PC Load Letter?! (If you’ve seen Office Space, you know what this
Everything is so hard, maybe I should do things differently?
▸ I’m having problems with this, maybe I should try...
▸ My friend said X is awesome, I’m going to use it!
These are not necessarily bad, but doing things in the heat of the
moment is usually a bad idea.
▸ I’ve been a professional programmer since 2010.
▸ I’ve always been a contractor.
▸ I’ve worked day rate and hourly.
▸ I’ve worked solo and in teams.
▸ I’ve spent 12 months pair programming.
WHAT I’VE LEARNED:
1. Keep it simple.
2. Simple doesn’t mean easy.
There is nothing wrong with doing things the easy way, as long as you
do it by choice, not just because...
HOW DO I KNOW
WHICH TO USE?
There is a reason bad practices are known as “code smells”.
WE LEARN TO RECOGNISE SMELLS, WITH PRACTICE AND
▸ Repeated code.
▸ Leaky abstractions.
▸ UserDefaults used to store state.
▸ AppDelegate used as a Singleton.
▸ The first pattern we learned as developers
▸ Used almost everywhere, but it is not the only pattern.
▸ Massive View Controller
“I FIND IT HARD TO TEST MY
MODELS AND VIEW
“MY VIEW CONTROLLER DOES
“I’M WRITING TOO MUCH
GLUE CODE FOR
We don’t have to do this sort of thing.
We can if we want to, but we don’t have to.
This isn’t the Perfect World that was sold to us. Nothing is perfect.
We have to find a way to live in the imperfect world.
REMEMBER WHEN I SAID I WAS A CONTRACTOR?
▸ The code I’m working on is usually not started or finished by me.
▸ I don’t want to leave someone else with the constraints I’ve chosen.
▸ I tend to avoid clever code. I use what the system provides as much
▸ I started working on my own, not in a team, which is why I have
I LIKE TO KEEP THINGS SIMPLE
▸ I use MVC, The observer pattern, façade, Dependency Injection.
▸ Probably a whole lot of other patterns that I don’t know the names of
- I’m not Computer Science educated.
▸ I avoid third party omni dependencies.
▸ I try and use third party code that I understand and can fix.
▸ I sound like an Apple fanboi.
TESTING MODELS AND VIEW CONTROLLERS?
▸ I use dependency injection and TDD.
▸ Swift is really handy for default parameters that allow injection for
▸ I live without 100% test coverage.
VIEW CONTROLLERS DO TOO MUCH?
▸ A view controller is supposed to control a view.
▸ Everything else can get passed off.
▸ Delegation (or even closures) for performing work related to views.
▸ Data sources don’t have to be in the view controller.
▸ Having separate subsystems makes them easier to test.
TOO MUCH GLUE CODE FOR INTERACTIONS?
▸ Swift makes this easier with property observers.
▸ There’s also Key-Value Observing for NSObject based classes.
▸ The functional paradigm that made MVVM and Reactive attractive to
me are now available in Swift.
▸ I use Core Data - plenty of change notifications there.
“BUT I WANT TO LIVE IN A
Congratulations! These new patterns (or architectures whatever you
like to call them) are perfectly fine and supported.
When the time comes to learning them, remember they are just MVC in
different clothes - there is a defined flow of data and responsibilities.
If you work in a team, get them on board, make sure they are
enthusiastic, or you’ll spend most of your time justifying your choices
rather than using them.
You don’t have to use them everywhere, You can use a different pattern
for different flows - You have a nose!
It’s a good idea to actually try them in a play project.
Just remember - real apps live in an imperfect world.
▸ No more breaking changes.
▸ Simpler, right now it’s not easier !.
▸ It’s the future. And I don’t just mean our platforms.
▸ A lot of examples and blog posts are in the perfect world:
▸ JSON Parsers.
▸ Autolayout DSLs.
▸ Generics make code simple, harder to understand at first.
▸ Lot’s of new names, who do you believe?
▸ It’s still not done yet.
▸ Open Source, will we see design by committee? Forks?
TAKE THE BITS YOU
UNDERSTAND AND USE THEM
TILL YOU GET BETTER.
▸ Code, examples, talks, all speak of a perfect world.
▸ Our daily work has to survive in the imperfect world.
▸ Don’t just believe the hype. You’ve developed engineering skills: use
ABIZER NASIR | @ABIZERN | ABIZERN.ORG