Skip to content

Instantly share code, notes, and snippets.

@RuiAAPeres
Last active January 29, 2022 00:01
Show Gist options
  • Star 23 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RuiAAPeres/5d5e45128997c46db76ba6d607ae05a9 to your computer and use it in GitHub Desktop.
Save RuiAAPeres/5d5e45128997c46db76ba6d607ae05a9 to your computer and use it in GitHub Desktop.
/// |                    World                 |
/// |------------------------------------------|
/// | Module A | Module B | Module C | Module D|
  1. World is a module
  2. World is aware of all modules.
  3. Modules aren't aware of World.

Each Module has this structure:

ModuleA/World.swift
ModuleA/Sources/*

In ModuleA World.swift looks like this:

public protocol World {
  var dependencyX: DependencyX { get }
  var dependencyY: DependencyY { get }
  var dependencyZ: DependencyZ { get }
}

public var Current: World!

In ModuleB:

public protocol World {
  var dependencyJ: DependencyJ { get }
  var dependencyG: DependencyG { get }
}

public var Current: World!

In the World module:

struct World {
  let dependencyX: DependencyX
  let dependencyY: DependencyY
  let dependencyZ: DependencyZ
  let dependencyJ: DependencyJ
  let dependencyG: DependencyG
  .
  .
  .
  
  init (
  ...
  ) {
     // set dependencies
     
     ModuleA.Current = self
     ModuleB.Current = self
  }
}

extension World: ModuleA.World {}
extension World: ModuleB.World {}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment