Event Sourcing and Event Driven Architecture - with Callum Linington

Durée: 78m11s

Date de sortie: 15/10/2021

In this episode, I was joined by Callum Linington to chat about Event Sourcing! Events over time are how the world works - so shouldn’t we be leveraging that in our architectures? As quite often happens, we also went on one or two tangents, and covered a ton of other related including MediatR, CQRS, F#, DDD, Rx, Redux, and more!For a full list of show links, see the website here

Hey everyone, welcome to the Unhandled Exception podcast. I'm Dan Clark and this is episode number 26.
And today I'm joined by Callum Linnington to talk all about event sourcing. So hey Callum, welcome to the show.
Hi Dan, thanks for having me. This is exciting, isn't it? Oh it is, it is. I'm really looking forward to this one.
So to give you a formal introduction, Callum is a principal engineer at Clearbank.
He's a professional software developer working on the .NET stack.
And according to his Twitter profile, he's also a music and rugby lover, and Jim lover and heater.
So I'm kind of with you on that last one because, well, my gym habits are kind of like a sine wave.
Soudlite the moment I'm at the bottom half of that wave.
Yeah, it's interesting actually because I was actually talking to this with my osteopath the other day,
which tells you how, you know, when you're having a bad time at the gym, you're at the osteopath.
And he was saying, he's just dreads going and doing leg day because leg day is a make and break day.
You go and do leg day and you're like, oh, this is amazing. I feel like I'm on absolutely high.
But then as you're walking down the stairs and you realise your legs are really wobbly,
you know that you're in for a week of not being able to sit down, stand up, walk anywhere, just do anything.
You just basically have to sit on the sofa all the time.
So yeah, that's why I'm a lover and a heater of the gym.
So the solution is don't go to the gym and sit on the sofa all the time.
Anyway, it's kind of, it sounds quite good.
Yeah, just put a laptop on the legs and just go and just code away.
Just never stop. Sounds ideal.
It does, doesn't it?
I do like that your LinkedIn profile also says that you're also known as a code connoisseur.
I do love that. What a great phrase.
Yeah, it came out like right at the beginning of my career.
And I always have a fondness for patterns.
It's just like the way that my brain works.
I see everything in patterns.
And I think it's just like one of the things that probably just drew me towards programming.
I've just seen all these patterns and how they all interconnect.
And then also when you see those really beautiful snippets of code,
like you've seen the recent one from David Falver about the minimal API stuff where,
you know, like C sharp, seeing you can be able to write a running API
on something like 10 lines or whatever, without any braces as well, which would be interesting.
I've seen a whole bunch of his tweets with lots of different,
I think there's been lots of iterations as it's got smaller and smaller and smaller.
Oh, yeah, yeah.
And have you seen the inclusions of the WebSocket stuff as well?
Like that, I am.
Because that and event sourcing, I'm just on that part.
That's what is most interesting.
And yeah, so, like, I just, you know, I just, sometimes I just stare at code for a while
and just, you know, look it and think about it and just love it.
And, you know, or we can make these tweaks to do this.
And so on just turned around.
I mean, you are like a code connoisseur.
Yeah, I just, you know, like, if you sit there with like a whiskey glass or whatever,
you're just swirling the whiskey around.
That's just what I do with code.
I just swirl it around, give it a smell.
It's quite nice, actually.
Oh, that's brilliant.
What a great tagline.
Yeah, love it.
Love it.
So that's why I put it there.
I was like, you know, that is probably most aptly described to me.
I don't, I'm looking at code, you know, I just love looking at code.
Awesome.
So before we jump into event sourcing, I'm going to quickly give a quick listener mention.
And this episode listener mention goes to Danielle, who on Twitter is Danielle D underscore Dev.
And she tweeted another great unhandled exception podcast episode on dependency injection.
And she's referring to episode 24, where I was joined by Steve Collins.
And Danielle also left a screenshot in a tweet of a podcast app.
And it did say less than one minute left.
So we now know that at least one listener has made it to the end.
That was such a fun episode to record, though.
Numerous times, Steve and I fell into fits of giggles and had to stop for a bit.
So I think I should probably release an outtakes version of that episode.
I think that's a, that adds another dimension, doesn't it?
I think the outtakes, like, there's definitely going to be, I don't know,
there's definitely times we're just going to mess up and you think, oh, God, that's just, yeah,
get that on there.
I'll get people glued in.
That would actually be a good idea because with the Patreon thing,
I've been wondering if it's worth using something like that.
But I didn't really want to add adverts or basically add anything to episodes
that it would annoy people that weren't paying.
So I decided against it.
But actually, having outtakes for Patreon subscribers, that would be a good idea.
Yeah, that would be good.
I think it's one of those interesting things about like the freemium stuff,
like, especially in games and stuff, you've got to be really careful,
like how you up the levels and like giving people sort of like the unfair advantage
just because they can check the funds for money at it.
It's buy-to-buy, really.
But yeah, that'd be pretty cool.
I'd pay for your outtakes.
Nice, I've got one customer.
I'd have to, because, so what I do is, like, going back to,
I've listened to, like, some of the previous podcasts, all the F-sharp ones,
like, I was all over the F-sharp ones because I love F-sharp.
And, like, so many times, I just wanted to chime in, like,
hang on, I want to say something about realising it's like a pre-recorded podcast.
But I ended up doing, like, I try, I've got a walk,
which takes exactly one hour to get around that walk,
so I'd only, like, listen to your podcasts and that.
Go.
But if I started to let listen to the outtakes,
I don't have to, like, do it again just to listen to the outtakes.
So, question, I'm embarrassed saying I do this,
but sometimes we'll listen to podcasts,
exactly for the reason that you say,
I feel I've got to pause it and think about,
join my thoughts about it, then un pause.
Yeah.
Because I've kind of, like, it's almost like I'm not getting involved
in the conversation, but sometimes I feel pulled into a conversation
when it's a really good conversation in a podcast,
and I feel pulled into it.
And they almost have to pause and think my thoughts through.
Oh, I, you know, I have to say, like,
there's been a few podcasts of yours which I've listened to
that have just sparked so many thoughts in my own head
that honestly, I haven't listened to them for, like,
I've missed 25 minutes of the stuff,
because my mind, I'm just thinking about something else
as I'm walking around.
I'm like, oh, hang on a minute, I'm listening to a podcast.
I've got to get back into this, like,
and then, like, someone will say something else
and it'll trigger all these other things I'm thinking about.
Oh, I have to pause it,
because I hate missing things,
so I have to pause it while my mind wanders,
then I realise that I've zoned out,
then I don't pause it.
Yeah, I do that too much,
so I just lean into it.
I'm just like, I'm going to miss something.
It'll be fine, I'll just carry on.
I'll give a re-listen,
let a point anyway,
because I know I'll forget it all by, you know,
I'll give it like six months
and I'll give more re-listen.
Oh, there's too many
ongoing podcasts being published.
I've subscribed to way too many podcasts.
I wouldn't have time to re-listen to things,
so I've got to make sure it soaks in the first time.
I can't listen to podcasts
unless, like, I'm doing something like a walk,
where I've literally only got one thing to do
and I'm walking, and then it's so...
But, again, I've still subscribed
quite a few podcasts,
so it's like, I'm going to have to just end up
just doing laps and laps and laps
of this one walk that I did
just so I can consume all that content.
Yeah, I tend to listen on walks
whilst I'm doing the dishes or something.
I've basically got my headphones on all the time
and generally, I should really be more pleasant
for the kids and stuff.
I'm just going to say,
just blocking out the family,
just like that.
I'm listening to podcasts.
Can't sort yourselves out.
Well, that's why these bone conduction headphones
are amazing, because you can actually hear everyone as well,
but listen to stuff in the background.
But yeah, I should probably be a bit more pleasant anyway.
I wait for the time that you start answering questions
to things that people haven't asked in the room
because you've got something going through your headphones instead.
And then I was like,
which conversation are you in?
Well, it's good because I can answer the phone on it as well.
Because I wear them all the time now
because you can't tell them wearing them
because they don't go over or in your ear.
And if I answer the phone and start talking,
it just looks like I'm talking to myself.
Or, the most brilliant one,
if you're actually sat there having a conversation
with your partner,
almost like a foot away from their face,
or having that conversation,
somebody go,
hey, yeah, how's it going?
You all right?
And she's like, what, I know if you did.
Oh, yeah, sorry, I'm just got a call.
Hang on.
Those have got to be the best.
So, we should probably actually talk about
event sourcing, shouldn't we?
Yeah, probably, at some point.
I don't know if we'll actually ever cover
event sourcing in this
because there's a lot of other stuff to talk about.
But yeah, absolutely, we should start somewhere.
We'll see what happens.
So maybe we should start at the beginning
and talk about what the term
event sourcing actually means.
Yeah, so this is the interesting part
because it's actually like stupidly simple.
And as part of that,
I've wrote so many notes around all this stuff
just to like promptly all these different areas and stuff.
But like the one thing that's like, you know, looking up,
a nice clean definition of event sourcing
is actually really easy and straightforward.
So, event sourcing is a pattern
for storing data as events in an append-only log.
I wouldn't hang off the word log too much.
I think some people might, you know,
think when they think logs, they literally think
when you do console.writeLine
or when you stream off to SiriLog or something like that.
So don't think about like that.
It's just a log, more the conceptual term
of like a log of events.
So that's basically all it is.
It's a very, very simple concept.
And it is, I think the other thing to like note
as well is storing data.
So it is still a database in a certain centre.
So it's just organises the data in a different way.
So that's it.
So it's one key thing that each of these events
has a timestamp.
So you've actually got a history of things that have happened.
Yeah, yeah.
So I'm probably going to keep referring back to event store
because event sourcing is a thing
that I'm currently looking at as well.
And I've been on this journey and we'll get through this journey
because I kind of like that.
It's time to show you how I sort of got there.
But yeah, so I'm going to probably refer back
to like event store,
which is an event sourcing database.
And I generally just spin that up in a Docker file.
In fact, I use Docker compose
because there's a certain feature of it
which only works if you use Docker compose.
So I usually spin that up in Docker compose
and just start connecting and we do that.
And the way that they do it
is they have sort of like a core event object.
And in that object has like sort of the date on it
and the time and then the payload for the data
and then some other attributes and things like that.
So you can sort of annotate that.
And then your event goes in that event
and then that event then gets actually published out
into the event store.
So it is append only log.
So the append only means that you're constantly
just writing new bits of data.
You never go back and change something.
And you basically get these sets of events
as being developers,
you sort of want to categorise and group things together.
So you get a set of events
and they then create an event collection called a stream.
So you get these events streams
and then that goes into what's called an event store.
So the event store is actually just a concept,
not an actual,
even though there's an actually event store database,
an event store is actually just a concept
of storing events as a collection of streams
which are collection of individual events.
Interestingly, actually,
as I've been playing with it,
an stream doesn't necessarily contain
one type of event.
So one of the attributes in the core event
is this type, event type.
So you could have something like account created
or that's the most typical one actually.
Like, you know,
everyone uses this kind of thing, like account created
or you could have like transaction created
or you could have profile updated or dishes washed,
you know, whatever event and then,
but you can have all these different types
in a single stream,
which I think actually leads on to one of the most powerful
parts of it and obviously we'll get there later,
but yeah, that's quite interesting.
Cool.
So you mentioned the term streaming then.
I keep on hearing the terms event sourcing
and event streaming.
Are they pretty much the same thing
or is there a difference there?
That's a very good question.
Honestly, like, I have a feeling that, you know,
an event stream is just, you know,
part of one of the concepts of the, you know,
event sourcing is more of just actually a pattern.
It's not really like an architecture
or like a big overall thing.
It's, you know, it's like a very specific pattern.
And I guess, yeah,
part of one of that pattern is event streams.
But yeah,
this is where the interesting thing comes out of it
because actually if you start talking about,
and we should at some point start talking about
the RX reactive extensions,
cause that's all about streaming stuff as well.
And yeah,
I think it's all around this concept of just like
time moving forward.
It is essentially, I think,
around this concept.
And we're definitely going to be getting into that
in a bit for sure.
Nice.
That could be a whole episode of we're talking about RX.
Well,
well, this is it.
Like, it's all part and parcel of the stuff.
And once you go down this rabbit hole,
it's not, it's a rabbit,
it's literally like Alice in Wonderland rabbit hole.
It's like you fall through the bottom of the tree
and then suddenly you're in this whole new world.
And it's, yeah, it's awesome.
It does sound like from
when I've done bits of event sourcing before,
that it's kind of quite a paradigm shift as well,
because I think a lot of developers are used to,
you've got a database,
you write some data,
and the database is storing the current state of that database.
Where, and correct me if I'm wrong, where event sourcing,
you're only storing the timestamped events as they happen.
And to get the current state of the database,
you've got to replay them.
Have I understood that correctly?
Yeah.
And I think that's a brilliant segue to where we should actually start this conversation.
Because I think
if we bring people on this journey,
you start, you start,
I think you might actually understand this,
like where this sort of comes from.
And it's a great place to start,
is this whole like idea, like,
I don't know, I don't know what caused it,
or what point.
I know there's like several points throughout programming history
where things just suddenly became entrenched in a certain way,
like OOP.
There's like early 2000s where OOP suddenly became this like,
this like animal gets inherited by dog or cat,
or chair, and you get different types.
You get this like really weird sort of like idea of OOP.
And I wasn't always that fond.
I actually found it quite hard to understand programming
through the lens of OOP.
And all this inheritance and stuff,
I was really always put off by it.
So when I first started my first job,
and the principal engineer was like,
oh yeah, composition over inheritance.
I was like, that makes so much sense.
Composing stuff over inheritance
just makes so much more sense,
where you can join a few bits together,
and that creates a whole new thing,
where rather than having these really vast object hierarchies,
it just like makes no sense.
I don't know if that's ever been a thing like,
to me it's just never really like
helped me solve anything using these massive object hierarchies.
So yeah, so like one of the big things
that sort of came about,
I remember the shift between webforms, ASPX, and MVC.
And like for me, like I did a bit of PHP before.
So I was quite used to this whole like
push, pull, request, response paradigm of the web.
And ASPX just never really made much sense to me.
And then I saw this MVC and I was like, oh damn.
That looks exactly what I want to use.
So I started using that, it makes way more sense.
But then for me, it started to bring in,
I don't know if you ever noticed,
like the technical separation of concerns.
Like I call it, you know,
the separation concerns is like part of this whole solid thing,
isn't it?
But I see more as like this,
this technical separation of concerns.
And you get this like model view controller
and then everyone's got these models
and they create these entities.
And I heard someone coin this,
I don't know if you've ever heard this coin,
like a UI to the database.
Like you just create,
end up creating a UI to the database
or you've got all these crud things
and you're actually mapping one to one
of your entities into your database.
I don't know if you've ever come across that.
And there's also the whole feature folder
and vertical slices,
which kind of like map on to that.
But yeah, quite, quite often,
especially when doing APIs,
I see code bases,
which the API response
is returning the same DTOs
as the database entities.
And it's like, oh, don't do this.
Right, right.
And then someone thinks,
I've seen it a few times,
where someone thinks, all right,
because I've got my database entity
and I'll just map it into what's called a DTO.
And it's basically,
they use AutoMapper to do
like a one to one mapping
of all the properties.
And then that should be fine, right?
I've now got a separation between them.
No, no, it's not right.
It's not right.
And that's where like this idea
that databases end up just storing
entity state.
So they're just an entity state
storage system mechanism.
And I guess we all got to start somewhere.
And that's where like a lot of us started.
And I know like creating a lot of code
first entity framework stuff
and doing that.
And then sort of like,
I started coming across
these ideas of like, yeah,
doing feature folders.
And then a principal engineer
talking about mediator
and CQRS.
That was very intriguing to me
using mediator.
And then I started to sort of like
start thinking about these ideas of,
rather than technical separation
of concerns,
going more towards this like
behavioral separation of concerns.
Because it never really made much sense to me.
You know, you get someone on the UI,
sort of like a business analyst
or something on the UI.
And they're like,
they're like, oh yeah,
press this button.
It just doesn't do what it's supposed to do.
Like, what button is that?
When I was in the login screen,
I click the login button.
Like, how many people then go,
oh yeah, you hit the login button, right?
So that then translates to the login controller.
Oh wait, it's the login controller
or the authentication controller.
Oh, hang on,
where's this controller?
See, actually, what part of controller
is that part of?
Let me just scroll down all these like methods
to try and find the part where that is.
Like, it just,
like, how is that's not useful?
That's not useful to the developer
or anyone.
It takes you ages to find out where things are.
But if you, for instance,
had a folder that said login,
you'd be like, oh,
that's right, it's not a login folder.
Oh, no, it's got all the models
to do the login.
It's got all the actions
that the login can perform.
So you can log in,
you can log out,
maybe sign up,
it might be part of it,
that might be in a different part.
All depends on what your domain is,
I guess.
But moving more towards that
behavioral separation concern
is much better.
But I knew there's like that,
there's that technical shift
between MVC3, 4,
et le Core,
où je pense que le DI
n'a pas été le seul
avec les contrôles si ils sont dans le même folder.
Il y a un point de vue
qui n'est pas fait par la convention
ou quelque chose,
où tous les contrôles
ont dû être dans le même folder
ou quelque chose comme ça.
Mais quand il s'est fait
à l'espionnet Core,
il peut en mettre les contrôles
en quelque part.
Je ne suis pas sûr d'y être,
mais avant le .NET Core,
j'ai tendu à utiliser Autofac.
Je vais juste pluger ça dans.
Donc, c'est seulement recently
avec .NET Core.
Et les versions de .NET Core,
puis .NET 5,
je ne peux pas dire Core,
plus.
Et en fait,
un couple d'épisodes,
on a eu Steve Collins
en parlant de l'injection
en .NET.
Et nous sommes tous
tous en parlant de la même chose,
que tout ce qu'on a typiquement
besoin est juste
dans le built-in IOC.
Oui, 100%.
Et c'est vraiment intéressant,
je pense que l'un des plus
grands chiffres
que j'ai vu
dans la base de Microsoft,
de l'ancien style,
de l'ancien style,
c'est la facture de la
move de tous les statiques.
Le plan de la base,

c'est de faire des classes statiques
partout.
C'est comme,
l'injection de la devine
c'est un nightmare,
parce que je n'ai pas de
choses statiques.
Et ils étaient
faits par des objets singletons,
ce genre de choses.
Et c'est comme,
il y a peut-être des interfaces
ou comme,
la moitié des implementations
étaient internes,
donc vous ne pouvez vraiment
vraiment utiliser
des parts particulières
ou faire des choses.
C'est très bien,
c'est comme,
c'est votre box black,
et c'est ça.
J'ai essayé de l'utiliser.
Oui, c'est un meilleur endroit.
Et je suis assez heureux
que je sais que
beaucoup de devs
n'ont pas le courage
de travailler sur le plus
plus tard et le plus grand.
Mais je suis assez heureux
que tous mes projets
sont comme,
Donnet 5.
Donc je peux utiliser
tout le nouveau truc.
Je suis en train de regarder
Donnet 6,
tout le truc qui vient
avec ça,
et Blazor.
Je suis assez intéressé
sur Blazor desktop,
mais,
encore,
ce sera un autre tangent,
qui sera un tout le monde.
Donc,
on devrait probablement
reposer le point de source.
Oui,
même si ça se tient
à un moment,
et je vais le faire
plus tard,
parce que ça va se tier
à un moment.
Oui,
donc,
quand on commence
à penser
dans le sens
de comment
tu obtenis ce data,
quand tu commences
à envoyer des données
aux API,
dans cette interface
de user,
quand tu commences
à envoyer ces données.
Donc,
imagine si tu vas
signer un truc,
les screens de signes
qui ne sont pas les ones
qui vous demandent
pour tout
un seul peu
d'information.
Il y a un ton,
un page,
comme sur votre armée,
comme sur votre première,
votre dernier,
votre date de bourse,
votre mère,
votre nom de maitre,
votre nom de pet,
votre adresse,
tous ces trucs,
tout ceci,
comme,
personne ne veut signer
à ça.
Personne ne va signer
à votre site,
si c'est le premier
screen qui est
signé.
Donc,
généralement,
ce que tu as demandé,
c'est,
quoi username
ou email
que tu veux signer
avec,
et ce que tu veux
utiliser.
Et puis,
dans le processus,
tu vas probablement
faire un truc
qu'on a juste parlé,
donc,
ça ne fait pas assez,
comment tu vas
designer les tables
sur votre database,
tu vas en faire avec
toutes ces différentes
relations,
les tables,
les trucs qui se passent
et ça fait un peu plus
plus difficile
de penser,
et de se faire
tout ça ensemble.
Et la autre partie,
si tu imagine
avec ces tables,
je peux changer
mon email
à un moment,
je peux changer
mon adresse.
Et
personne peut faire ça
pour moi,
si tu m'appelles
un call centre
ou quelque chose,
tu peux changer mon adresse,
ce operator
peut être
une personne qui
change l'adresse.
Et si tu as un table
qui a,
je vois beaucoup de
columns,
qui sont modifiées
par
et la dernière time modifiée,
comment est-ce
que c'est
useful ?
Parce que
si tu as 2 modifications,
tu as perdu
la première modification,
donc ça ne fait pas
assez de travail.
Et pour moi,
je pense que
ce crud style
ne fonctionne pas avec la vie,
la vie
est
une série de
événements qui
se sont mis
dans un format
de temps
et de temps,
on ne va pas
aller dans le monde de Quantum,
on va
aller voir le file
si tu veux des contents.
C'est un autre épisode.
Oui, c'est ça.
Donc
comment
sont les épisodes
maintenant ?
Il y a
4 ?
Je pense que c'est un
série, c'est un nouveau podcast.
C'est ce qui
s'occupe quand tu me dis que
tu me parles.
Comment on se joins ?
Comment on
crée les séries ?
Mais oui,
donc
la idée est
que
c'est un moment de
temps.
Et une des moyens
qu'on peut penser
c'est que
ce sign-up.
Et
il y a aussi
cette
structure
d'envergurement
classique,
une analogie classique
pour ça.
Et c'est
comme
aller dans un Starbucks
ou
aller dans un
drink.
Ils
prennent ça,
ils parment
à quelqu'un
d'autre.
Et

