From ff6a2d014aae477eba76494815f700eb64349c9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Mon, 1 Dec 2014 08:56:03 -0800 Subject: [PATCH] Refactored command/query interface --- pkg/bus/bus.go | 28 +++++++++++++++++----------- pkg/bus/bus_test.go | 12 ++++++------ 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/pkg/bus/bus.go b/pkg/bus/bus.go index 5dee1d024ab..ceca947959f 100644 --- a/pkg/bus/bus.go +++ b/pkg/bus/bus.go @@ -9,19 +9,26 @@ import ( type QueryHandler interface{} type Query interface{} -var ( - handlerIndex map[string]QueryHandler -) - -func InitBus() { - handlerIndex = make(map[string]QueryHandler) +type Bus interface { + SendQuery(query Query) error + AddQueryHandler(handler QueryHandler) } -func SendQuery(query interface{}) error { +type InProcBus struct { + handlerIndex map[string]QueryHandler +} + +func New() Bus { + bus := &InProcBus{} + bus.handlerIndex = make(map[string]QueryHandler) + return bus +} + +func (b *InProcBus) SendQuery(query Query) error { var queryName = reflect.TypeOf(query).Elem().Name() fmt.Printf("sending query for type: %v\n", queryName) - var handler = handlerIndex[queryName] + var handler = b.handlerIndex[queryName] if handler == nil { return errors.New("handler not found") @@ -38,10 +45,9 @@ func SendQuery(query interface{}) error { } } -func AddQueryHandler(handler QueryHandler) { +func (b *InProcBus) AddQueryHandler(handler QueryHandler) { handlerType := reflect.TypeOf(handler) queryTypeName := handlerType.In(0).Elem().Name() fmt.Printf("QueryType %v\n", queryTypeName) - handlerIndex[queryTypeName] = handler - //fmt.Printf("Adding handler for type: %v\n", queryTypeName) + b.handlerIndex[queryTypeName] = handler } diff --git a/pkg/bus/bus_test.go b/pkg/bus/bus_test.go index 2840b04366d..457aa48188b 100644 --- a/pkg/bus/bus_test.go +++ b/pkg/bus/bus_test.go @@ -11,13 +11,13 @@ type TestQuery struct { } func TestHandlerReturnsError(t *testing.T) { - InitBus() + bus := New() - AddQueryHandler(func(query *TestQuery) error { + bus.AddQueryHandler(func(query *TestQuery) error { return errors.New("handler error") }) - err := SendQuery(&TestQuery{}) + err := bus.SendQuery(&TestQuery{}) if err == nil { t.Fatal("Send query failed %v", err) @@ -27,15 +27,15 @@ func TestHandlerReturnsError(t *testing.T) { } func TestHandlerReturn(t *testing.T) { - InitBus() + bus := New() - AddQueryHandler(func(q *TestQuery) error { + bus.AddQueryHandler(func(q *TestQuery) error { q.Resp = "hello from handler" return nil }) query := &TestQuery{} - err := SendQuery(query) + err := bus.SendQuery(query) if err != nil { t.Fatal("Send query failed %v", err)