Replace interface{} with properly defined interfaces
- Add VirtualMachine interface with GetID(), GetActorID(), GetState()
- Add VMState type with idle/running/paused/stopped states
- Add RuntimeModel interface for event storming model contracts
- Add RuntimeMessage interface for actor message contracts
- Add VMProvider interface for decoupled VM access
- Update VMRegistry.GetActiveVMs() to return map[string]VirtualMachine
- Update Runtime interface to use RuntimeModel and RuntimeMessage
- Update DistributedVMRegistry to use VMProvider instead of interface{}
- Add SetVMProvider method to DistributedVM for dependency injection
This improves type safety, makes contracts explicit, and enables better
IDE support while avoiding import cycles through interface segregation.
Closes #37
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -137,3 +137,43 @@ type LeadershipLease struct {
|
||||
ExpiresAt time.Time `json:"expiresAt"`
|
||||
StartedAt time.Time `json:"startedAt"`
|
||||
}
|
||||
|
||||
// VirtualMachine defines the interface for a virtual machine instance.
|
||||
// This interface provides the minimal contract needed by the cluster package
|
||||
// to interact with VMs without creating import cycles with the runtime package.
|
||||
type VirtualMachine interface {
|
||||
// GetID returns the unique identifier for this VM
|
||||
GetID() string
|
||||
// GetActorID returns the actor ID this VM represents
|
||||
GetActorID() string
|
||||
// GetState returns the current state of the VM
|
||||
GetState() VMState
|
||||
}
|
||||
|
||||
// VMState represents the state of a virtual machine
|
||||
type VMState string
|
||||
|
||||
const (
|
||||
VMStateIdle VMState = "idle"
|
||||
VMStateRunning VMState = "running"
|
||||
VMStatePaused VMState = "paused"
|
||||
VMStateStopped VMState = "stopped"
|
||||
)
|
||||
|
||||
// RuntimeModel defines the interface for an EventStorming model that can be loaded into a runtime.
|
||||
// This decouples the cluster package from the specific eventstorming package.
|
||||
type RuntimeModel interface {
|
||||
// GetID returns the unique identifier for this model
|
||||
GetID() string
|
||||
// GetName returns the name of this model
|
||||
GetName() string
|
||||
}
|
||||
|
||||
// RuntimeMessage defines the interface for messages that can be sent through the runtime.
|
||||
// This provides type safety for inter-actor communication without creating import cycles.
|
||||
type RuntimeMessage interface {
|
||||
// GetTargetActorID returns the ID of the actor this message is addressed to
|
||||
GetTargetActorID() string
|
||||
// GetType returns the message type identifier
|
||||
GetType() string
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user