Re: Core-Data Refactor Available for Comments

Drasko DRASKOVIC <drasko@...>

Hi Trevor,
idea to move towards DDD looks great to me.

If you are moving in this direction, I think it would be interesting
to examine go-kit: It divides domains and provides
onion architecture, while providing logging and instrumentation. It
tends to collect and incorporate best practices.

Best regards,
Mainflux Author and Technical Advisor | Industrial IoT Cloud
Engineering Division | Paris, France

Twitter: @draskodraskovic

On Fri, Apr 20, 2018 at 11:18 PM, <Trevor.Conn@...> wrote:
Just a reminder that this proposed change is available for review. I've
received some minor comments from our contributor yanghua so far, but that's

Please let me know of any comments you may have (via GitHub issues or email)
by this coming Thursday, April 26.

Trevor Conn
Senior Principal Software Engineer
Dell Technologies | IoT DellTech
Round Rock, TX USA
From: Conn, Trevor
Sent: Thursday, April 12, 2018 12:40 PM
To: EdgeX-GoLang@...
Cc: edgex-tsc-core@...
Subject: Core-Data Refactor Available for Comments

Dell Customer Communication

Hi folks – Thanks to those who attended the presentation this morning of the
refactoring strategy I’ve applied to core-data-go over the last couple
weeks. If you weren’t able to attend the call but are interested in
reviewing the changes, please watch the recording of the meeting available

The refactoring presentation starts at the 25 minute mark.

Here is the URL to the repo in our holding area:

To briefly summarize, here are the primary points of interest in the

1.) The following application services are now initialized through a
factory which returns an interface:

a. Routing

b. Metadata clients (Device Client / Service Client)

c. MQPublisher

2.) Removal of global variables at the package level to access
application services

3.) Business logic moved out of controllers and into aggregates folder

a. Note the use of channels in
core/aggregates/events/event.go::AddNewEvent() to increase separation of

4.) Routing and controller implementation moved into a specific package
and out of core/data package

5.) Unit test coverage focusing on the aggregate – the domain business
logic – leaving out application services (like routing)

a. See core/aggregates/events/providers.go for abstraction definitions

b. See core/aggregates/events/event_test.go for mock initialization and

As I said on the call, there is more work that could be done here but this
is a significant chunk that establishes the direction the Core Services team
would like to move toward. We are looking to the community to identify any
major gaps or challenges that we may have missed in taking this approach.
Initial testing on this work via the blackbox testing is going well, but
additional changes may come in as we continue to test and refine.

Comments are welcome. We may need to set up some review calls or, if you
like, you can create issues/PRs against the repo.

Trevor Conn

Senior Principal Software Engineer

Dell Technologies | IoT DellTech


Round Rock, TX USA

Join to automatically receive all group messages.