/// | World |
/// |------------------------------------------|
/// | Module A | Module B | Module C | Module D|
- World is a module
- World is aware of all modules.
- 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 {}