35
Dennis Doomen | @ddoomen | Aviva Solutions | The Continuous Improver

Build Libraries That People Love To use

Embed Size (px)

Citation preview

Page 1: Build Libraries That People Love To use

Dennis Doomen | @ddoomen | Aviva Solutions | The Continuous Improver

Page 3: Build Libraries That People Love To use

…and badly designed libraries

Page 4: Build Libraries That People Love To use
Page 5: Build Libraries That People Love To use
Page 6: Build Libraries That People Love To use
Page 7: Build Libraries That People Love To use
Page 8: Build Libraries That People Love To use
Page 9: Build Libraries That People Love To use
Page 10: Build Libraries That People Love To use
Page 11: Build Libraries That People Love To use
Page 12: Build Libraries That People Love To use
Page 13: Build Libraries That People Love To use

Library Consumer

Bunch of classes that can be used directly

X

No inheritance

Uses composition over inheritance

internally

Convenience classes that don’t hide the

magic

Main Package

Shared Package

Contract

Contract

Only depend on more abstract

packages…

Stable Package

…or depend on more stable packages

Auxiliary Package

Classes that are not used together do not

belong togetherOptional Dependency

DependencyPackage

Consumers should not be faced with

optional dependencies

Page 14: Build Libraries That People Love To use
Page 15: Build Libraries That People Love To use
Page 16: Build Libraries That People Love To use
Page 17: Build Libraries That People Love To use
Page 18: Build Libraries That People Love To use
Page 19: Build Libraries That People Love To use
Page 20: Build Libraries That People Love To use
Page 21: Build Libraries That People Love To use
Page 22: Build Libraries That People Love To use
Page 23: Build Libraries That People Love To use
Page 24: Build Libraries That People Love To use
Page 25: Build Libraries That People Love To use

public interface IEventStore{

IDisposable Subscribe(long? lastCheckpoint, Func<Transaction[]>, Task> handler,string subscriptionId);

}

public delegate IDisposable CreateSubscription(long? lastCheckpoint,Func<Transaction[]>, Task> handler,string subscriptionId);

Page 27: Build Libraries That People Love To use
Page 28: Build Libraries That People Love To use
Page 29: Build Libraries That People Love To use
Page 30: Build Libraries That People Love To use
Page 31: Build Libraries That People Love To use

Command Handlers

Commands

Domain Model

Event Store

Events

App

PersistentProjections

RavenDB/Nhibernate/Raw SQL

ProjectorsEvents

API Controller

Projections

Events

Page 32: Build Libraries That People Love To use

Library Consumer

LiquidProjections

LiquidProjections.Abstractions

Transaction

Delegates

LiquidProjections. NEventStore

NHibernate

LiquidProjectionsNHibernate

RavenDB

LiquidProjectionsRavenDB

LiquidProjections. Testing

Page 33: Build Libraries That People Love To use
Page 34: Build Libraries That People Love To use

• Liquid Projections – The Examplehttps://github.com/liquidprojections

• Principal for Successful Package Managementhttp://www.continuousimprover.com/2016/10/principles-for-successful-package.html

• The magic of hiding your NuGet dependencieshttp://www.continuousimprover.com/2016/05/the-magic-of-hiding-your-nuget.html

• To DRY or not to DRY, it is a matter of boundarieshttp://www.continuousimprover.com/2016/05/the-magic-of-hiding-your-nuget.html

• 12 tips to write unit tests that don’t cripple your code basehttp://www.continuousimprover.com/2015/11/12-tips-to-write-unit-tests-that-dont.html