Build Libraries That People Love To use

Post on 21-Jan-2018

200 views 0 download

Transcript of Build Libraries That People Love To use

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

…and badly designed libraries

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

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);

Command Handlers

Commands

Domain Model

Event Store

Events

App

PersistentProjections

RavenDB/Nhibernate/Raw SQL

ProjectorsEvents

API Controller

Projections

Events

Library Consumer

LiquidProjections

LiquidProjections.Abstractions

Transaction

Delegates

LiquidProjections. NEventStore

NHibernate

LiquidProjectionsNHibernate

RavenDB

LiquidProjectionsRavenDB

LiquidProjections. Testing

• 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