comme un ticket
avec des informations
sur
ce type de

Et si il y a
quelque chose qui
doit être
prit,
quelqu'un d'autre
va prendre le ticket
et signer
ça.
Surtout
McDonald's
aussi.
McDonald's
c'est
la même
chose.
Vous
mettez
votre ordre
et
quelqu'un
peut être
sur la
chute
ou
quelque chose.
Et
ce ticket
est passé
et les choses
sont
récouries.
Il y a
plus d'informations
pour que
quelqu'un
s'en

Ils

aller
et


aller
et ils


et ils

aller
ils

,
Vous

vous



West
lagi

Brit ambition
C'est un numéro de ticket.
Donc je suis toujours là.
Mais je suis sûr qu'il y aura un jour où je vais
le faire sur la Saifah McDonald's, en faisant 32.
Mais oui, c'est ça.
C'est comme la façon de l'événement.
Et à l'aise de ça, il y a un événement
de prendre plus d'informations comme il y a.
Et c'est comme ces concepts.
Je pense que c'est ce que j'ai commencé à jouer
avec et j'ai commencé à penser à
comme j'ai voulu créer mon système.
Je ne voulais pas essayer de prendre
tout ce que j'ai dit maintenant parce que tu ne peux pas
avoir tout ce que j'ai dit et je veux
faire de l'information en plus.
Et j'ai commencé de travailler
autour des conseaux et de
sortir des post codes et des gens qui ont
vivé à ces adresses.
Et je n'ai pas entendu de l'événement
au point de vue.
Et je pense que c'était
2015, peut-être 2016.
L'événement était le concept qui a commencé
en 2000.
Bien, de ce que je peux comprendre,
c'est en 2006 avec Greg Young et sa paix.
Je epsilon.
OK maintenant par mee,
c'est.
En!...
ervice la Bra大 gur살.
vraiment dans le search en élastique à la fois.
Je me souviens encore de l'élastique
pour faire le searching en texte. C'est génial.
Le DSL est un pain dans le côté de la back,
pour en souvenir et pour faire du travail.
Mais
c'est assez cool pour le searching.
Et je pense que c'était aussi
le temps où l'ES6
a commencé à gagner des attractions dans le monde JavaScript.
Ils ont commencé à
gagner des choses comme JSPM et Webpack.
C'est comme le Grunt & the Gulp
era aussi des build-ups de task base.
Et ça vous permet de utiliser des features
pour transparer le code en ES5.
J'ai aussi écrit des ES3 à ce point.
J'ai écrit ES3 en 2015.
C'est pas grave. ES3.
C'est grime.
Ne l'utilisez pas. Ils n'ont pas Jason Cyrillizing.
Vous avez toujours le nightmare.
Je pense que j'ai un PSD sur ES3.
Mon ami, il a fait un gros chute à Ben.
Il a travaillé sur
JavaScript.
J'ai été très vieux.
On s'est arrêtés à cranger les jambes.
Il était toujours en 2015, 2016.
C'est comme... C'est fou.
Mais oui.
L'une des choses qui s'est venu
c'est cet object.assignement.
Vous pouvez mettre tous ces object.assignement
et ça flattent le object.
Je pensais...
C'est cool.
Dans mon view de UI, ce que je pouvais avoir
c'est cette timeline avec tout le data.
Et comme je suis en train de faire la timeline,
je passe l'arrêt des object.assignement.
Et je les flattent.
C'est difficile de expliquer, mais je le crame.
C'est un object qui flattent.
Si je l'ai commencé à gauche et j'avais 6 événements,
j'ai eu le slide à la première événement.
Il m'a dit que je faisais le premier object.
Et quand je l'ai flatté à l'arrivée,
j'aurai flatté les deux objets.
Ça me donnera mon final look à l'article.
Et quand je l'ai flatté à l'arrivée,
ça me donnera le dernier 3.
Et je les écoute.
Et puis, comme vous pouvez imaginer,
ça me donne ça.
Je pense... C'est cool.
Je pensais...
On a cette propre en object.assignement.
C'est un object qui a tout le data.
Tout ce que ce sont des événements.
C'est ça.
Et c'est là où il a commencé à cliquer.
Je me suis dit que c'est cool.
Et puis je me suis jointé à Jastis.
Le manager était là.
Je me disais que vous avez entendu de l'événement.
Et je me disais...
Et puis je n'ai pas fait rien de l'événement
depuis les 3 dernières années.
Et puis je l'ai reposé à nouveau.
Et oui,
je pense que le corps de ce que ça s'adresse à
est l'idée de tous ces bits d'information
sur ces événements.
Et vous avez un log qui est un
log qui est un array.
Je pense que c'est un log qui est un array.
Et je pense que c'est même le Kafka.
On avait un talk de conflux
pendant que je travaillais nationwide.
Je consultais.
Et on a eu un talk de conflux.
Ils ont bâti le Kafka pour l'idée d'un array.
C'est comme ça qu'ils ont construit le database.
C'est la idée d'un array.
On sait tous les caractéristiques
d'un array qui font vraiment performant.
J'espère que je vais y aller.
Ils vont être bombés par la communauté Twitter.
Et tout le monde l'a écouté.
Mais les caractéristiques de l'arrêt
sont en train de bouger d'un élément
au suivi et le plus ligné.
C'est vraiment rapide.
Pour pouvoir aller au suivi,
le suivi, le suivi, c'est rapide.
Et évidemment, les détails d'implementation
sont des choses.
Depuis comment vous vous implementez l'arrêt,
mais en général, l'index incrementaire
est vraiment, vraiment rapide.
Et donc l'idée est que vous pouvez commencer
à la fin de votre set d'événements.
Et vous pouvez ensuite augmenter,
aller à chaque événement et vous pouvez commencer
à couper tout ensemble.
Et ça vous donne votre état d'entrée.
Donc, en fait, ce que nous faisons
est que le point de vue de la Chine de Parodyme
que nous sommes regardés à
est de changer nos idées
de l'état d'entrée
à un état d'événements.
Donc, ce que vous faites
est que vous vous portez des bêtes du état
et que, à un moment donné,
vous serialisez tout cet état.
Et en fait, dans le monde réel,
ça fait sens,
vous attendez pour toutes les bêtes de l'information
avant de faire quelque chose.
Donc, une chose que vous pouvez penser
est que quand vous commencez à cuisiner
ou quelque chose comme ça,
vous allez vous réagir à votre récipe
et vous vous demandez que vous soyez
les ingrédients.
Et vous allez en train de faire des carottes,
les oignons, ou tout ça.
Je n'ai pas de mien,
donc je vais devoir aller
faire un chargé et faire des mien.
Et puis, quand vous avez tout,
vous pouvez combiner tous les deux
et puis faire votre dinner.
Donc, oui, l'idée est que,
quand vous avez tous votre état
ensemble, quand vous pouvez commencer
à cuisiner à différents points,
vous allez être comme, ah,
qu'est-ce que l'état à cet état ?
Qu'est-ce que l'état à cet état ?
Parce que c'est toujours changé,
et puis vous commencez à bouger
dans les risques de cette
consistance d'événements.
Et c'est assez intéressant,
parce que j'ai mis ce point
de conversation
dans la banque de la banque
sur l'événement.
Parce que je pense
que,
il y a des gens,
c'est-à-dire,
si vous vous rendez avec les banques
et la banque et la liquidité,
et tout ça,
c'est-à-dire la liquidité,
les gens veulent savoir exactement
combien de mien,
parce qu'ils veulent savoir
comment c'est liquid,
à ce point,
et surtout quand vous avez
des millions de mnés
en passant par le système de paix,
des milliers de mnés,
des milliers de mnés
en passant par le système de paix.
Vous devez être liquid
pour tout ce que vous avez mis
dans le système.
Donc, c'est très,
je pense que c'est partie
de la régulation.
Donc, oui, c'est très important
de être liquid.
Donc, ils disent,
on doit savoir le state
à chaque point.
Mais je pense que,
même avec la consistance éventuelle,
c'est à dire,
vous piquez un point
et vous dites,
qu'est-ce que c'est à ce point,
en connaissant bien,
que dans deux secondes,
ça pourrait être différent.
Mais c'est le point.
Vous êtes en train de dire,
qu'est-ce que c'est à ce point en temps ?
Donc, oui.
Juste en pensant sur les cas de utilisation,
si nous étions des événements
en temps,
plutôt que les currentes,
il y a beaucoup de différentes
advantages.
Je pense que un autre exemple
peut être simple
de faire des listes.
Si vous avez de la liste,
vous avez un web app,
un mobile app,
et vous faites des listes,
vous déclenchez,
vous changez,
et vous synchronisez
tout à l'heure.
Si chaque device,
quand vous faites une action,
c'est juste de déclencher un timestamp,
et ce timestamp est le source de la vérité,
alors vous n'avez pas de synchronisation
parce que vous vous en avez au bout,
parce que votre liste d'événements
est timestamp,
donc vous sortez ces événements
par timestamp,
réplayez-les,
et tous vos différents
devices sont syncs.
Oui, c'est le très intéressant
partage aussi,
et je pense que l'un des choses
que vous vous en avez au bout,
c'est que dans l'UI,
quand vous pensez à ça,
si vous commencez avec l'UI,
ce qui cause ces choses à arriver,
les événements causent les choses à arriver,
vous avez un bouton,
c'est un événement,
les choses qui se passent dans les browsers
sont toutes faites par les handlers d'événements,
le modèle d'événement
dans les browsers et les JavaScript,
c'est le modèle de drive de la course,
de comment on fait les choses.
Ça fait beaucoup de sens
de construire votre architecture
en un événement qui se passe,
parce que vous êtes en train de...
Tout le monde se passe pour des événements,
je vais faire quelque chose,
c'est un événement,
je vais cliquer sur le bouton,
ça crée un événement.
Tout ce que vous faites crée ces événements.
Et oui,
comme vous le dites,
vous vous en avez des événements,
des événements de stream,
et à différents points,
vous vous en avez des événements
qui sont nécessaires pour quitter
un certaine task
ou produire plus d'événements.
Vous pouvez avoir des événements
qui sont coupés de autres événements.
Quand vous avez des événements

ça peut quitter de autres événements.
Donc, dans les termes de paiement,
c'est des événements de reconciliation.
Donc, quand vous avez un certain set de transactions
dans un certain temps,
peut-être que ça peut quitter
d'autres événements.
Surtout si vous parlez de Amazon
et vous avez un shop en basket,
vous avez payé pour ça,
et dès que vous avez payé,
ça va quitter un whole série d'événements.
Vous pouvez avoir des événements
où ce paiement événement
peut quitter des événements
comme la checker du stock,
ou la tombe du stock,
ou la preuve de la delivery,
ou tout ce genre de...
Tout ce genre de choses qui se passent,
peut-être que ce soit une événement.
Donc, oui, c'est vraiment bon
dans ce sens. Et puis aussi,
en retour à cette idée de
réplayant les événements,
vous pouvez travailler à l'aise où vous avez mis le temps,
parce que si vous avez un état de la même entité,
parce que vous n'avez pas tout ce que vous avez créé,
ce que vous avez créé,
ce que vous avez créé,
vous ne vous entendez pas
quand quelque chose de votre database est faible.
Vous vous dites que c'est pas faible.
Qu'est-ce que vous avez fait ?
Comment avez-vous fait ça ?
Mais si vous avez un store d'événements,
vous pouvez réplayer les événements.
Vous pouvez, généralement,
quittement de rarez les которames,
pour intér evacuation de l'兒.
Pour que vous puissiez
éprouvoir le passé,
qui est à cause de alguma chose.




