Slide 1

Slide 1 text

How do I design objects using tests @cocoders

Slide 2

Slide 2 text

@cocoders Who I am? Developer, Former medieval reactor, Beer lover and founder of Cocoders

Slide 3

Slide 3 text

Let's imagine legacy app: http://git.io/vLPVa @cocoders

Slide 4

Slide 4 text

Task: Allow company to view incoming and outgoing invoices using system @cocoders

Slide 5

Slide 5 text

The first attempt: http://git.io/vLPre @cocoders Design Invoice object

Slide 6

Slide 6 text

Second attempt (encapsulation): http://git.io/vLPoh @cocoders Design Invoice object

Slide 7

Slide 7 text

Another attempt (ValueObjects): http://git.io/vLPKZ @cocoders Design Invoice object

Slide 8

Slide 8 text

InvoiceRegistry model concept: http://git.io/vLPPq @cocoders Design Model

Slide 9

Slide 9 text

Use important concept in legacy: http://git.io/vLPXc @cocoders Design Model

Slide 10

Slide 10 text

Protect object invariants: http://git.io/vLPXw @cocoders Design Model

Slide 11

Slide 11 text

Implementation of model concept in separate mysql adapter: http://git.io/vLP1D @cocoders Design Model

Slide 12

Slide 12 text

Application layer rely on abstraction: http://git.io/vLPM7 @cocoders Design Application

Slide 13

Slide 13 text

Usage of application object in legacy app: http://git.io/vLPDE @cocoders Design Application

Slide 14

Slide 14 text

Next step: http://git.io/vLPys @cocoders Design Application

Slide 15

Slide 15 text

That's all... for now Thank you @cocoders

Slide 16

Slide 16 text

Questions? @cocoders