$30 off During Our Annual Pro Sale. View Details »

Buckets of Code

Buckets of Code

Presented at dotSwift Paris 2018

Ben Scheirman

January 29, 2018
Tweet

More Decks by Ben Scheirman

Other Decks in Programming

Transcript

  1. Buckets of Code
    Ben Scheirman
    @subdigital

    View Slide

  2. M V C

    View Slide

  3. M C
    V

    View Slide

  4. http://www.stevechapman.xyz/2016/03/three-buckets-can-change-your-life/
    Model View Controller

    View Slide

  5. View Slide

  6. M V C

    View Slide

  7. M V C

    View Slide

  8. TDD
    Inversion
    o
    Dependencies
    Separation
    of
    Concerns
    Liskov
    Substition
    Principle
    Composition
    over
    Inheritance
    Open/Closed
    Principle
    le
    Responsibility
    ’t repeat your
    self
    ndency
    Inversion
    ion
    Princip
    oncern
    Lisk
    Separ
    Compositio
    Open/Clos
    Sing
    nce
    ngle
    ty
    Sin
    ility
    O Si

    View Slide

  9. TDD
    Inversion
    o
    Dependencies
    Separation
    of
    Concerns
    Liskov
    Substition
    Principle
    Composition
    over
    Inheritance
    Open/Closed
    Principle
    le
    Responsibility
    ’t repeat your
    self
    ndency
    Inversion
    ion
    Princip
    oncern
    Lisk
    Separ
    Compositio
    Open/Clos
    Sing
    nce
    ngle
    ty
    Sin
    ility
    O Si
    WHY?

    View Slide

  10. Ship Great Products

    View Slide

  11. Iterate

    View Slide

  12. Embrace Change

    View Slide

  13. Ship Great Products

    View Slide

  14. Ship Great Products

    View Slide

  15. Ship Great Products
    Complexity

    View Slide

  16. View Slide

  17. How do I get better?

    View Slide

  18. Give each object a job

    View Slide

  19. View Slide

  20. Give yourself more
    buckets

    View Slide

  21. Photo from MKBHD

    View Slide

  22. “Massive View Controller”

    View Slide

  23. View Layout in View Controllers
    Scenario

    View Slide

  24. View Slide

  25. Rounded Image
    Shadow
    Rounded Corner Sections
    Thin Line Borders
    Custom Highlight Color

    View Slide

  26. View Slide

  27. View Slide

  28. View Slide

  29. View Slide

  30. STOP
    Arrêt

    View Slide

  31. Extract some views

    View Slide

  32. View Slide

  33. ProfileAvatarView
    StatSectionView
    ActionStrip
    ActionStripButton

    View Slide

  34. c
    v
    v
    v
    v

    View Slide

  35. c
    v
    v
    v
    v
    •Smaller Controller

    View Slide

  36. c
    v
    v
    v
    v
    •Smaller Controller
    •Simpler Autolayout

    View Slide

  37. c
    v
    v
    v
    v
    •Smaller Controller
    •Simpler Autolayout
    •Easier Reuse

    View Slide

  38. c
    v
    v
    v
    v
    •Smaller Controller
    •Simpler Autolayout
    •Easier Reuse
    •Leverage @IBDesignable

    View Slide

  39. View Controller Flow
    Scenario

    View Slide

  40. Nav
    A

    View Slide

  41. Nav
    let detailVC = DetailViewController()
    detailVC.dependency = someDependency
    A

    View Slide

  42. Nav
    let detailVC = DetailViewController()
    detailVC.dependency = someDependency
    A B

    View Slide

  43. Nav
    self.navigationController?.show(otherVC, sender: self)
    A B

    View Slide

  44. A B
    Know your dependencies!

    View Slide

  45. Nav
    A B

    View Slide

  46. Nav
    A B
    ?

    View Slide

  47. Nav
    A B
    Coordinator

    View Slide

  48. Coordinator

    View Slide

  49. Coordinator

    View Slide

  50. Coordinator

    View Slide

  51. Coordinator

    View Slide

  52. Coordinator

    View Slide

  53. Nav
    Window

    View Slide

  54. DataManager
    API Client
    Nav
    Window

    View Slide

  55. UITabBarController
    DataManager
    API Client
    Nav Nav Nav
    Window

    View Slide

  56. UITabBarController
    DataManager
    API Client
    Nav Nav Nav
    Window
    Coordinator

    View Slide

  57. View Slide

  58. View Slide

  59. UITabBarController
    DataManager
    API Client
    Nav Nav Nav
    Window
    Coordinator

    View Slide

  60. UITabBarController
    DataManager
    API Client
    Nav Nav Nav
    Window
    Coordinator

    View Slide

  61. UITabBarController
    DataManager
    API Client
    Nav Nav Nav
    Window
    Coordinator

    View Slide

  62. Nav
    UITabBarController
    DataManager
    API Client
    Nav Nav
    Window
    Coordinator

    View Slide

  63. Nav
    UITabBarController
    DataManager
    API Client
    Nav Nav
    Window
    Coordinator

    View Slide

  64. Extract View Controller
    Scenario

    View Slide

  65. 1 Screen ≠ 1 View Controller

    View Slide

  66. View Slide

  67. • Profile

    • Stats

    • Send Message

    • Follow
    Profile Header

    View Slide

  68. • Books

    • Tap to View Book
    Book List

    View Slide

  69. ProfileViewController

    View Slide

  70. ProfileViewController
    ProfileHeaderViewController

    View Slide

  71. UITabBarController
    DataManager
    API Client
    Nav Nav Nav
    Window
    Coordinator

    View Slide

  72. UITabBarController
    DataManager
    API Client
    Nav Nav Nav
    Window
    AppController

    View Slide

  73. UITabBarController
    DataManager
    API Client
    Nav Nav Nav
    Window
    AppController

    View Slide

  74. UITabBarController
    DataManager
    API Client
    Nav Nav Nav
    Window
    AppController

    View Slide

  75. View Slide

  76. View Slide

  77. Give yourself more
    buckets

    View Slide

  78. Ship Great Products

    View Slide

  79. Thank you
    Ben Scheirman
    @subdigital
    nsscreencast.com

    View Slide