il y a des choses qui ont été faibles.
Vous pouvez se couper un service séparant,
replier les événements dans ce service,
un par un, pour voir où il y a des choses qui ont été faibles.
Vous allez dire, oh, regarde, c'est quand
l'admission de cet événement,
ça a créé cette behavior bizarre.
C'est assez cool.
Si vous avez besoin de replier les événements
pour trouver ce que l'on est en date,
et que votre application a été
dans 10 ans, et que vous avez
des millions d'événements,
vous devez replier au début de votre temps,
ou d'une façon dont je vais
connaître et utiliser le terme
de la shooting, pour des points différents en temps.
Oui, oui, oui. Vous vous portez
avec cette idea de la shooting.
Donc, Greg Young parle de
le fait que l'événement
et l'événement de la shooting
viennent du monde de l'account.
Et ce qu'ils vont faire, c'est qu'ils vont
avoir ce qu'ils s'appliquent.
Et je suis directement en train de
parler de ce point. Ils ont ce genre de
«year-end» qui est basé
dans un nouveau année. Ils se roulent
tout à l'heure
dans un nouveau point de start
et ils commencent par ce point.
Ils commencent à ajouter des nouveaux événements
au début de l'année.
Donc, oui, la idée de la shooting
est que vous voulez prendre
tout ce qu'il y a pour les
raisons GDPR, que vous soyez
capable de détruire le temps,
mais ça ne veut pas necessarily
que vous soyez en train de faire
ce qu'il y a dans votre set de travail.
Et en fait, vous pouvez
prendre le bon moment
que vous voulez
faire ce qu'il y a, mais
que ce soit le moment,
vous pouvez le faire tout en haut.
Donc, pour exemple,
vous ne vous gardez pas le temps
en termes d'entité
mais vous pouvez le faire
en partage de toutes les transactions
qui ont été faites au moment du temps.
Et vous pensez que si c'est le
temps du temps,
où des tonnes de transactions
sont allées tout le temps,
vous allez probablement
faire un tour chaque mois
et commencer la nuit en
le premier jour du mois,
et dire que c'est
le point de la balance de l'account
et que vous allez commencer à
faire tous les événements sur ça.
Donc, si votre service s'occupe
du jour avant qu'ils aient fait ça,
oui, vous devriez répliquer
tous les événements pendant les 30 jours.
Mais si votre service s'occupe
deux jours après la roll-up,
puis vous devez
prendre le snapshot et faire
les prochaines événements.
Donc, oui, vous pouvez avoir
cette optimisation de performance
qui est intéressante.
Si votre service ne se fait pas
et qu'il se passe un jour à un jour,
est-ce que le software,
comme l'Event Store, est-ce
que ça vous est en train de garder
le temps du temps ?
Est-ce que vous pouvez accéder
sans avoir à l'accessoire
de faire un get ou un query
de répliquer tous ces événements ?
Oui, c'est l'interesse
qui est intéressante.
C'est là que vous devez
décider comment vous voulez faire ça.
C'est quelque chose que je suis en train de explorer
les différents moyens pour faire ça.
Interessant, l'un des patterns,
l'un des patterns de l'entreprise
avec l'Event Store est la CDC.
La CDC est la capture de la change d'adaptation.
La CDC est la
capture de la change d'adaptation.
L'un des choses que vous pouvez faire
c'est que vous devez
utiliser les logs
qui sont essentiellement
l'Event Store.
Et évoquer tous ces logs
dans votre Event Store.
Et puis, tous vos systèmes
de l'Event Store
peuvent se dévier
sur le database,
pour que vous puissiez
recruter les logs.
Et puis, si vous utilisez
quelques différents databases,
vous pouvez streamer tout dans l'Event Store.
Et puis, tous vos services micro-services
sont difficiles, selon comment vous avez fait vos domaines
et tout. Vous pouvez décider
de quoi les streams vous voulez
réunir, de comment vous voulez
les données à l'esprit, la capture d'adaptation
peut avoir des transformations
pour les nouvelles streams.
Vous pouvez donc avoir des streams qui créent
d'autres streams via l'Event Store
ou vous avez une idée de projections.
Vous pouvez donc avoir
ces deux streams et vous pouvez avoir
une projection qui prend
ces streams à l'esprit
de nouvelles streams. Et puis,
quand vous allez au niveau micro-services,
vous pouvez donc serialiser ces données
dans de quoi vous voulez.
Il ne peut pas être totalement dans la même manière
que vous voulez discuter de 3 quarts de la date
ou de la quarts de la date, ou tout.
Et puis, ce que vous pouvez faire
c'est des détails où le data
fait des services
et vous vous pliez ça dans un
entité, ou un entité
d'entité. Vous vous pliez ça dans un entité d'entité
ou en monceau, ou en search
ou tout ce que vous voulez.
C'est un pattern intéressant.
Ce que je regarde en moment, est de
en s'en garder en membre.
Vous pourriez être assez familial
si vous avez des utilisateurs.
Vous pourriez avoir un table d'usage
qui a un million d'usagers
avec les idées d'usage.
Mais quand vous venez
de l'étude d'un event store,
ce que vous pouvez faire
est d'avoir un stream
pour chaque utilisateur.
Parce que ça fait sens, parce que chaque utilisateur
va avoir tous les streamer des données
attachées à eux.
Je suis désolé de avoir un produit
avec des millions d'usagers,
d'être honnête.
Facebook?
Oui, ça serait amusant.
Nous ne serions pas en place de discussions
avec les gens de la Chambre.
On va avoir des discussions
sur un jet privilé.
Dans un bâtiment.
Dans Clark's Private Jet Podcasts.
Vous devez
utiliser
des streams d'usage.
Vous devez avoir
une salle d'usage,
d'une idée.
C'est intéressant de voir
où vous voulez l'installer.
Si c'est un stream,
c'est peut-être...
Et ça aussi
comment vous avez des données
sur ce bruit de la date?
Je peux imaginer si c'est un log de transaction.
Vous ne voulez pas avoir
tout ce serialisation en membre.
Parce qu'il y a beaucoup de données,
moins que vous avez le 128GB
de RAM.
Mais pour les profiles,
si vous avez un profil pour quelqu'un,
ça peut être 3 ou 4 événements max.
Il peut être
l'événement d'adresser
de votre personnalité.
Il y a 2 événements.
Vous devez changer votre email.
C'est un volume
très bas.
Vous pouvez généralement
se surmonter
d'un événement 0.
C'est intéressant.
Ça cross-t-il le concept
des services phoenix et snowflake?
Cette idée
d'utiliser
les phoenix
et les phoenix
et tout le monde
sait que c'est le plus populaire
mais je ne m'en souviens pas.
Terraform?
C'est le plus populaire.
En utilisant tout ça,
vous pouvez continuer de rebuilder
votre infrastructure.
Vous pouvez faire
la construction de votre whole
et rebuilder tout de même.
C'est un concept intéressant.
Ça n'a pas vraiment
augmenté la résilience et la
reliability quand vous avez
faim dans vos services.
C'est comme les Kubernetes.
Vous avez des pods en centre.
Vous ne vous inquiétez pas.
Si vous voulez
faire des pods,
si l'administrate
se dévile et se dévile,
Kubernetes va bien bien
réunir les services.
Vous voulez pouvoir
détruire les services
et se dévile en quelque part.
Il y a des configurations
de snowflake.
Si les pods sont
en train de se déviler,
je n'ai pas perdu
toutes les configurations.
C'est un concept intéressant.
C'est un grand fun
de la configuration.
Si ça se dévile,
on peut le replacer.
Il ne faut pas faire
des portes,
des portes en Azure et des settings
changées.
C'est comme Kudu
ou quelque chose.
FTP
et les services.
Ce sont les jours.
Ils étaient.
Je l'ai brûlé sur le site.
Je ne sais pas pourquoi ça a été.
Je les ai mis dans la bonne folder et je
l'ai délétée.
Je sais ces deux.
On a du
un déploiement
de document en enseignant
un whole bunch de steps.
Oui.
Il ne s'est pas contrôlé.
Il s'est réglé
avec Jeff.
Vous venez de la même instruction.
La chose a été décevée.
Vous travaillez avec Jeff.
C'est Jeff.
Quoi un mec ?
Je n'ai pas pu faire le tangent.
Mais il y a beaucoup d'autres années.
Il y a un consultant.
Un des compagnies qui travaillait pour les rebelles
dans l'industrie des jeux.
Il y avait un mec qui était toujours
derrière les offices.
Et quelqu'un n'a pas le nom.
Après que je l'ai créé,
j'ai vu sur Facebook
que quelqu'un a mis la picture de Jeff
sur Facebook en disant
que Jeff était en train de parler.
Et il était encore,
il y a des années.
Il y a des années plus tard.
J'ai dit que c'était...
C'était vraiment...
Quelques choses ne vont jamais mourir.
Ils vont se faire mourir.
Qu'est-ce qui est intéressant
avec ce whole event store ?
Il y a aussi un programme functional.
Je suis un grand programme functional.
Pas juste de programme functional.
C'est F-Sharp.
F-Sharp, tout de suite.
J'aime utiliser F-Sharp.
Je vais l'idée de faire un peu moins de code
que ce que je fais en C-Sharp.
J'utilise F-Sharp.
Et il y a des choses que je fais 5 lines.
J'ai mis toutes les nouvelles
et les lignes et les brises.
Et tout le gaffe qu'on ne doit pas.
Mais c'est quelque chose qui
fit bien dans le programme functional.
Et l'Event Store a
des libraries.
C-Sharp style.
Il a dû faire un peu de translation
pour l'Event Store.
Mais ça se fit bien.
On s'attend à Wirw Starting.
Ça commence de la libraire
mais
Et puis tu as deux différents types, en F-Shark, tu as ces types AN et these types OR.
Et donc un type AN est quelque chose, quelque chose, quelque chose, quelque chose, quelque chose qui vous crée un type.
Donc c'est plus comme un record.
Donc tu pouvais penser à des données profiles.
Donc quelque chose qui fait un profil est le nom, le dernier nom et l'adresse d'une autre, ou quelque chose.
Le numéro de téléphone.
C'est ça, c'est ça, quelque type de type.
Puis tu as ce type OR.
Et le type OR, comme tu peux imaginer, c'est quelque chose d'une ou d'une ou d'une.
Et c'est la combinaison des décisions où ça fait que l'on fait un source de événements assez fort dans le programme functional.
Ça fait qu'il fait qu'il est assez facile à faire.
Parce que tu end-up avec un type OR, qui sont tous les différents événements qui peuvent arriver.
Et puis, une chose bien belle que tu fais en F-Shark, c'est quand tu fais ton Union discriminatif,
ce qui est ce que ces types OR sont, c'est le Union discriminatif.
Quand tu crées ton Union discriminatif.
Chaque case, tu peux dire « événement » et tu peux utiliser le nom de l'envers.
Et puis tu peux donner un autre type.
Donc tu peux vraiment l'enverter les différents cas.
Donc tu peux dire que tu peux avoir tous les différents événements, plus de ce type de record.
Et donc, quand tu construis ton système et tu construis ton modèle de détail,
et tu construis tous les événements que tu crées,
tu end-up avoir une partie de ce Union discriminatif.
Et puis, dès que tu fais ces événements,
tu as une grande expérience de match sur ton main de Union discriminatif.
Et puis tu te matches tous les différents cas.
Et dès que le business vient et dit « on a besoin de ce nouveau feature,
où on a besoin de créer ce nouveau événement, ce genre de choses,
et tu vas pour toute l'idéation de ça, et tu crées ça, ou quelque chose. »
Et puis tu mets ça dans ton événement, ton Union discriminatif.
Et puis, tout de suite, ton F-Shark code s'étend,
parce que tu dois maintenant pouvoir le manager tout de même dans le processus.
Donc, ça se démarre, je dirais, c'est-à-dire que ça se démarre,
c'est-à-dire que ça se démarre dans tous les différents secteurs de la code F-Shark,
où tu dois pouvoir le manager tout de suite.
Et puis tu travailles dans ce processus et tu as les données.
Donc, quelque chose qui fonctionne,
ça fonctionne en hand en hand avec le programme functional en F-Shark,
vraiment, vraiment bien, et ça fonctionne vraiment bien ensemble.
Mais ce n'est pas de dire que tu n'as pas le C-Shark,
tu n'as pas le type système que tu as disposé,
ou comme ton ami, parce que, évidemment,
quand tu crées classes en C-Shark,
ils peuvent aussi être inherités.
Donc, quand tu fais un cas de switch, tu n'as toujours pas...
Je ne sais pas si tu as oublié que quand tu fais une expression de switch,
tu n'as toujours pas pu mettre un catch-all tout le temps,
parce que, pour un moment,
ça ne peut pas déterminer toutes les différentes cases que tu vas faire.
Je pense que avec chaque version de C-Shark,
ça se démarre plus près de F-Shark, non ?
Donc, peut-être qu'une jour, il y aura quelque chose de similaire.
Tu sais quoi ? Je pense à ça.
Je ne sais pas.
Et, évidemment, je suis...
C'est-à-dire, qui est-il Mads Torfson, un C-Shark ?
Oui, tu peux me croire si je suis d'accord.
Mais je ne sais pas si C-Shark peut être là,
parce que c'est l'une des différences fondamentales
entre C-Shark et F-Shark, c'est le système de type.
Et, tu sais, le système de type algébrique
ne sit pas très bien avec cette idée d'inheritance.
Donc, tu devrais toujours pouvoir comprendre toutes les différentes cases
dans lesquelles quelque chose doit être évalué.
Il y a encore un peu de caveats avec F-Shark,
parce que c'est un C-Shark interropté.
Il y a encore un peu de caveats.
Mais je ne sais pas si C-Shark peut être là.
Mais je peux être le même.
Oui, je pense que parce que C-Shark
est essayé de faire les deux mondes,
il y aura toujours des limitations.
Et la compétition de la back-up,
on sait que Microsoft a une compétition de back-up,
qui a des raisons très bonnes.
Il y a beaucoup de codes basés sur les versions de .NET.
Donc, pendant que ils font beaucoup de langues,
c'est un type d'imprimant,
un type d'imprimant incrémentale
plutôt que de réévaluer la langue.
Oui, je me suis toujours senti
avec mes mains cross,
espérant que le jour qu'ils ont délégué le 4I loop,
c'est le plus basique et pas besoin de looper le point 4I.
Je ne sais pas quand j'ai perdu de l'utiliser,
d'ailleurs.
Non, exactement.
C'est le seul temps que j'ai utilisé le 4I
quand j'ai appris les matrices 3D
sur les matrices 2D
pour obtenir des images 3D
sur la table.
Et tu end up en faisant le double 4I, 4Y,
ou le 4X4Y,
ou le double 4Witration 3D.
En fait, je vais te dire, je dois avoir des codes
qui font ça, car j'ai eu des codes image manipulation
qui font exactement ça.
Oui, quand tu as des codes image manipulation,
tu es toujours en train de passer
par le système de coordonnage, en appuyant les choses.
Ou alors que c'est les band-times Y, plus X,
ou tout ça.
Oui, oui, oui.
Je n'ai pas d'idée où nous allons.
Je pense que nous devons probablement revenir sur le trap.
Donc, en parlant de ce que tu as dit,
on l'a touché en bref et tu l'as mentionné,
des choses comme CQRS et Mediator.
Et ça kind de
de la façon dont tu as été séparé
par tes rédits et les règles.
Ça me semble
qu'il est parfait pour ça,
que tes règles sont presumably juste des événements
qui sont admissibles. Mais ensuite, tu dois
rédits en une manière différente.
Oui, donc c'est un autre
très intéressant part de ça.
Et de quelle manière, quelle direction tu vas,
encore encore, comme tout à l'heure,
mais oui, je l'ai mentionné,
Mediator et ça.
Donc, CQRS est quelque chose
qui est comme le principe de la séguification commande
de la séguisation.
Mais Greg Young
parle de ça. Je pense que beaucoup de ça
vient de la désignation domaine
et qui est tout le temps
de ce qui fait des désignes domaines.
Et de la
des choses d'account et de
des idées d'account.
Et l'une des...
Je ne sais pas si ça vient de la pattern
de la séguification, mais c'est
utilisé par CQRS.
Et, à l'honne,
je ne suis pas
pas obligé de la séparation
qu'ils ont mis là-bas.
Et j'aime où Mediator a
passé, où ils se sont dit que
on n'a pas des séguisions commandes, c'est juste
une réquestion. Tu t'en as envoyé
une réquestion, et le commandeur
t'en a posé un et ça fait quelque chose.
Et je ne l'aime pas, parce que
évidemment, ils n'ont pas F-Sharp
et F-Sharp, donc tu as
cette...
Jimmy qui a créé
ce type de unit, parce que si je suis
le nom de l'un de mes amis, je vais
dire Jimmy, je n'ai jamais
parlé avec lui, mais oui, Jimmy,
Jimmy. Mr Bogard,
quand il a créé
ce type de unit, donc tu peux
faire une réquestion de unit, et
tu peux le dire, si ça ne rétient pas
ça rétient pas, mais c'est
intéressant, parce que je ne me
parle pas de ça, mais
quand tu regardes la signature
dans .NET, tu regardes la signature
qui dit public, voide, public, string,
et ça t'exprime
d'une exception.
Ils parlent de cette signature qui t'amène
parce que ça ne te dit pas
ce que ça fait.
Donc ça t'amène à ce que ça peut faire.
Je suis évidemment très power
pour moi, je ne veux pas avoir
Scott Flashon en Twitter.
C'est un de ces episodes
qu'on a mentionnés,
c'était un scoop, et Scott Flashon
était là.
Je pense que c'est un point qu'il a
réellement réellement réellement.
Oui, 100% et c'est
ce qui est bien de faire une
language d'expression, parce que tu dois
rétablir quelque chose, et tout le
retrait quelque chose.
Même si tu ne veux pas
écrire des exceptions, parce qu'ils
viennent à une coste, mais ils ne sont pas
en train de le faire, ils peuvent vous
déterrer une exception, et la
exception de la déception de la déception
ne vient pas de la fin.
Vous me déterrez la phrase
sans la preuve.
C'est un peu la poche.
Si je fais des codes
qui déterrent une exception de la déception
et je vois ça, ça ressemble
à quelque chose.
Je le vois.
Mais oui,
les exceptions ne sont pas
utiles. Ils sont bons pour les libraries
et les trucs, parce qu'ils peuvent être
comme, c'est pas supposed
de l'appel, c'est Jason
Cyrillizer, et tu as senti
Jason, ça ne fait pas du sens.
Jason format exception, ils ne savent pas
ce que je fais.
Mais vous voulez le cacher,
mais si quelqu'un vous envoie
des données, vous savez qu'il y a une
possibilité, la date qu'ils envoient
est crête.
C'est un normal truc.
C'est un validation.
Vous envoiez le reste,
c'est un 400 bad.
400 bad request?
Oui.
Vous envoiez
ça.
Vous vous rétirez
quelque chose.
Si vous pensez à des applications
commandes, vous vous rétirez.
Tout ça doit être rétéré.
C'est bien, c'est bien.
Il faut que vous le rétirez.
Avec les exceptions
et tout ça, vous pouvez vous envoier
le reste.
Avec votre exemple,
avec les 400 bad request,
si il y a quelque chose d'inquiétude,
mais un API peut vous envoier
d'autres raisons aussi.
À ce point, c'est probablement
un 500.
Mais votre API, je suppose que c'est
un scenario où une exception peut être
utile, parce que
une expérience de la déception
ne fait pas de 500.
Mais vous devez être au-delà de ce que
l'exposait à l'utilisation
de l'expérience.
C'est bien, et vous vous le rétirez.
Et vous vous le rétirez.
Et vous vous le rétirez.
Vous voulez prendre ça
pour que vous puissiez
le rétablir, même si le rétablir
est en train de le rétablir.
Et puis le rétablir.
Il y a des gaps dans votre application.
Mais oui, la section de rétablir
est bonne, mais il ne faut pas
que tout le monde se mette en train de
tomber là-bas.
Et on peut faire des exceptions
et re-tâcher tout ça.
Mais oui, on va au-delà de la
médias.
Tout peut retourner
quelque chose.
Je suis content de faire
ce modèle avec ce réquest.
Et oui,
les handlers, si vous vous le rétablissez
avec les BDD, vous avez ces
handlers qui sont très spécifiques
et qui sont très importants.
Et je pense que
vous pouvez faire ce niveau de séparation
avec les handlers.
Si vous avez vu
la chose où ils commencent,
je ne sais pas si c'est un espionnet 6
où vous pouvez avoir un méthode
ou quelque chose.
Et vous ne vous en avez pas besoin.
On peut voir ça.
Est-ce que c'est part de l'appli minimum?
Pas de l'idée.
Mais j'ai vu ça.
Et c'est un peu délicieux.
Et c'est délicieux.
C'est quelque chose
qu'il n'y a pas de contrôle.
Mais je vais laisser ça
pour les listeners.
Et vous envoyez tous vos
réponses à Dan's Twitter.
En réponse sur la postcard?
Oui.
Avec les médias,
il y a beaucoup de différentes advantages.
Vous avez mentionné une responsabilité.
Je ne sais pas
ce que les changements de l'application.
Mais si vous avez
un point de l'application
qui a été envoyé
ou quelque chose,
ils sont tous dans la même classe.
Normalement ils sont dans la même classe.
Mais ils peuvent avoir
différentes responsabilités
en ayant un handler.
Une chose que j'aime bien
avec les handlers,
c'est que vous avez l'application
dans le handler.
Mais ça ne devrait pas
qu'il soit émettu
par un request de l'application
ou un message sur un queue.
C'est juste le logiciel de la business.
Donc, par séparation
ça veut dire que votre logiciel ne
ne cares pas ce que vous avez émettu.
Exactement. Et ce qui est très bien
est que les libraries médias sont un petit library.
Et ce qui fait
est qu'il crée une barrière entre vous et
tout le framework.
J'ai construit un joueur de la médias.
C'est un truc que j'ai utilisé
pour apprendre tout ce que j'ai appris
pour le programme. J'ai 40 versions
de ce joueur de la médias.
J'ai le WPF
avec le mediator. J'ai le MVC
avec le mediator. Je peux mettre
un autre UI que je veux.
Je ne me prépare pas
si c'est WPF, web, etc.
Il faut que je sors.
Une version riche.
Il y a un autre ennemi
à la place.
C'est vraiment bien
de la médias. C'est une séparation.
C'est
une barrière
pour être entièrement intégrée.
Et l'un des choses que j'ai fait avec le mediator
est que j'ai créé un
collier de la médias
de la Laison.
Vous pouvez
faire des notes.
Vous avez utilisé
les frameworks web.
Vous pouvez faire des routes.
Vous pouvez mettre
les handlers
d'express.
Oui, c'est ça.
Vous pouvez
faire des routes
par le root.
Et mettre un constrain
de la réquest.
Et la ligue de la Laison
sera de la médias
et de la médias.
Et le mediator
va le faire.
Comment ça va?
Une chose que je ne
ne l'ai pas du tout l'attention
avec le mediator, mais c'est plus comme
l'évoilant de prendre le short.
Mais évidemment, un contrôler
ou un endpoint de l'ASP.net
doit rétablir
un code de status.
Donc, c'est bien, pas trouvé.
Mais vous ne voulez pas
le mediator de la médias
d'avoir un concept de code de status.
Il y a ce lait de mapping
entre là et là.
C'est extrait.
C'est un des deux.
Vous voulez prendre un short, mais vous devez
arrêter et ne faire pas ça.
Je dois
avoir une réponse
et je vais le faire
là-bas.
C'est un peu plus difficile, mais
F-Shout fait bien.
Je n'ai pas vraiment
une union discriminée
avec les responsables de la
base de la base de la base de la base
pour être successe.
Je n'ai pas de données.
Quand vous pensez à ça,
vous vous portez à deux codes de status,
200 ou 24.
Vous envoiez quelque chose
avec ou sans.
Vous avez un genre
qui vous appuie.
C'est un path très bon.
Nous, les développeurs,
ne nous caresons pas de path pas bon.
Il cares de path pas bon.
Il ne marche pas.
Il n'est pas le gars.
Il a fait un peu de bâtiment.
Il a toujours fait des bugs.
Ce qui est intéressant,
c'est le concept de l'événement
et tout ça.
Il a fait des choses
qui sont différentes.
Je veux
rappeler tout ça.
Je pense que tout le monde
a entendu le réact.
Je sais que
je n'ai pas d'enversation anglaise.
Je n'ai pas d'affinion
de l'anglais.
Ce n'est pas le cas avec les gens.
Ils ont utilisé ça.
C'est incroyable.
Anglaise a une structure de rxjs
qui est vraiment cool.
C'est vraiment cool.
C'est réactivity.
Je ne veux pas que l'anglais
fasse des vis.
Quand il s'agit de réact,
j'aime le fait que le réact s'occupe.
Le réact est
élevé
de l'anglais.
Il n'y a pas de
déclaration
de réact.
Il y a des
réacteurs.
Tout le monde
utilise le réact.
Ils ne savent pas
qui c'est.
Je m'aime l'exemple.
Le réact a une idée
d'établir des événements.
Redux a une store
où tous ces événements
sont mis à la réduction.
Le réacteur
t'en prend
et t'en donne
une opportunité
pour le mettre en place.
Donc, faire des changements.
Une chose que j'ai
évoquée
c'est que l'événement est le
genre de la maitre.
Même les petits.
C'est un système.
Je vais faire des événements.
Je vais faire des événements.
C'est trop petit.
Vous ne pouvez pas utiliser un événement pour ça.
Vous ne pouvez pas utiliser des événements pour ça.
Je vais.
Il y a un point où mon blog
se tourne en Kubernetes.
J'ai vu la comique où il y a un
grand choc.
Il y a un petit box
dans le milieu du choc.
Et il dit que c'est un blog
sur Kubernetes.
Oui, c'est ça.
Si vous essayez,
si vous pouvez faire tout ce que vous voulez.
C'est tout pour la maitre, non ?
C'est ça.
Je veux faire ça.
Le seul moyen pour faire
tout ce que vous avez fait
c'est de vivre en 24-7.
Ce que j'ai commencé
c'est pourquoi j'ai fait ce comment
au début de cette
websocket.
Maintenant, j'ai
une websocket à la main.
Je ne vais pas dire que c'est la meilleure
façon de faire ça.
Je vais avoir une websocket à la main
qui est en train de faire un redux.
Avec le UI,
il y a des événements
qui sont dans le websocket.
Il y a des services
qui discriminent
contre les événements.
Il y a des stores
qui sont dans le websocket.
Et puis, il y a des services
qui sont dans le background.
Il y a des services host.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.









Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.








Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.


Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.










Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.



