philchia/dock

Kernel for init all subsystems

Opened this issue · 3 comments

It would be more clear to have a kernel to init all subsystem then isn't necessary to call in each subsystem package a hidden register function

Prototype

Caller:

package main

func main() {
 kernel := kernel.Init()
}

Init Kernel:

package kernel

func Init() {
   k := new(kernel)
   k.RegisterSubsystem(new(subsystem.Memory))
  // soon on ...
}

Kernel:

package kernel

type Kernel struct {
    subsystems map[string]subsystem
}

func (k *kernel) RegisterSubsystem(s subsystem) {
    k.subsystems[s.Name()] = s
}

What do you think?

If it's this idea good then I can implement this idea

The kernel package is more clear, but i believe its still nessary to call register func in each subsystem, therefore no need to modity the kernel package every single time you add a new subsystem.

Your approach is to create a new subsystem package and internally it registers this new subsystem by name afterwards it injects a new instance of this subsystems. If you would remove the registration process from the subsystem then it's cleaner and it reduces the complexity because you need to make sure at n * places you called the register function.

Subsystem register process

Pro

  • Self-contained
  • No need for a new abstraction

Contra

  • Increase complexity for a developer (tree path is missing)
  • N places * register call

Kernel register process

Pro

  • Verbose and clear what is registered
  • Reduce complexity for developer
  • Dependencies are clear

Contra

  • New abstraction
  • 2 * packages necessary for registering a new subsystem

What do you think?