Il y a des services qui sont dans le background.


Il y a des services qui sont dans le background.



Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.


Il y a des services qui sont dans le background.




Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.













Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.



Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.


Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.












Il y a des services qui sont dans le background.











Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.


Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.

Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.







Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.











Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.

Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.


Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.











Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.









Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.


Il y a des services qui sont dans le background.




Il y a des services qui sont dans le background.

Il y a des services qui sont dans le background.

Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le background.
Il y a des services qui sont dans le behind-the-scenes.





Il y a des services qui sont dans le front-dcan,


Et même si je fais ça, tu sais, encore.
C'est pas juste un casque où tu as mentionné que tu es un principal.
C'est un casque où tout le monde a des expériences différentes.
Et parfois, c'est quelqu'un qui n'a plus d'expérience que toi,
qui a juste un peu de expérience différente.
Ou, dans le passé, tu as eu un problème particulièrement à Google.
Tu n'as pas eu de Google.
Oh oui, 100%.
Le principal ne veut pas que je fasse ça depuis longtemps.
Mais vraiment, je l'aime beaucoup.
Tout le genre d'engineur, des expériences, des expériences.
Parce que tu as entendu des différents expériences différentes
et que tous ces expériences combinées sont intéressantes.
Et ils sont beaucoup plus de la manière que je pense.
Et les choses que je pense, sont des gens différents,
même des gens au sein de l'engineur.
Donc, oui, absolument.
Cool, c'est un bon conseil.
C'est quoi mon conseil?
Je pense que mon conseil est de essayer de s'en accepter de tout.
Je sais que c'est toujours une contention
entre C-Sharp et Java, et tout ça.
Et je l'ai fait un peu de Java.
Et, à mon expérience, j'ai hâte de ça.
Mais, tu sais, Java fait quelque chose d'un peu bien.
Elle fait quelque chose d'un peu mieux que C-Sharp.
Et quand j'ai commencé à apprendre F-Sharp,
et j'ai pris quelques gens sur le tour de apprendre F-Sharp
et moi-même,
juste en ouvrant mon cerveau
sur les différents choses que F-Sharp fait,
et en regardant la hausse,
même si il y a quelque chose d'une hausse,
je n'aime pas vraiment.
Je n'aime pas vraiment.
Certaines choses je n'aime pas.
Et quand tu commences à ouvrir mon cerveau
sur les différents choses,
à apprendre les choses qui changent de façon que tu penses,
à apprendre ces nouvelles choses
qui changent de façon que tu penses,
tu peux le faire dans votre programme,
comme C-Sharp,
si c'est ce que ta langue est,
ou en JavaScript,
si c'est ce que ta langue est.
Tu sais, pour JavaScript,
tu veux faire un programme fonctionnel,
tu vas faire le J-S,
tu sais,
tu peux faire le J-S,
et ça fait tout le partial application
et la courant pour toi.
Et quand tu le fais dans ta langue,
tu te regardes en un tout différent,
c'est un truc que je fais
à Clearbank,
je prends des gens dans la série F-Sharp,
une série de 10 parts de la série
de apprendre F-Sharp,
c'est moi qui faisais des choses
et sur la caméra
pour une heure et demi chaque semaine.
Mais, c'est pour ça que les gens sont engagés,
mais sur quelque chose
complètement différent,
qu'ils n'ont pas expérimé,
et qu'ils pensent de différentes manières.
Tu es vraiment ouvert à ça,
et tu commences
à gagner beaucoup plus d'expérience,
tu commences à ouvrir
cette expérience,
un peu plus vite,
si tu commences à ouvrir ton cerveau.
Je dis que tu es très accepté et ouvert,
ne t'en fais pas,
et tu te dis
que tu es quelque chose d'un côté à l'autre,
je ne veux pas te le toucher,
je ne te le préoccuperai pas.
Non, regarde le go.
Comment ça fait de la thème
d'un type de F-Sharp?
C'est vraiment intéressant.
Et par apprendre ça,
tu peux gagner des pannes
pour que tu puisses en faire plus efficace.
Qui sait ça?
Absolument.
Je pense que c'est important
de avoir le bon mindset.
C'est facile de penser
que je dois apprendre
cette autre technologie
que je dois apprendre pour le travail.
C'est comme, oh, c'est un peu trop d'eau.
Je ne veux pas apprendre
une autre chose.
Ou tu peux penser, oh, oui,
j'ai un autre chose que je peux apprendre
et c'est vraiment cool.
Je vais jouer avec différents paradigmes
ou essayer différentes choses.
Ça fait mon travail moins d'embordement
parce que j'ai beaucoup plus de variation.
Je ne fais pas la même chose tous les jours.
La stratégie pour ça,
c'est comme je l'ai dit,
j'ai 40 versions de la player de la médié.
J'aime la musique,
j'aime le joueur de la médié.
Et je le profite tout ce que je fais
pour le programme.
Je profite tout ce que je fais
pour la médié.
Je profite de la recursion.
Parce que je regardais les structures
et les structures de file
et j'ai essayé de la sécher et de la sécher.
J'ai essayé de la recursion
et j'ai appris que je l'ai appris
en faisant cette médié.
Donc, trouver quelque chose que vous avez vraiment aimé
pour faire,
quelque chose que vous trouvez vraiment intéressant.
Je sais que l'un de mes amis
utilise un guitar.
Il utilise un guitar comme ceci.
Il a fait des appels différents
sur le stuff de guitar.
C'est comme ça qu'il en apprend
tous les programmes.
Avec des coachings et des mentors ici et là.
Mais c'est ce que vous avez
à faire.
Vous avez à trouver quelque chose
que vous avez de l'amour.
Et puis, vous commencez à le transporter
et transposer.
Et ces différents choses
vont vous faire plus de plaisir.
100%.
Décidément.
Donc, avant de rappeler
où est le meilleur endroit
pour nos listeners
pour vous acheter,
si vous avez des questions
ou évidemment, nous allons inclure
les links dans les notes de la show.
Oui, je suis tout à l'heure
dans le place.
Je suis tout à l'heure en red.
Je suis tout à l'heure
en stack de overflow.
Je suis tout à l'heure en Twitter.
Je suis tout à l'heure en LinkedIn.
Mais oui, Twitter et LinkedIn
sont probablement les meilleurs places.
Je vais me mettre sur Twitter et LinkedIn.
Je vais probablement vous laisser...
Mes mains sont un peu étranges.
Je vais probablement vous laisser...
vous laisser me laisser me laisser
me laisser me laisser en Twitter
quand vous vous mettez la chute
pour le podcast.
Mais LinkedIn,
j'ai juste été sur LinkedIn
et j'ai regardé le gars.
Je suis sûr que
il n'y a pas de plein de LinkedIn
dans le monde.
J'ai un nom assez unique.
Vous êtes heureux de voir ça?
Il n'y a pas d'autres Callums
dans le monde, c'est sûr.
Alors,
vous parlez de quelqu'un
qui s'appelle Daniel Clark,
qui est l'un des meilleurs
des plus communes.
Oui, c'est vrai.
Je pense que...
Oui, oui.
Je ne peux pas y aller
avec le nom d'un dame
dans DanClark.com.
Vous êtes heureux.
Je ne sais pas comment j'ai fait ça.
Il y a un car race
qui s'appelle DanClark.
Et il a fait un avantage
depuis longtemps.
Ah, oui.
Je peux avoir votre nom d'un dame?
Oui, vraiment.
Vous êtes heureux.
Je dis que vous pouvez
pour beaucoup de money.
Oui, c'est ça.
10 000 pounds.
Je pense que j'ai dit plus
que de plus,
à l'heure de la chute.
Oui, c'est ça que vous allez
faire.
Il y a deux millions de pounds.
Je pense que j'ai dit 15 000
parce que je pensais...
Si il me donne ça,
je vais l'accepter.
Mais,
je pense que je vais aller

faire un avantage pour vous depuis longtemps.
Je ne vais pas vous le donner pour rien.
Vous devez être vraiment heureux
et venir vous faire un avantage
pour DanClark.com.
Cool.
C'est génial.
Cool.
Merci beaucoup
pour les gens qui sont dans le show.
Je pense que nous avons
un record
pour les meilleurs technologues
qui ont été listés
pour lesquels nous avons mentionnés.
C'est moi.
C'est moi.
C'est moi.
C'est génial.
Merci beaucoup pour vous.
C'est génial.
C'est génial.
Je suis content d'avoir une chute
sur ce sujet.
J'espère que je n'ai pas de...
Juste de me rassurer
toutes les mots.
Tout les mots dans l'univers.
Non, c'est bien.
Je peux juste éditer
plus de l'artisan.
Il y a 5 minutes.
C'est génial.
C'est génial.
C'est génial.

C'est génial.
Excellent.
Merci.
Cool.
Je vous remercie.
Je pense que ce podcast
est sponsorisé par Everstack,
qui est mon propre company,
qui a offert des services
de développement et de consultation.
Pour plus d'informations,
visitez Everstack.com.
Et si vous aimez le podcast,
s'il vous plait,
faites-moi séparer le mot
sur les médias sociaux.
Je utilise le hashtag
UnhandledException,
et je peux être trouvé
sur Twitter
à Jackham.
D-R-A-C-A-N.
Et mes D-M-s sont oublées.
Et mon blog,
d'Ancfot.com,
a des links
à mon site social, aussi.
Nous allons inclurent les links
à tout le...
beaucoup,
beaucoup,
beaucoup,
beaucoup,
beaucoup de choses,
qui sont mentionnées
aujourd'hui,
qui peuvent être trouvées
sur
UnhandledException.com.
...

Les infos glanées

Je suis une fonctionnalité encore en dévelopement

Signaler une erreur

TheUnhandledExceptionPodcast

Tags
Card title

Lien du podcast

[{'term': 'Technology', 'label': None, 'scheme': 'http://www.itunes.com/'}]

Go somewhere