Watch the fourth session of Software Architecture Virtual Conference as Joseph Guadagno discusses, "Application/Web Architecture".
Watch Full Conference here: https://youtu.be/0m0Jvcp76sE
Conference Website: https://www.2020twenty.net/softwarearchitecture
C# Corner - Community of Software and Data Developers: https://www.c-sharpcorner.com
#csharpcorner #virtualconference #live #software #architecture #application #web
Show More Show Less View Video Transcript
0:02
I am a director of Quicken Loans I lead
0:05
I am a director of Quicken Loans I lead
0:05
I am a director of Quicken Loans I lead a three different teams there that help
0:09
a three different teams there that help
0:09
a three different teams there that help with the mortgage process you can find
0:13
with the mortgage process you can find
0:13
with the mortgage process you can find me on social media and any one of these
0:16
me on social media and any one of these
0:16
me on social media and any one of these points at Jake wood AG no joke we
0:19
points at Jake wood AG no joke we
0:19
points at Jake wood AG no joke we diagnose net on Facebook LinkedIn and
0:22
diagnose net on Facebook LinkedIn and
0:22
diagnose net on Facebook LinkedIn and Joe seguir diagnose or if you want more
0:24
Joe seguir diagnose or if you want more
0:24
Joe seguir diagnose or if you want more on any of these topics or anything I
0:26
on any of these topics or anything I
0:27
on any of these topics or anything I blog about go to jjg got me slash about
0:30
blog about go to jjg got me slash about
0:30
blog about go to jjg got me slash about jjg bird said she might as well name
0:33
jjg bird said she might as well name
0:33
jjg bird said she might as well name dotnet so i expect a whole bunch of
0:36
dotnet so i expect a whole bunch of
0:36
dotnet so i expect a whole bunch of followers and Facebook requests after
0:39
followers and Facebook requests after
0:39
followers and Facebook requests after this as usual so you know if we look at
0:45
this as usual so you know if we look at
0:45
this as usual so you know if we look at the overall set of events so far we
0:48
the overall set of events so far we
0:48
the overall set of events so far we started off with a great introduction on
0:50
started off with a great introduction on
0:50
started off with a great introduction on what an architect is and there's many
0:54
what an architect is and there's many
0:54
what an architect is and there's many different there's many differences
0:56
different there's many differences
0:56
different there's many differences around what an architect is and every
1:00
around what an architect is and every
1:00
around what an architect is and every every organization has a different
1:03
every organization has a different
1:03
every organization has a different opinion and there's different types of
1:05
opinion and there's different types of
1:05
opinion and there's different types of architects which we've kind of seen we
1:07
architects which we've kind of seen we
1:07
architects which we've kind of seen we talked about Enterprise architects and
1:09
talked about Enterprise architects and
1:09
talked about Enterprise architects and then some solution architects and
1:11
then some solution architects and
1:11
then some solution architects and technical architect then Andy went and
1:14
technical architect then Andy went and
1:14
technical architect then Andy went and took it to the next level and talked
1:17
took it to the next level and talked
1:17
took it to the next level and talked about some principles principles or
1:21
about some principles principles or
1:21
about some principles principles or general guidance around it I'm going to
1:24
general guidance around it I'm going to
1:24
general guidance around it I'm going to sit here today or stand where I'm
1:25
sit here today or stand where I'm
1:25
sit here today or stand where I'm standing right now and talk about
1:27
standing right now and talk about
1:27
standing right now and talk about patterns these are ways that you can
1:29
patterns these are ways that you can
1:29
patterns these are ways that you can implement some of the principles that
1:32
implement some of the principles that
1:32
implement some of the principles that Andy talked about and these print these
1:34
Andy talked about and these print these
1:34
Andy talked about and these print these patterns work with web non-web and
1:39
patterns work with web non-web and
1:39
patterns work with web non-web and pretty much life in some way shape or
1:43
pretty much life in some way shape or
1:43
pretty much life in some way shape or form and its really distinct one thing I
1:47
form and its really distinct one thing I
1:47
form and its really distinct one thing I want to point out with this is that
1:50
want to point out with this is that
1:50
want to point out with this is that these patterns and principles that we've
1:54
these patterns and principles that we've
1:54
these patterns and principles that we've talked about so far today are our
1:56
talked about so far today are our
1:56
talked about so far today are our versions of them one of the things I've
1:59
versions of them one of the things I've
1:59
versions of them one of the things I've learned in the two years I've been in
2:01
learned in the two years I've been in
2:01
learned in the two years I've been in software development multiply that by 20
2:04
software development multiply that by 20
2:04
software development multiply that by 20 or 10 every place is different and every
2:09
or 10 every place is different and every
2:09
or 10 every place is different and every person has their own opinion when I
2:11
person has their own opinion when I
2:11
person has their own opinion when I think Andy said a lot and his was this
2:13
think Andy said a lot and his was this
2:13
think Andy said a lot and his was this is how I do it this is how our
2:16
is how I do it this is how our
2:16
is how I do it this is how our - does it and that's an important aspect
2:19
- does it and that's an important aspect
2:19
- does it and that's an important aspect of it if you look at the overall
2:23
of it if you look at the overall
2:23
of it if you look at the overall principles they are principles they're
2:26
principles they are principles they're
2:26
principles they are principles they're not directives they're not mandates
2:28
not directives they're not mandates
2:28
not directives they're not mandates these are principles guidelines I like
2:32
these are principles guidelines I like
2:32
these are principles guidelines I like to say a lot with it the same thing
2:34
to say a lot with it the same thing
2:34
to say a lot with it the same thing holds true for patterns patterns in
2:37
holds true for patterns patterns in
2:37
holds true for patterns patterns in software development help you out in
2:40
software development help you out in
2:40
software development help you out in several different ways
2:42
several different ways
2:42
several different ways and I got to move one of my screens over
2:44
and I got to move one of my screens over
2:44
and I got to move one of my screens over a little bit they help you out by
2:47
a little bit they help you out by
2:47
a little bit they help you out by putting together the building blocks so
2:50
putting together the building blocks so
2:50
putting together the building blocks so in Manhattan
2:51
in Manhattan
2:51
in Manhattan Magnus started talking they talked about
2:54
Magnus started talking they talked about
2:54
Magnus started talking they talked about how we build a house software is like
2:57
how we build a house software is like
2:57
how we build a house software is like building a house you start off with the
2:59
building a house you start off with the
2:59
building a house you start off with the foundation which are the principles or
3:02
foundation which are the principles or
3:02
foundation which are the principles or the guidelines to it and then patterns
3:04
the guidelines to it and then patterns
3:04
the guidelines to it and then patterns for building the house what do you do
3:06
for building the house what do you do
3:06
for building the house what do you do how do you do it you put the concrete
3:09
how do you do it you put the concrete
3:09
how do you do it you put the concrete first for the foundation you put up the
3:12
first for the foundation you put up the
3:12
first for the foundation you put up the studs next you put up the you put up the
3:18
studs next you put up the you put up the
3:18
studs next you put up the you put up the plumbing you know the order of things
3:20
plumbing you know the order of things
3:20
plumbing you know the order of things and how you do it matters to make it
3:23
and how you do it matters to make it
3:23
and how you do it matters to make it repeatable the reason why you make it
3:25
repeatable the reason why you make it
3:25
repeatable the reason why you make it repeatable is so that you don't make
3:27
repeatable is so that you don't make
3:27
repeatable is so that you don't make mistakes that you've might have made in
3:30
mistakes that you've might have made in
3:30
mistakes that you've might have made in the previous so we're gonna cover some
3:33
the previous so we're gonna cover some
3:33
the previous so we're gonna cover some of the most common patterns that are
3:36
of the most common patterns that are
3:36
of the most common patterns that are used again why do these are my viewpoint
3:38
used again why do these are my viewpoint
3:38
used again why do these are my viewpoint your mileage may vary
3:40
your mileage may vary
3:40
your mileage may vary but the primary purpose of a pattern is
3:43
but the primary purpose of a pattern is
3:43
but the primary purpose of a pattern is the age-old adage of don't reinvent the
3:49
the age-old adage of don't reinvent the
3:49
the age-old adage of don't reinvent the wheel patterns exist to help you create
3:56
wheel patterns exist to help you create
3:56
wheel patterns exist to help you create and redo things over and over again so
4:01
and redo things over and over again so
4:01
and redo things over and over again so you're not making the same mistakes so
4:04
you're not making the same mistakes so
4:04
you're not making the same mistakes so let's take a look at some of them the
4:08
let's take a look at some of them the
4:08
let's take a look at some of them the first one that you see is the commonly
4:11
first one that you see is the commonly
4:11
first one that you see is the commonly referred to as the later approach or
4:15
referred to as the later approach or
4:15
referred to as the later approach or multi-tier slash three-tier slash end
4:18
multi-tier slash three-tier slash end
4:18
multi-tier slash three-tier slash end here they're lots of lots of different
4:21
here they're lots of lots of different
4:21
here they're lots of lots of different names I know a back about 20 years ago
4:26
names I know a back about 20 years ago
4:26
names I know a back about 20 years ago we talked about how how everything had
4:32
we talked about how how everything had
4:32
we talked about how how everything had to be n tiered or three tiers and this
4:34
to be n tiered or three tiers and this
4:34
to be n tiered or three tiers and this is a common breakdown for it you have
4:37
is a common breakdown for it you have
4:37
is a common breakdown for it you have your presentation layer on top and this
4:39
your presentation layer on top and this
4:39
your presentation layer on top and this is your mobile applications web
4:42
is your mobile applications web
4:42
is your mobile applications web applications these things talk to a
4:46
applications these things talk to a
4:46
applications these things talk to a logical tier the logical tier is where
4:50
logical tier the logical tier is where
4:50
logical tier the logical tier is where all your actual work happens things like
4:53
all your actual work happens things like
4:53
all your actual work happens things like how to place an order how to ship in
4:55
how to place an order how to ship in
4:55
how to place an order how to ship in order how to deduct items from the
4:59
order how to deduct items from the
4:59
order how to deduct items from the inventory and this layer talks to the
5:04
inventory and this layer talks to the
5:04
inventory and this layer talks to the data layer which is okay now I got my
5:06
data layer which is okay now I got my
5:06
data layer which is okay now I got my inventory where do I save all this stuff
5:09
inventory where do I save all this stuff
5:09
inventory where do I save all this stuff how do I check my inventory etc one of
5:14
how do I check my inventory etc one of
5:14
how do I check my inventory etc one of the things I want to clarify with this
5:16
the things I want to clarify with this
5:16
the things I want to clarify with this is that there's a difference between
5:18
is that there's a difference between
5:18
is that there's a difference between tier and layer a tier is typically
5:24
tier and layer a tier is typically
5:24
tier and layer a tier is typically designed for the actual implementation
5:29
designed for the actual implementation
5:29
designed for the actual implementation so data tier typically has to do with
5:33
so data tier typically has to do with
5:33
so data tier typically has to do with you know the database the storage where
5:36
you know the database the storage where
5:36
you know the database the storage where a logical tier has to do with the
5:38
a logical tier has to do with the
5:38
a logical tier has to do with the business rules layers can be a lot more
5:42
business rules layers can be a lot more
5:42
business rules layers can be a lot more than that you can have more layers that
5:44
than that you can have more layers that
5:44
than that you can have more layers that sit in there so from a logical tier you
5:49
sit in there so from a logical tier you
5:49
sit in there so from a logical tier you can have one layer that handles all the
5:53
can have one layer that handles all the
5:53
can have one layer that handles all the requests coming in that does things like
5:56
requests coming in that does things like
5:56
requests coming in that does things like validation things like that that hands
5:58
validation things like that that hands
5:58
validation things like that that hands it off ultimately to another layer that
6:00
it off ultimately to another layer that
6:00
it off ultimately to another layer that goes and does the actual processing of
6:04
goes and does the actual processing of
6:04
goes and does the actual processing of it so it's an important distinction they
6:07
it so it's an important distinction they
6:07
it so it's an important distinction they get confused a lot between between
6:11
get confused a lot between between
6:11
get confused a lot between between themselves but they're really not that
6:14
themselves but they're really not that
6:15
themselves but they're really not that that different in most cases some of the
6:19
that different in most cases some of the
6:19
that different in most cases some of the advantages of using this approach for it
6:22
advantages of using this approach for it
6:22
advantages of using this approach for it is it really helps with the first of the
6:27
is it really helps with the first of the
6:27
is it really helps with the first of the solid principle or not really for so
6:29
solid principle or not really for so
6:29
solid principle or not really for so softener symbols but the separation of
6:31
softener symbols but the separation of
6:31
softener symbols but the separation of concerns separating out your
6:34
concerns separating out your
6:34
concerns separating out your presentation so that you can handle your
6:37
presentation so that you can handle your
6:37
presentation so that you can handle your user
6:38
user
6:38
user industry the deadly question of what
6:41
industry the deadly question of what
6:41
industry the deadly question of what about handling logic in store procedures
6:43
about handling logic in store procedures
6:43
about handling logic in store procedures I'll get to that in a little bit
6:46
I'll get to that in a little bit
6:46
I'll get to that in a little bit that's the age-old debate as long as
6:48
that's the age-old debate as long as
6:48
that's the age-old debate as long as I've been doing software development for
6:50
I've been doing software development for
6:50
I've been doing software development for 25 years where do you put it I'll cover
6:54
25 years where do you put it I'll cover
6:54
25 years where do you put it I'll cover a little bit of that in the in the event
7:00
a little bit of that in the in the event
7:00
a little bit of that in the in the event sourcing portion of this you have the
7:06
sourcing portion of this you have the
7:06
sourcing portion of this you have the ability to minimize your dependency so
7:09
ability to minimize your dependency so
7:09
ability to minimize your dependency so as you start pulling out the layers of
7:11
as you start pulling out the layers of
7:11
as you start pulling out the layers of the onion they're less dependent on each
7:14
the onion they're less dependent on each
7:14
the onion they're less dependent on each other it makes it makes development a
7:17
other it makes it makes development a
7:17
other it makes it makes development a little bit easier because people are
7:18
little bit easier because people are
7:18
little bit easier because people are used to it it's been around and commonly
7:20
used to it it's been around and commonly
7:20
used to it it's been around and commonly used for at least 20 some odd years that
7:24
used for at least 20 some odd years that
7:24
used for at least 20 some odd years that I know about also makes your application
7:27
I know about also makes your application
7:27
I know about also makes your application a lot more testable meaning that you can
7:29
a lot more testable meaning that you can
7:29
a lot more testable meaning that you can get you can with the pieces separate
7:33
get you can with the pieces separate
7:33
get you can with the pieces separate like it's n DS demo where you had the
7:36
like it's n DS demo where you had the
7:36
like it's n DS demo where you had the validator and you can test out the
7:38
validator and you can test out the
7:38
validator and you can test out the validator separate from the piece that
7:41
validator separate from the piece that
7:41
validator separate from the piece that actually goes in the database and saves
7:43
actually goes in the database and saves
7:43
actually goes in the database and saves it and then it's reusable this logical
7:47
it and then it's reusable this logical
7:47
it and then it's reusable this logical tier the data tier can be propagated to
7:50
tier the data tier can be propagated to
7:50
tier the data tier can be propagated to other applications without having to
7:52
other applications without having to
7:52
other applications without having to worrying about the presentation model
7:54
worrying about the presentation model
7:54
worrying about the presentation model there are some disadvantages to it too
7:57
there are some disadvantages to it too
7:57
there are some disadvantages to it too it's like the changes that have been
8:01
it's like the changes that have been
8:01
it's like the changes that have been let's say you decide you want to add a
8:05
let's say you decide you want to add a
8:05
let's say you decide you want to add a new column you have for a person you
8:09
new column you have for a person you
8:09
new column you have for a person you have first name last name and date of
8:13
have first name last name and date of
8:13
have first name last name and date of birth but you decided since it's an
8:16
birth but you decided since it's an
8:16
birth but you decided since it's an ordering system you want to know their
8:18
ordering system you want to know their
8:18
ordering system you want to know their anniversaries so that you can send them
8:21
anniversaries so that you can send them
8:21
anniversaries so that you can send them a happy anniversary
8:23
a happy anniversary
8:23
a happy anniversary message you have to go and make
8:27
message you have to go and make
8:27
message you have to go and make modifications all the way up to all the
8:29
modifications all the way up to all the
8:29
modifications all the way up to all the different tiers so your presentation has
8:31
different tiers so your presentation has
8:31
different tiers so your presentation has to have a new field the logical tier has
8:34
to have a new field the logical tier has
8:34
to have a new field the logical tier has to have a new field and the data tier in
8:37
to have a new field and the data tier in
8:37
to have a new field and the data tier in most cases this also leads itself
8:41
most cases this also leads itself
8:41
most cases this also leads itself generally to having to write more code
8:44
generally to having to write more code
8:44
generally to having to write more code because you separate it out which is
8:46
because you separate it out which is
8:46
because you separate it out which is going to be a common theme throughout
8:48
going to be a common theme throughout
8:48
going to be a common theme throughout lots of these patterns
8:51
and then you have the age-old debate
8:54
and then you have the age-old debate
8:54
and then you have the age-old debate that came up with one of the questions
8:56
that came up with one of the questions
8:56
that came up with one of the questions where does the code go do I put my
8:59
where does the code go do I put my
8:59
where does the code go do I put my business logic in a stored procedure do
9:02
business logic in a stored procedure do
9:02
business logic in a stored procedure do I put validation in the presentation
9:05
I put validation in the presentation
9:05
I put validation in the presentation tier does it go in the logical tier
9:07
tier does it go in the logical tier
9:07
tier does it go in the logical tier where does it all go I say it really
9:10
where does it all go I say it really
9:10
where does it all go I say it really depends like Andy said it's up to you
9:12
depends like Andy said it's up to you
9:12
depends like Andy said it's up to you and your organization for me I prefer to
9:15
and your organization for me I prefer to
9:15
and your organization for me I prefer to not have any database or sorry any
9:21
not have any database or sorry any
9:21
not have any database or sorry any business logic in the database and I
9:24
business logic in the database and I
9:24
business logic in the database and I used the word prefer on purpose like
9:26
used the word prefer on purpose like
9:26
used the word prefer on purpose like Andy said we prefer to use an ORM then
9:31
Andy said we prefer to use an ORM then
9:31
Andy said we prefer to use an ORM then store procedures sometimes it makes
9:33
store procedures sometimes it makes
9:33
store procedures sometimes it makes sense to do things in a store procedure
9:35
sense to do things in a store procedure
9:35
sense to do things in a store procedure especially if you're doing multiple
9:38
especially if you're doing multiple
9:38
especially if you're doing multiple joins multiple queries summarization and
9:41
joins multiple queries summarization and
9:41
joins multiple queries summarization and makes sense same thing with the
9:43
makes sense same thing with the
9:43
makes sense same thing with the presentation layer with validation it
9:46
presentation layer with validation it
9:46
presentation layer with validation it makes sense to put the validation in the
9:49
makes sense to put the validation in the
9:49
makes sense to put the validation in the business in the sorry in the
9:51
business in the sorry in the
9:51
business in the sorry in the presentation layer it also makes sense
9:53
presentation layer it also makes sense
9:53
presentation layer it also makes sense for it to be neurological layer because
9:55
for it to be neurological layer because
9:55
for it to be neurological layer because you don't know how the data is coming in
9:58
you don't know how the data is coming in
9:58
you don't know how the data is coming in so you stop it at both places and yes it
10:02
so you stop it at both places and yes it
10:02
so you stop it at both places and yes it violates the DRI principle to some
10:05
violates the DRI principle to some
10:05
violates the DRI principle to some extent but in each different layer
10:08
extent but in each different layer
10:08
extent but in each different layer there's different sets of data coming
10:12
there's different sets of data coming
10:12
there's different sets of data coming through plus there's also different ways
10:15
through plus there's also different ways
10:15
through plus there's also different ways to handle that data in a presentation
10:17
to handle that data in a presentation
10:17
to handle that data in a presentation layer you might want to have a drop-down
10:21
layer you might want to have a drop-down
10:21
layer you might want to have a drop-down list to choose a stager from or a
10:23
list to choose a stager from or a
10:23
list to choose a stager from or a country year from where as a logic layer
10:26
country year from where as a logic layer
10:26
country year from where as a logic layer you don't have that you just want to say
10:29
you don't have that you just want to say
10:29
you don't have that you just want to say what you know just validate that it's a
10:32
what you know just validate that it's a
10:32
what you know just validate that it's a real country so again it depends on your
10:36
real country so again it depends on your
10:36
real country so again it depends on your preference
10:39
next up is the Model View Star and the
10:44
next up is the Model View Star and the
10:44
next up is the Model View Star and the reason why it's a stars because there
10:45
reason why it's a stars because there
10:45
reason why it's a stars because there was really three patterns here that are
10:48
was really three patterns here that are
10:48
was really three patterns here that are commonly used depending on the
10:52
commonly used depending on the
10:52
commonly used depending on the implementation and the framework you're
10:54
implementation and the framework you're
10:54
implementation and the framework you're using the most common one which Andy
10:58
using the most common one which Andy
10:58
using the most common one which Andy usin stole my thunder for thank you Andy
11:00
usin stole my thunder for thank you Andy
11:00
usin stole my thunder for thank you Andy is the model-view-controller pattern
11:03
is the model-view-controller pattern
11:03
is the model-view-controller pattern and it's kind of highlighted here the
11:05
and it's kind of highlighted here the
11:05
and it's kind of highlighted here the idea is you have this model which sits
11:07
idea is you have this model which sits
11:07
idea is you have this model which sits on top the model describes your data so
11:09
on top the model describes your data so
11:09
on top the model describes your data so we sit in the order concept as your
11:15
we sit in the order concept as your
11:15
we sit in the order concept as your order your order details you know
11:17
order your order details you know
11:17
order your order details you know products that kind of stuff we get a
11:21
products that kind of stuff we get a
11:21
products that kind of stuff we get a list of orders from our controller which
11:25
list of orders from our controller which
11:25
list of orders from our controller which is this guy here our controller sends
11:31
is this guy here our controller sends
11:31
is this guy here our controller sends the model upwards that model goes to the
11:38
the model upwards that model goes to the
11:38
the model upwards that model goes to the view the view then takes it and the user
11:41
view the view then takes it and the user
11:41
view the view then takes it and the user sees it user does certain things to the
11:45
sees it user does certain things to the
11:45
sees it user does certain things to the model like adds an item to it creates it
11:49
model like adds an item to it creates it
11:49
model like adds an item to it creates it it goes back to the controller and then
11:52
it goes back to the controller and then
11:52
it goes back to the controller and then the cycle keeps going so the controller
11:56
the cycle keeps going so the controller
11:56
the cycle keeps going so the controller itself
11:57
itself
11:57
itself has all the brains of it what to do how
12:00
has all the brains of it what to do how
12:00
has all the brains of it what to do how to do it knows how to go to database how
12:03
to do it knows how to go to database how
12:03
to do it knows how to go to database how to validate it how to pull records the
12:05
to validate it how to pull records the
12:05
to validate it how to pull records the model is just concerned with its models
12:08
model is just concerned with its models
12:08
model is just concerned with its models so if we go to the person that ordered a
12:12
so if we go to the person that ordered a
12:12
so if we go to the person that ordered a first name last name date of birth does
12:14
first name last name date of birth does
12:14
first name last name date of birth does the validation for that the view says I
12:16
the validation for that the view says I
12:16
the validation for that the view says I know how to handle this model and
12:19
know how to handle this model and
12:19
know how to handle this model and display it and then the user is just
12:21
display it and then the user is just
12:21
display it and then the user is just there to you know interact with them
12:25
there to you know interact with them
12:25
there to you know interact with them some of the advantages of Model View
12:28
some of the advantages of Model View
12:28
some of the advantages of Model View controller are more so to testability is
12:34
controller are more so to testability is
12:34
controller are more so to testability is probably one of the biggest the view
12:38
probably one of the biggest the view
12:38
probably one of the biggest the view part becomes very helpful if you're in a
12:42
part becomes very helpful if you're in a
12:42
part becomes very helpful if you're in a larger organization and you have people
12:44
larger organization and you have people
12:44
larger organization and you have people that specialize in user interfaces where
12:48
that specialize in user interfaces where
12:48
that specialize in user interfaces where you might have a person like Andy
12:51
you might have a person like Andy
12:51
you might have a person like Andy mentioned with the marketing department
12:52
mentioned with the marketing department
12:52
mentioned with the marketing department that is really good at sia CSS or
12:57
that is really good at sia CSS or
12:57
that is really good at sia CSS or understanding design patterns and I'm
12:59
understanding design patterns and I'm
12:59
understanding design patterns and I'm talking designers and user interface
13:01
talking designers and user interface
13:01
talking designers and user interface design where they can go and design an
13:07
design where they can go and design an
13:07
design where they can go and design an application that is user friendly just
13:10
application that is user friendly just
13:10
application that is user friendly just to be honest with you most engineers
13:12
to be honest with you most engineers
13:12
to be honest with you most engineers that are corn quote full-stack are not
13:15
that are corn quote full-stack are not
13:15
that are corn quote full-stack are not great at this
13:16
great at this
13:16
great at this we can get by our toolkits you know
13:20
we can get by our toolkits you know
13:20
we can get by our toolkits you know whether you have dotnet or Java have
13:24
whether you have dotnet or Java have
13:24
whether you have dotnet or Java have some good out-of-the-box stuff but you
13:27
some good out-of-the-box stuff but you
13:27
some good out-of-the-box stuff but you know for most of us battleship gray is
13:29
know for most of us battleship gray is
13:29
know for most of us battleship gray is our default theme one other advantage of
13:35
our default theme one other advantage of
13:35
our default theme one other advantage of it is that the presentation becomes more
13:38
it is that the presentation becomes more
13:38
it is that the presentation becomes more reusable you can take out those views
13:42
reusable you can take out those views
13:42
reusable you can take out those views and have different different vantage
13:45
and have different different vantage
13:45
and have different different vantage points of them or different versions of
13:48
points of them or different versions of
13:48
points of them or different versions of the view as well as be able to test out
13:52
the view as well as be able to test out
13:52
the view as well as be able to test out the views test out your business logic
13:55
the views test out your business logic
13:56
the views test out your business logic layer aka controller test out the models
14:00
layer aka controller test out the models
14:00
layer aka controller test out the models a lot easier there are two different
14:03
a lot easier there are two different
14:03
a lot easier there are two different variations of this the presenter model
14:06
variations of this the presenter model
14:06
variations of this the presenter model so let me clear this screen out where's
14:12
so let me clear this screen out where's
14:12
so let me clear this screen out where's my ski key I don't have my escape key or
14:22
my ski key I don't have my escape key or
14:22
my ski key I don't have my escape key or I can just hit forward my PowerPoint
14:25
I can just hit forward my PowerPoint
14:25
I can just hit forward my PowerPoint skills are failing I will just no I
14:32
skills are failing I will just no I
14:32
skills are failing I will just no I don't want to end show sorry about that
14:37
don't want to end show sorry about that
14:37
don't want to end show sorry about that it broke PowerPoint let me restart it I
14:45
shouldn't have done the annotations
14:47
shouldn't have done the annotations
14:47
shouldn't have done the annotations parkings I knew it was gonna get it
14:50
parkings I knew it was gonna get it
14:50
parkings I knew it was gonna get it messed up so the presenter part or the
14:55
messed up so the presenter part or the
14:55
messed up so the presenter part or the model-view-presenter
14:56
model-view-presenter
14:56
model-view-presenter really follows the model-view-controller
14:59
really follows the model-view-controller
14:59
really follows the model-view-controller the only real difference is the
15:02
the only real difference is the
15:02
the only real difference is the presenter replaced the controller with
15:06
presenter replaced the controller with
15:06
presenter replaced the controller with the presenter and the presenter piece
15:08
the presenter and the presenter piece
15:08
the presenter and the presenter piece handles the interaction between the view
15:11
handles the interaction between the view
15:11
handles the interaction between the view and the model and the user there's some
15:16
and the model and the user there's some
15:16
and the model and the user there's some other smaller variations of it but
15:18
other smaller variations of it but
15:18
other smaller variations of it but that's the overall gist of it and then
15:21
that's the overall gist of it and then
15:21
that's the overall gist of it and then you get the model view viewmodel or
15:24
you get the model view viewmodel or
15:24
you get the model view viewmodel or commonly referred to as mvvm same
15:26
commonly referred to as mvvm same
15:26
commonly referred to as mvvm same principle you have your view
15:29
principle you have your view
15:29
principle you have your view you have your model and then you have
15:31
you have your model and then you have
15:31
you have your model and then you have the view model which does all the
15:33
the view model which does all the
15:33
the view model which does all the interactions so it just depends on the
15:37
interactions so it just depends on the
15:37
interactions so it just depends on the framework I know if you do a lot of
15:38
framework I know if you do a lot of
15:38
framework I know if you do a lot of xamarin or a lot of WPF windows forms
15:43
xamarin or a lot of WPF windows forms
15:43
xamarin or a lot of WPF windows forms the mvvm model is super or pattern is
15:48
the mvvm model is super or pattern is
15:48
the mvvm model is super or pattern is super popular in them that move over to
15:52
super popular in them that move over to
15:53
super popular in them that move over to our next pattern which is event-driven
15:57
our next pattern which is event-driven
15:57
our next pattern which is event-driven commonly referred to as event sourcing
16:00
commonly referred to as event sourcing
16:00
commonly referred to as event sourcing public publish/subscribe names vary
16:05
public publish/subscribe names vary
16:05
public publish/subscribe names vary depending on who you talk to but I'll
16:09
depending on who you talk to but I'll
16:09
depending on who you talk to but I'll use the event driven the event driven
16:14
use the event driven the event driven
16:14
use the event driven the event driven takes everything as an event so you act
16:21
takes everything as an event so you act
16:21
takes everything as an event so you act your code does something based on a
16:25
your code does something based on a
16:25
your code does something based on a given thing that happened in your
16:29
given thing that happened in your
16:29
given thing that happened in your environment so as the sample shows you
16:32
environment so as the sample shows you
16:32
environment so as the sample shows you on the right when an order is placed I
16:37
on the right when an order is placed I
16:37
on the right when an order is placed I do something so we trigger an order
16:40
do something so we trigger an order
16:40
do something so we trigger an order place event which goes out and charges
16:43
place event which goes out and charges
16:43
place event which goes out and charges my account does an inventory check not
16:47
my account does an inventory check not
16:47
my account does an inventory check not necessary in this order make sure that
16:50
necessary in this order make sure that
16:50
necessary in this order make sure that the items there in the inventory then
16:52
the items there in the inventory then
16:52
the items there in the inventory then goes and adducts the item from it once
16:56
goes and adducts the item from it once
16:56
goes and adducts the item from it once it deducts the item from it that may in
17:00
it deducts the item from it that may in
17:00
it deducts the item from it that may in turn trigger another event called the
17:02
turn trigger another event called the
17:02
turn trigger another event called the order ready now that the order is ready
17:05
order ready now that the order is ready
17:05
order ready now that the order is ready I know I need to ship the package then
17:07
I know I need to ship the package then
17:07
I know I need to ship the package then update the order the event driven model
17:11
update the order the event driven model
17:11
update the order the event driven model is really helpful when you have larger
17:16
is really helpful when you have larger
17:16
is really helpful when you have larger systems and a little bit more complex
17:18
systems and a little bit more complex
17:18
systems and a little bit more complex this allows you and this is commonly
17:21
this allows you and this is commonly
17:21
this allows you and this is commonly used for quarter processing systems or
17:26
used for quarter processing systems or
17:26
used for quarter processing systems or anything where you have a lot of
17:28
anything where you have a lot of
17:28
anything where you have a lot of transactions you know if you think of it
17:30
transactions you know if you think of it
17:30
transactions you know if you think of it when you place an order on Amazon Target
17:34
when you place an order on Amazon Target
17:34
when you place an order on Amazon Target Walmart you name it when an order
17:37
Walmart you name it when an order
17:37
Walmart you name it when an order happens there's so much that happens
17:39
happens there's so much that happens
17:39
happens there's so much that happens behind the scenes you know we go and
17:43
behind the scenes you know we go and
17:43
behind the scenes you know we go and make sure that the product is there we
17:45
make sure that the product is there we
17:45
make sure that the product is there we check for shipping how quick tin that
17:47
check for shipping how quick tin that
17:47
check for shipping how quick tin that product gets you we deducted we have to
17:50
product gets you we deducted we have to
17:50
product gets you we deducted we have to charge a credit card we have to make
17:52
charge a credit card we have to make
17:52
charge a credit card we have to make sure the credit card is charged before
17:54
sure the credit card is charged before
17:54
sure the credit card is charged before it comes back here is where the event
17:56
it comes back here is where the event
17:56
it comes back here is where the event system comes in we're going to talk
17:58
system comes in we're going to talk
17:58
system comes in we're going to talk about how that plays into the next
18:01
about how that plays into the next
18:01
about how that plays into the next pattern but one of the things I talk
18:03
pattern but one of the things I talk
18:03
pattern but one of the things I talk about a lot is that you'll see a lot of
18:05
about a lot is that you'll see a lot of
18:05
about a lot is that you'll see a lot of these patterns throughout everyday life
18:08
these patterns throughout everyday life
18:08
these patterns throughout everyday life for that matter you know think of a
18:10
for that matter you know think of a
18:10
for that matter you know think of a think of a phone call for that matter
18:13
think of a phone call for that matter
18:13
think of a phone call for that matter when a phone rings I know I'll see on
18:16
when a phone rings I know I'll see on
18:16
when a phone rings I know I'll see on young kids don't use phones anymore you
18:18
young kids don't use phones anymore you
18:18
young kids don't use phones anymore you text but when you get a text message
18:21
text but when you get a text message
18:21
text but when you get a text message that comes in your device beat that's an
18:25
that comes in your device beat that's an
18:25
that comes in your device beat that's an event something happened which triggers
18:26
event something happened which triggers
18:26
event something happened which triggers a response from you to go and grab your
18:28
a response from you to go and grab your
18:28
a response from you to go and grab your phone and look at it we use this pattern
18:32
phone and look at it we use this pattern
18:32
phone and look at it we use this pattern a lot just in software development and
18:34
a lot just in software development and
18:34
a lot just in software development and in life there's many different ways to
18:38
in life there's many different ways to
18:38
in life there's many different ways to implement this pattern usually you hear
18:42
implement this pattern usually you hear
18:42
implement this pattern usually you hear the most common implementations are
18:45
the most common implementations are
18:45
the most common implementations are using message queues or message topics
18:48
using message queues or message topics
18:48
using message queues or message topics things like as your messaging as your
18:52
things like as your messaging as your
18:52
things like as your messaging as your service bus as your event hubs or if
18:56
service bus as your event hubs or if
18:56
service bus as your event hubs or if you're an Amazon person their simple
18:59
you're an Amazon person their simple
18:59
you're an Amazon person their simple notification server is the simple
19:01
notification server is the simple
19:02
notification server is the simple queuing service event bridges or IBM MSN
19:06
queuing service event bridges or IBM MSN
19:06
queuing service event bridges or IBM MSN queue there's lots of different
19:07
queue there's lots of different
19:08
queue there's lots of different implementations about messaging has been
19:10
implementations about messaging has been
19:10
implementations about messaging has been around for quite some time with the
19:16
around for quite some time with the
19:16
around for quite some time with the advent of the messaging we have kind of
19:22
advent of the messaging we have kind of
19:22
advent of the messaging we have kind of a piggy backing pattern called CQRS
19:26
a piggy backing pattern called CQRS
19:26
a piggy backing pattern called CQRS and I know this interface doesn't really
19:29
and I know this interface doesn't really
19:29
and I know this interface doesn't really match the color scheme of the rest but
19:32
match the color scheme of the rest but
19:32
match the color scheme of the rest but the next two slide was really
19:34
the next two slide was really
19:34
the next two slide was really challenging to get in that small space
19:37
challenging to get in that small space
19:37
challenging to get in that small space everything that was needed so CQRS
19:43
everything that was needed so CQRS
19:44
everything that was needed so CQRS were referred to as the command query
19:47
were referred to as the command query
19:47
were referred to as the command query responsibility segregation in a nutshell
19:52
responsibility segregation in a nutshell
19:52
responsibility segregation in a nutshell the pattern has us separating out
19:57
the pattern has us separating out
19:57
the pattern has us separating out actions versus query so we go back to
20:01
actions versus query so we go back to
20:01
actions versus query so we go back to our order system the fact of going
20:05
our order system the fact of going
20:05
our order system the fact of going through and creating an order which is a
20:09
through and creating an order which is a
20:09
through and creating an order which is a command should be different from going
20:12
command should be different from going
20:12
command should be different from going through and reporting on how many how
20:18
through and reporting on how many how
20:18
through and reporting on how many how many orders do I have how many things
20:20
many orders do I have how many things
20:20
many orders do I have how many things like that so separating out the two
20:23
like that so separating out the two
20:23
like that so separating out the two common pattern for this is a reporting
20:28
common pattern for this is a reporting
20:28
common pattern for this is a reporting database if you have a high transaction
20:31
database if you have a high transaction
20:31
database if you have a high transaction system a lot of times the system that's
20:34
system a lot of times the system that's
20:34
system a lot of times the system that's writing out to the data store is very
20:39
writing out to the data store is very
20:39
writing out to the data store is very different from the system that's reading
20:42
different from the system that's reading
20:42
different from the system that's reading it and a lot of times you have a
20:44
it and a lot of times you have a
20:44
it and a lot of times you have a replication database setup where you're
20:47
replication database setup where you're
20:47
replication database setup where you're writing I got imagine it's something
20:48
writing I got imagine it's something
20:48
writing I got imagine it's something like an Amazon they're writing out
20:50
like an Amazon they're writing out
20:50
like an Amazon they're writing out records millions and millions at a time
20:54
records millions and millions at a time
20:54
records millions and millions at a time to a database but someone that's looking
20:57
to a database but someone that's looking
20:57
to a database but someone that's looking for inventory reports or seeing what the
21:00
for inventory reports or seeing what the
21:00
for inventory reports or seeing what the sales threshold was for the day is
21:04
sales threshold was for the day is
21:04
sales threshold was for the day is pulling that data out from a separate
21:07
pulling that data out from a separate
21:07
pulling that data out from a separate repository and that's a good use of the
21:12
repository and that's a good use of the
21:12
repository and that's a good use of the CQRS patter havier commands separate
21:16
CQRS patter havier commands separate
21:17
CQRS patter havier commands separate from your queries and you can see that
21:20
from your queries and you can see that
21:20
from your queries and you can see that on the diagram if you look at the user
21:24
on the diagram if you look at the user
21:24
on the diagram if you look at the user interface starting at the very top with
21:26
interface starting at the very top with
21:26
interface starting at the very top with the yellow we go through the command bus
21:30
the yellow we go through the command bus
21:30
the yellow we go through the command bus so in that order of Amazon the create
21:34
so in that order of Amazon the create
21:34
so in that order of Amazon the create order the command handle it says okay
21:37
order the command handle it says okay
21:37
order the command handle it says okay create order I need to go to charge the
21:40
create order I need to go to charge the
21:40
create order I need to go to charge the account check the inventory go through
21:43
account check the inventory go through
21:43
account check the inventory go through all those lists and it's not just one
21:45
all those lists and it's not just one
21:45
all those lists and it's not just one item usually one command will fire off
21:48
item usually one command will fire off
21:48
item usually one command will fire off more than one command so if you think
21:50
more than one command so if you think
21:50
more than one command so if you think about it from the event-driven when we
21:55
about it from the event-driven when we
21:55
about it from the event-driven when we placed in order we did an account charge
21:59
placed in order we did an account charge
21:59
placed in order we did an account charge and inventory check a deduction the
22:02
and inventory check a deduction the
22:02
and inventory check a deduction the Avenger man pattern these are different
22:07
Avenger man pattern these are different
22:07
Avenger man pattern these are different events
22:09
events
22:09
events this CQRS these become command so we
22:13
this CQRS these become command so we
22:13
this CQRS these become command so we have an order a place command which then
22:16
have an order a place command which then
22:16
have an order a place command which then creates a account charge command an
22:20
creates a account charge command an
22:20
creates a account charge command an inventory check etc so it's often that
22:24
inventory check etc so it's often that
22:24
inventory check etc so it's often that these kind of get a little mixed
22:27
these kind of get a little mixed
22:27
these kind of get a little mixed together which we'll see in a slider too
22:29
together which we'll see in a slider too
22:29
together which we'll see in a slider too and then those commands do stuff with
22:32
and then those commands do stuff with
22:32
and then those commands do stuff with the different domain models you know the
22:35
the different domain models you know the
22:35
the different domain models you know the customer contact the order cetera and
22:38
customer contact the order cetera and
22:38
customer contact the order cetera and then come back to the event database and
22:44
then come back to the event database and
22:44
then come back to the event database and then on the side of that we have the
22:47
then on the side of that we have the
22:47
then on the side of that we have the event bus which is writing off these
22:52
event bus which is writing off these
22:52
event bus which is writing off these events that are happening in these
22:55
events that are happening in these
22:55
events that are happening in these events are typically database updates
22:57
events are typically database updates
22:57
events are typically database updates things like that to something else that
22:59
things like that to something else that
22:59
things like that to something else that sits in the query part so we go down the
23:03
sits in the query part so we go down the
23:03
sits in the query part so we go down the right side of it which I think it's your
23:06
right side of it which I think it's your
23:06
right side of it which I think it's your left side on the screen when we're
23:08
left side on the screen when we're
23:08
left side on the screen when we're looking for orders or status of an order
23:11
looking for orders or status of an order
23:11
looking for orders or status of an order we're actually not doing the commands
23:13
we're actually not doing the commands
23:13
we're actually not doing the commands which is a side we're going down the
23:15
which is a side we're going down the
23:15
which is a side we're going down the pipeline creating a query going off to
23:19
pipeline creating a query going off to
23:19
pipeline creating a query going off to the data reading the data another good
23:25
the data reading the data another good
23:25
the data reading the data another good way of looking at this is when you're on
23:27
way of looking at this is when you're on
23:27
way of looking at this is when you're on Facebook or even this chat thing when
23:30
Facebook or even this chat thing when
23:30
Facebook or even this chat thing when you're sending a check on this stream
23:33
you're sending a check on this stream
23:33
you're sending a check on this stream it's not necessarily writing it off to a
23:39
it's not necessarily writing it off to a
23:39
it's not necessarily writing it off to a database once it's in the database going
23:41
database once it's in the database going
23:41
database once it's in the database going out and broadcasting it it's sending an
23:43
out and broadcasting it it's sending an
23:43
out and broadcasting it it's sending an event it's sending an event off to some
23:46
event it's sending an event off to some
23:46
event it's sending an event off to some back-end system says hey there was an
23:49
back-end system says hey there was an
23:49
back-end system says hey there was an event that happened someone created a
23:51
event that happened someone created a
23:52
event that happened someone created a comment that comment then goes out to a
23:55
comment that comment then goes out to a
23:55
comment that comment then goes out to a database so command handlers writing it
23:58
database so command handlers writing it
23:58
database so command handlers writing it off at the same time something else is
24:00
off at the same time something else is
24:00
off at the same time something else is saying hey publish this content for
24:02
saying hey publish this content for
24:02
saying hey publish this content for everyone to see so there are some
24:06
everyone to see so there are some
24:06
everyone to see so there are some advantages and disadvantages to this
24:09
advantages and disadvantages to this
24:09
advantages and disadvantages to this particular pattern it allows you to
24:14
particular pattern it allows you to
24:14
particular pattern it allows you to handle very complex applications again
24:17
handle very complex applications again
24:17
handle very complex applications again you go back to that ordering system
24:19
you go back to that ordering system
24:19
you go back to that ordering system where if you're doing a basic console
24:21
where if you're doing a basic console
24:21
where if you're doing a basic console app this is
24:22
app this is
24:22
app this is way overkill even some standard basic
24:27
way overkill even some standard basic
24:27
way overkill even some standard basic credit applications create read update
24:29
credit applications create read update
24:29
credit applications create read update the lien if you're not doing a lot of
24:31
the lien if you're not doing a lot of
24:31
the lien if you're not doing a lot of high-volume it doesn't really pay for
24:34
high-volume it doesn't really pay for
24:34
high-volume it doesn't really pay for this can dramatically improve
24:35
this can dramatically improve
24:35
this can dramatically improve performance especially if you're just
24:39
performance especially if you're just
24:39
performance especially if you're just farming out or shipping off some of that
24:42
farming out or shipping off some of that
24:42
farming out or shipping off some of that content to others to use it also makes
24:49
content to others to use it also makes
24:49
content to others to use it also makes security a lot easier and the way it
24:54
security a lot easier and the way it
24:54
security a lot easier and the way it does that is separating some of the
24:56
does that is separating some of the
24:56
does that is separating some of the concerns you have people that can query
24:58
concerns you have people that can query
24:58
concerns you have people that can query people that can write most people don't
25:01
people that can write most people don't
25:01
people that can write most people don't need write ability it's usually a system
25:03
need write ability it's usually a system
25:03
need write ability it's usually a system that needs to write ability but it also
25:06
that needs to write ability but it also
25:06
that needs to write ability but it also has some pretty big disadvantages can be
25:11
has some pretty big disadvantages can be
25:11
has some pretty big disadvantages can be overkill like I said for a basic crud
25:14
overkill like I said for a basic crud
25:14
overkill like I said for a basic crud application for those who don't know
25:16
application for those who don't know
25:16
application for those who don't know credit is create read update delete so
25:19
credit is create read update delete so
25:19
credit is create read update delete so your basic like contact application the
25:23
your basic like contact application the
25:23
your basic like contact application the data itself can run still so if you
25:27
data itself can run still so if you
25:27
data itself can run still so if you think about it if your system is not
25:29
think about it if your system is not
25:29
think about it if your system is not designed everything that appears on the
25:32
designed everything that appears on the
25:32
designed everything that appears on the left of this diagram the command side
25:35
left of this diagram the command side
25:35
left of this diagram the command side depending on how often it rights and
25:38
depending on how often it rights and
25:38
depending on how often it rights and that repository that darker blue is
25:40
that repository that darker blue is
25:40
that repository that darker blue is synchronizing with the event bus that
25:44
synchronizing with the event bus that
25:44
synchronizing with the event bus that data can become stale so you have to
25:46
data can become stale so you have to
25:46
data can become stale so you have to weigh those balances and how do you
25:51
weigh those balances and how do you
25:51
weigh those balances and how do you synchronize that data becomes a
25:54
synchronize that data becomes a
25:54
synchronize that data becomes a challenge you have to weigh the pros and
25:57
challenge you have to weigh the pros and
25:57
challenge you have to weigh the pros and cons of how often you want to
25:59
cons of how often you want to
25:59
cons of how often you want to synchronize it how quickly does that
26:02
synchronize it how quickly does that
26:02
synchronize it how quickly does that comment need to show up on the screen or
26:05
comment need to show up on the screen or
26:05
comment need to show up on the screen or how quickly doesn't need to be does it
26:07
how quickly doesn't need to be does it
26:07
how quickly doesn't need to be does it need to show up on some report
26:12
in the real world quote/unquote whatever
26:15
in the real world quote/unquote whatever
26:15
in the real world quote/unquote whatever that may be
26:17
that may be
26:17
that may be you see the event-driven or event
26:20
you see the event-driven or event
26:20
you see the event-driven or event sourcing in CQRS patterns combined a lot
26:24
sourcing in CQRS patterns combined a lot
26:24
sourcing in CQRS patterns combined a lot on this diagram you'll see on the left
26:27
on this diagram you'll see on the left
26:27
on this diagram you'll see on the left hand side where it says event store a
26:30
hand side where it says event store a
26:30
hand side where it says event store a lot of times I should have actually
26:33
lot of times I should have actually
26:33
lot of times I should have actually flipped this diagram over but from the
26:35
flipped this diagram over but from the
26:35
flipped this diagram over but from the bottom up this time you have our client
26:38
bottom up this time you have our client
26:38
bottom up this time you have our client sending requests and that request is
26:41
sending requests and that request is
26:41
sending requests and that request is going to the command handlers to
26:45
going to the command handlers to
26:45
going to the command handlers to generated so the event to created the
26:51
generated so the event to created the
26:51
generated so the event to created the command to create an order is going up
26:54
command to create an order is going up
26:54
command to create an order is going up on the left hand side their posit Oriya
26:57
on the left hand side their posit Oriya
26:57
on the left hand side their posit Oriya is then going off to the event bus
27:00
is then going off to the event bus
27:00
is then going off to the event bus similar to what i said earlier and then
27:04
similar to what i said earlier and then
27:04
similar to what i said earlier and then those different events are triggering
27:07
those different events are triggering
27:07
those different events are triggering the storage of those where another user
27:10
the storage of those where another user
27:10
the storage of those where another user can come and query out those items so
27:15
can come and query out those items so
27:15
can come and query out those items so you'll see this pattern mixed a lot
27:19
you'll see this pattern mixed a lot
27:19
you'll see this pattern mixed a lot interchangeably next pattern up we
27:23
interchangeably next pattern up we
27:23
interchangeably next pattern up we talked about is the plugin or you know
27:27
talked about is the plugin or you know
27:27
talked about is the plugin or you know after you doing the operating systems
27:29
after you doing the operating systems
27:29
after you doing the operating systems the microkernel approach think of the
27:32
the microkernel approach think of the
27:32
the microkernel approach think of the plugin approach as you build out your
27:34
plugin approach as you build out your
27:34
plugin approach as you build out your application this Center ball and your
27:38
application this Center ball and your
27:38
application this Center ball and your application has multiple pieces that
27:41
application has multiple pieces that
27:41
application has multiple pieces that plug into it or a part of it you have an
27:44
plug into it or a part of it you have an
27:44
plug into it or a part of it you have an order component you have an account
27:45
order component you have an account
27:45
order component you have an account component an inventory component and a
27:49
component an inventory component and a
27:49
component an inventory component and a shipping component it goes towards in
27:52
shipping component it goes towards in
27:52
shipping component it goes towards in these example with the join the group
27:56
these example with the join the group
27:56
these example with the join the group there are four different things a group
27:58
there are four different things a group
27:58
there are four different things a group he essentially created plug-ins for each
28:00
he essentially created plug-ins for each
28:00
he essentially created plug-ins for each of us but this plug-in is a little bit
28:03
of us but this plug-in is a little bit
28:03
of us but this plug-in is a little bit different this one is actually adding in
28:08
different this one is actually adding in
28:08
different this one is actually adding in individual pieces so if you use
28:11
individual pieces so if you use
28:11
individual pieces so if you use Microsoft Outlook or teens or most major
28:19
Microsoft Outlook or teens or most major
28:19
Microsoft Outlook or teens or most major applications have some kind of plug-in
28:22
applications have some kind of plug-in
28:22
applications have some kind of plug-in infrastructure to it to add in the
28:25
infrastructure to it to add in the
28:25
infrastructure to it to add in the latest gifts
28:26
latest gifts
28:26
latest gifts if you'd have slack you have the ability
28:28
if you'd have slack you have the ability
28:28
if you'd have slack you have the ability to add in something from jiffy you have
28:31
to add in something from jiffy you have
28:31
to add in something from jiffy you have the ability to add in your get
28:34
the ability to add in your get
28:34
the ability to add in your get notifications via plugins this is a very
28:37
notifications via plugins this is a very
28:37
notifications via plugins this is a very common pattern when you are building an
28:42
common pattern when you are building an
28:42
common pattern when you are building an application that you are selling think
28:44
application that you are selling think
28:44
application that you are selling think of Visual Studio for that matter of
28:47
of Visual Studio for that matter of
28:47
of Visual Studio for that matter of Visual Studio is one gigantic plug-in
28:50
Visual Studio is one gigantic plug-in
28:50
Visual Studio is one gigantic plug-in container every little facet of Visual
28:53
container every little facet of Visual
28:53
container every little facet of Visual Studio from the solution Explorer to the
28:56
Studio from the solution Explorer to the
28:56
Studio from the solution Explorer to the git integration is a plugin there's a
28:59
git integration is a plugin there's a
28:59
git integration is a plugin there's a reason why it's a 5 minute or 5 gig
29:02
reason why it's a 5 minute or 5 gig
29:02
reason why it's a 5 minute or 5 gig download because it's downloading
29:04
download because it's downloading
29:04
download because it's downloading thousands of plugins to go across one of
29:10
thousands of plugins to go across one of
29:10
thousands of plugins to go across one of the biggest plug-in ecosystems that use
29:12
the biggest plug-in ecosystems that use
29:12
the biggest plug-in ecosystems that use on a daily basis is the operating system
29:15
on a daily basis is the operating system
29:15
on a daily basis is the operating system the operating system is not just one
29:18
the operating system is not just one
29:18
the operating system is not just one gigantic codebase but one small code
29:24
gigantic codebase but one small code
29:24
gigantic codebase but one small code base that runs multiple plugins all
29:28
base that runs multiple plugins all
29:28
base that runs multiple plugins all throughout you have your device your
29:31
throughout you have your device your
29:31
throughout you have your device your individual devices each device is a
29:34
individual devices each device is a
29:34
individual devices each device is a plug-in or an adapter into it another
29:38
plug-in or an adapter into it another
29:38
plug-in or an adapter into it another common example for this is a task
29:40
common example for this is a task
29:40
common example for this is a task scheduler you want to every hour you
29:45
scheduler you want to every hour you
29:45
scheduler you want to every hour you want to run this particular thing well
29:49
want to run this particular thing well
29:49
want to run this particular thing well that particular thing is a plug-in
29:52
that particular thing is a plug-in
29:52
that particular thing is a plug-in things like as your flow or Microsoft
29:55
things like as your flow or Microsoft
29:55
things like as your flow or Microsoft Office flow help you with that and
29:58
Office flow help you with that and
29:58
Office flow help you with that and lenders help you with that a lot too so
30:02
lenders help you with that a lot too so
30:02
lenders help you with that a lot too so plugins are generally used when you are
30:06
plugins are generally used when you are
30:06
plugins are generally used when you are building an application that you want to
30:08
building an application that you want to
30:08
building an application that you want to have extended and usually extended by
30:13
have extended and usually extended by
30:13
have extended and usually extended by someone that does not have access to the
30:16
someone that does not have access to the
30:16
someone that does not have access to the code base meaning I'm publishing this
30:19
code base meaning I'm publishing this
30:19
code base meaning I'm publishing this out for a third-party use like Visual
30:21
out for a third-party use like Visual
30:21
out for a third-party use like Visual Studio and then others can improve it
30:24
Studio and then others can improve it
30:24
Studio and then others can improve it whereas when you're writing how stuff
30:27
whereas when you're writing how stuff
30:27
whereas when you're writing how stuff in-house you typically don't use the
30:30
in-house you typically don't use the
30:30
in-house you typically don't use the plug-in pattern because you can modify
30:33
plug-in pattern because you can modify
30:33
plug-in pattern because you can modify the code but if you know things are
30:36
the code but if you know things are
30:36
the code but if you know things are going to be changing plug-in pattern
30:39
going to be changing plug-in pattern
30:39
going to be changing plug-in pattern works really well for you to be able to
30:41
works really well for you to be able to
30:41
works really well for you to be able to provide certain functionality your
30:43
provide certain functionality your
30:43
provide certain functionality your system across the board so like maybe an
30:47
system across the board so like maybe an
30:47
system across the board so like maybe an admin module that you can plug in and it
30:49
admin module that you can plug in and it
30:49
admin module that you can plug in and it gives you different rights in the screen
30:51
gives you different rights in the screen
30:52
gives you different rights in the screen those are different ways to use the
30:56
those are different ways to use the
30:56
those are different ways to use the plug-in pattern we're going to step into
30:59
plug-in pattern we're going to step into
30:59
plug-in pattern we're going to step into probably to the most common modern
31:03
probably to the most common modern
31:03
probably to the most common modern plugins or common modern patterns that
31:07
plugins or common modern patterns that
31:07
plugins or common modern patterns that we use first one is the service-oriented
31:11
we use first one is the service-oriented
31:11
we use first one is the service-oriented pattern aka Sowa aka micro services aka
31:16
pattern aka Sowa aka micro services aka
31:16
pattern aka Sowa aka micro services aka any new buzzword in the last 5-10 years
31:22
any new buzzword in the last 5-10 years
31:22
any new buzzword in the last 5-10 years the concept behind service-oriented
31:25
the concept behind service-oriented
31:25
the concept behind service-oriented architectures just that it's service
31:27
architectures just that it's service
31:27
architectures just that it's service granted so if you take our inventory or
31:31
granted so if you take our inventory or
31:31
granted so if you take our inventory or our ordering system that we've been
31:33
our ordering system that we've been
31:33
our ordering system that we've been talking about you have this listed as
31:36
talking about you have this listed as
31:36
talking about you have this listed as acne widgets acne widgets has the
31:39
acne widgets acne widgets has the
31:39
acne widgets acne widgets has the ability to provide off those services it
31:45
ability to provide off those services it
31:45
ability to provide off those services it has an account service an inventory of
31:47
has an account service an inventory of
31:47
has an account service an inventory of services shipping service and order
31:49
services shipping service and order
31:49
services shipping service and order service these are total of four
31:53
service these are total of four
31:53
service these are total of four different services they're all
31:55
different services they're all
31:55
different services they're all independent from each other they don't
31:58
independent from each other they don't
31:58
independent from each other they don't know about the next service and then the
32:01
know about the next service and then the
32:01
know about the next service and then the acne widget says well when I need to
32:03
acne widget says well when I need to
32:04
acne widget says well when I need to place an order I need to go and call the
32:06
place an order I need to go and call the
32:06
place an order I need to go and call the account service to see if the person is
32:08
account service to see if the person is
32:08
account service to see if the person is in good standing if I can't charge the
32:10
in good standing if I can't charge the
32:10
in good standing if I can't charge the account then I need to go and call the
32:13
account then I need to go and call the
32:13
account then I need to go and call the inventory service to see if they have
32:17
inventory service to see if they have
32:17
inventory service to see if they have any of the products in shop once they do
32:19
any of the products in shop once they do
32:19
any of the products in shop once they do I then need to call the shipping service
32:22
I then need to call the shipping service
32:22
I then need to call the shipping service say ok go and ship these items now that
32:26
say ok go and ship these items now that
32:26
say ok go and ship these items now that it's there I can update the order by
32:29
it's there I can update the order by
32:29
it's there I can update the order by calling the order services yes your
32:32
calling the order services yes your
32:32
calling the order services yes your order is there and ready to go so what
32:36
order is there and ready to go so what
32:36
order is there and ready to go so what makes this pattern so it appealing is
32:39
makes this pattern so it appealing is
32:39
makes this pattern so it appealing is that each of these small pieces are not
32:43
that each of these small pieces are not
32:43
that each of these small pieces are not necessarily small in this particular
32:45
necessarily small in this particular
32:45
necessarily small in this particular example you small each of these are
32:48
example you small each of these are
32:48
example you small each of these are independent services and capable
32:51
independent services and capable
32:51
independent services and capable these that allow you to segregate out
32:55
these that allow you to segregate out
32:55
these that allow you to segregate out the responsibilities I just want to do
33:00
the responsibilities I just want to do
33:00
the responsibilities I just want to do account servicing I want to be able own
33:02
account servicing I want to be able own
33:02
account servicing I want to be able own check up who a person is charge cards
33:05
check up who a person is charge cards
33:05
check up who a person is charge cards for them generate reports on that
33:09
for them generate reports on that
33:09
for them generate reports on that particular person the inventory service
33:11
particular person the inventory service
33:11
particular person the inventory service is just responsible for removing items
33:15
is just responsible for removing items
33:15
is just responsible for removing items from inventory checking the stock
33:17
from inventory checking the stock
33:17
from inventory checking the stock amendment very validating whether
33:19
amendment very validating whether
33:19
amendment very validating whether something is there or not same thing
33:21
something is there or not same thing
33:21
something is there or not same thing with the shipping service so now we're
33:23
with the shipping service so now we're
33:23
with the shipping service so now we're starting to peel apart an application in
33:28
starting to peel apart an application in
33:28
starting to peel apart an application in order to make the smaller more
33:32
order to make the smaller more
33:32
order to make the smaller more fine-grained
33:34
fine-grained
33:34
fine-grained implementation details around it so how
33:37
implementation details around it so how
33:37
implementation details around it so how we go about creating an account service
33:41
we go about creating an account service
33:41
we go about creating an account service this allows you to also start breaking
33:44
this allows you to also start breaking
33:44
this allows you to also start breaking down your application but also breaking
33:47
down your application but also breaking
33:47
down your application but also breaking down your teams I work for a very large
33:50
down your teams I work for a very large
33:50
down your teams I work for a very large mortgage company and it works very large
33:53
mortgage company and it works very large
33:53
mortgage company and it works very large insurance company I'm sure there is not
33:55
insurance company I'm sure there is not
33:55
insurance company I'm sure there is not one developer that knows the entire
33:58
one developer that knows the entire
33:58
one developer that knows the entire ecosystem of everything that happens
34:01
ecosystem of everything that happens
34:01
ecosystem of everything that happens this allows us to create specialties or
34:06
this allows us to create specialties or
34:06
this allows us to create specialties or sub teams within an overall larger team
34:10
sub teams within an overall larger team
34:10
sub teams within an overall larger team to break down applications and have a
34:14
to break down applications and have a
34:14
to break down applications and have a single responsibility within our
34:17
single responsibility within our
34:17
single responsibility within our organization we're not giving you a lot
34:19
organization we're not giving you a lot
34:19
organization we're not giving you a lot of details into how we're broken up we
34:22
of details into how we're broken up we
34:22
of details into how we're broken up we follow something called a release train
34:24
follow something called a release train
34:24
follow something called a release train model which is very similar to
34:26
model which is very similar to
34:26
model which is very similar to service-oriented we took our technology
34:29
service-oriented we took our technology
34:29
service-oriented we took our technology team and split it up we have 2,400
34:34
team and split it up we have 2,400
34:34
team and split it up we have 2,400 people in technology and we split them
34:37
people in technology and we split them
34:37
people in technology and we split them up based on based on how they do things
34:41
up based on based on how they do things
34:41
up based on based on how they do things so most organizations you have a
34:43
so most organizations you have a
34:43
so most organizations you have a security team you have a support team
34:47
security team you have a support team
34:47
security team you have a support team you have an engineering team and so on
34:52
you have an engineering team and so on
34:52
you have an engineering team and so on and so forth we have that separation but
34:55
and so forth we have that separation but
34:55
and so forth we have that separation but then even inside of that for our
34:58
then even inside of that for our
34:58
then even inside of that for our engineering team we split up our
35:00
engineering team we split up our
35:00
engineering team we split up our engineering team into 42 sub teams that
35:03
engineering team into 42 sub teams that
35:03
engineering team into 42 sub teams that allows us
35:04
allows us
35:05
allows us to really specialize on something like I
35:08
to really specialize on something like I
35:08
to really specialize on something like I focus my team on everything that are
35:11
focus my team on everything that are
35:11
focus my team on everything that are related to fees other teams are focused
35:15
related to fees other teams are focused
35:15
related to fees other teams are focused on just the documentation how we provide
35:18
on just the documentation how we provide
35:18
on just the documentation how we provide documents or clients other teams are
35:20
documents or clients other teams are
35:20
documents or clients other teams are focused on the user interface so not
35:24
focused on the user interface so not
35:24
focused on the user interface so not only can you do service oriented within
35:26
only can you do service oriented within
35:26
only can you do service oriented within software but it's also possible within
35:29
software but it's also possible within
35:29
software but it's also possible within an organization and if we think about it
35:31
an organization and if we think about it
35:31
an organization and if we think about it your house is very service orientated
35:34
your house is very service orientated
35:34
your house is very service orientated you have a group that manages the water
35:38
you have a group that manages the water
35:38
you have a group that manages the water for your house or Leeson in Arizona and
35:41
for your house or Leeson in Arizona and
35:41
for your house or Leeson in Arizona and most of the u.s. you do you have a
35:43
most of the u.s. you do you have a
35:43
most of the u.s. you do you have a separate group that does handles your
35:47
separate group that does handles your
35:47
separate group that does handles your electricity a separate group that
35:49
electricity a separate group that
35:49
electricity a separate group that handles property tax is a separate group
35:51
handles property tax is a separate group
35:51
handles property tax is a separate group that handles utilities like gas and
35:56
that handles utilities like gas and
35:56
that handles utilities like gas and electric so we've broken out you know
35:59
electric so we've broken out you know
35:59
electric so we've broken out you know the world sort of speaking
36:00
the world sort of speaking
36:00
the world sort of speaking service-oriented so it's super common to
36:03
service-oriented so it's super common to
36:03
service-oriented so it's super common to see that in software nowadays and things
36:09
see that in software nowadays and things
36:09
see that in software nowadays and things like measure and AWS and Google cloud
36:13
like measure and AWS and Google cloud
36:13
like measure and AWS and Google cloud make it really easy for us to do speak
36:18
make it really easy for us to do speak
36:18
make it really easy for us to do speak and advise your Google Cloud and AWS
36:22
and advise your Google Cloud and AWS
36:22
and advise your Google Cloud and AWS brings us up to our next pattern which
36:26
brings us up to our next pattern which
36:26
brings us up to our next pattern which is all the buzz right now serverless aka
36:30
is all the buzz right now serverless aka
36:30
is all the buzz right now serverless aka the cloud aka not on my PC and I think
36:36
the cloud aka not on my PC and I think
36:36
the cloud aka not on my PC and I think then not on my PC is really the
36:39
then not on my PC is really the
36:40
then not on my PC is really the important part of this overall concept
36:44
important part of this overall concept
36:44
important part of this overall concept and the idea is that this is running on
36:49
and the idea is that this is running on
36:50
and the idea is that this is running on someone else's machine not the admin for
36:53
someone else's machine not the admin for
36:53
someone else's machine not the admin for the CEO not hopefully underneath your
36:56
the CEO not hopefully underneath your
36:56
the CEO not hopefully underneath your desk which has happened in the past but
36:59
desk which has happened in the past but
36:59
desk which has happened in the past but there's someone else managing the server
37:02
there's someone else managing the server
37:02
there's someone else managing the server and a lot of organizations you have a
37:05
and a lot of organizations you have a
37:05
and a lot of organizations you have a data center that's very common with
37:07
data center that's very common with
37:07
data center that's very common with Cerberus where it's it's there and
37:10
Cerberus where it's it's there and
37:10
Cerberus where it's it's there and someone else is taking the load of
37:13
someone else is taking the load of
37:13
someone else is taking the load of managing the operating system updates
37:15
managing the operating system updates
37:15
managing the operating system updates security patches making sure their
37:17
security patches making sure their
37:17
security patches making sure their network
37:18
network
37:18
network balls are there etc etc this takes it
37:21
balls are there etc etc this takes it
37:21
balls are there etc etc this takes it one step further so with the concept of
37:24
one step further so with the concept of
37:24
one step further so with the concept of serverless you'll hear things like
37:26
serverless you'll hear things like
37:26
serverless you'll hear things like function as a service software service
37:30
function as a service software service
37:30
function as a service software service etc it really not servers themselves
37:35
etc it really not servers themselves
37:35
etc it really not servers themselves there many processes if you think about
37:38
there many processes if you think about
37:38
there many processes if you think about the service oriented these are
37:40
the service oriented these are
37:40
the service oriented these are individual entities that we have listed
37:43
individual entities that we have listed
37:43
individual entities that we have listed in the service world these are
37:46
in the service world these are
37:46
in the service world these are individual functional programs that are
37:49
individual functional programs that are
37:49
individual functional programs that are running in the AWS world they have land
37:52
running in the AWS world they have land
37:52
running in the AWS world they have land as Google has cloud functions Amazon
37:55
as Google has cloud functions Amazon
37:55
as Google has cloud functions Amazon Kura has your has has your functions
37:58
Kura has your has has your functions
37:58
Kura has your has has your functions these are code sections of code that are
38:02
these are code sections of code that are
38:02
these are code sections of code that are running and just running one thing and
38:04
running and just running one thing and
38:04
running and just running one thing and one thing not only so if you think about
38:07
one thing not only so if you think about
38:07
one thing not only so if you think about Andy's example where he did validation
38:10
Andy's example where he did validation
38:10
Andy's example where he did validation have one little thing running validation
38:12
have one little thing running validation
38:12
have one little thing running validation one thing running emails one thing
38:15
one thing running emails one thing
38:15
one thing running emails one thing running notifications this is where the
38:18
running notifications this is where the
38:18
running notifications this is where the server list comes in to breaking out
38:21
server list comes in to breaking out
38:21
server list comes in to breaking out your application into smaller individual
38:24
your application into smaller individual
38:24
your application into smaller individual pieces so that they can they can handle
38:31
pieces so that they can they can handle
38:31
pieces so that they can they can handle the load and it takes it out of your
38:33
the load and it takes it out of your
38:33
the load and it takes it out of your application this requires a lot of a lot
38:38
application this requires a lot of a lot
38:38
application this requires a lot of a lot of for thinking about how you're gonna
38:41
of for thinking about how you're gonna
38:41
of for thinking about how you're gonna do it if you think about going back to
38:45
do it if you think about going back to
38:45
do it if you think about going back to here each of these different services
38:48
here each of these different services
38:48
here each of these different services can be their own service implementation
38:52
can be their own service implementation
38:52
can be their own service implementation you can have an account service endpoint
38:54
you can have an account service endpoint
38:54
you can have an account service endpoint that is serverless meaning it's just
38:57
that is serverless meaning it's just
38:57
that is serverless meaning it's just running in alanda to handle the request
39:00
running in alanda to handle the request
39:00
running in alanda to handle the request and then the back-end goes through and
39:03
and then the back-end goes through and
39:03
and then the back-end goes through and handles everything else so with that
39:11
handles everything else so with that
39:11
handles everything else so with that being said a lot of these patterns are
39:15
being said a lot of these patterns are
39:15
being said a lot of these patterns are here to help guide us in software
39:20
here to help guide us in software
39:20
here to help guide us in software development kind of help us rebuild
39:23
development kind of help us rebuild
39:23
development kind of help us rebuild things in a repeatable way so that we
39:27
things in a repeatable way so that we
39:27
things in a repeatable way so that we are not reinventing
39:29
are not reinventing
39:29
are not reinventing we always like I said earlier but with
39:34
we always like I said earlier but with
39:34
we always like I said earlier but with that in mind you look at your toolbox
39:36
that in mind you look at your toolbox
39:36
that in mind you look at your toolbox and there's a age-old saying in the
39:42
and there's a age-old saying in the
39:42
and there's a age-old saying in the software industry if the only tool you
39:45
software industry if the only tool you
39:45
software industry if the only tool you have is a hammer you tend to see
39:48
have is a hammer you tend to see
39:48
have is a hammer you tend to see everything as a nail so the reason why I
39:52
everything as a nail so the reason why I
39:52
everything as a nail so the reason why I gave you I think it's 12 different
39:55
gave you I think it's 12 different
39:55
gave you I think it's 12 different patterns here is there isn't a
39:58
patterns here is there isn't a
39:58
patterns here is there isn't a one-size-fits-all with software patterns
40:01
one-size-fits-all with software patterns
40:01
one-size-fits-all with software patterns just like there isn't a
40:03
just like there isn't a
40:03
just like there isn't a one-size-fits-all for principals you
40:05
one-size-fits-all for principals you
40:05
one-size-fits-all for principals you have to do the collection of it
40:06
have to do the collection of it
40:06
have to do the collection of it sometimes your application might make
40:09
sometimes your application might make
40:09
sometimes your application might make sense to just be model views but other
40:12
sense to just be model views but other
40:12
sense to just be model views but other times if the CQRS pattern might make
40:16
times if the CQRS pattern might make
40:16
times if the CQRS pattern might make sense the understanding is to create
40:19
sense the understanding is to create
40:19
sense the understanding is to create something other or sorry put in your
40:22
something other or sorry put in your
40:22
something other or sorry put in your toolbox something other than that no
40:25
toolbox something other than that no
40:25
toolbox something other than that no screwdriver in there this song there put
40:28
screwdriver in there this song there put
40:28
screwdriver in there this song there put a wrench in there put all these
40:31
a wrench in there put all these
40:31
a wrench in there put all these different design patterns and I know I
40:33
different design patterns and I know I
40:33
different design patterns and I know I described them in five minutes or less
40:35
described them in five minutes or less
40:35
described them in five minutes or less in most cases but it's a good starting
40:39
in most cases but it's a good starting
40:39
in most cases but it's a good starting point for you to understand what you
40:42
point for you to understand what you
40:42
point for you to understand what you have across the board to see how you can
40:47
have across the board to see how you can
40:47
have across the board to see how you can use and what makes sense to apply to
40:50
use and what makes sense to apply to
40:50
use and what makes sense to apply to solve your problem because if you think
40:53
solve your problem because if you think
40:53
solve your problem because if you think about it hammering in a nail the hammer
40:57
about it hammering in a nail the hammer
40:57
about it hammering in a nail the hammer is a solution that a problem with is you
41:00
is a solution that a problem with is you
41:00
is a solution that a problem with is you don't really want to push that nail in
41:02
don't really want to push that nail in
41:02
don't really want to push that nail in with your finger but having the right
41:04
with your finger but having the right
41:04
with your finger but having the right tools in front of you helps you to solve
41:09
tools in front of you helps you to solve
41:09
tools in front of you helps you to solve the problem of what software is trying
41:11
the problem of what software is trying
41:11
the problem of what software is trying to solve which is typically a problem
41:15
to solve which is typically a problem
41:15
to solve which is typically a problem that being said I am ready for questions
41:20
that being said I am ready for questions
41:20
that being said I am ready for questions and I don't know if we are doing
41:21
and I don't know if we are doing
41:21
and I don't know if we are doing questions or saving them for the end so
41:25
questions or saving them for the end so
41:25
questions or saving them for the end so let me pull up my screen I see one in
41:30
let me pull up my screen I see one in
41:30
let me pull up my screen I see one in there from a tool I should probably hide
41:35
there from a tool I should probably hide
41:35
there from a tool I should probably hide that and no one cares that I've bill pay
41:37
that and no one cares that I've bill pay
41:37
that and no one cares that I've bill pay today or tomorrow
41:41
let's pull up this slide how does mvvm
41:45
let's pull up this slide how does mvvm
41:45
let's pull up this slide how does mvvm compare to convey see I'll leave all
41:49
compare to convey see I'll leave all
41:49
compare to convey see I'll leave all this up here so we can see since that
41:53
this up here so we can see since that
41:53
this up here so we can see since that one was brought up I'll bring up this
41:54
one was brought up I'll bring up this
41:54
one was brought up I'll bring up this slide to kind of show it I don't know I
42:01
slide to kind of show it I don't know I
42:01
slide to kind of show it I don't know I have two slide decks but essentially
42:03
have two slide decks but essentially
42:03
have two slide decks but essentially mvvm and MBC are very similar the only
42:08
mvvm and MBC are very similar the only
42:08
mvvm and MBC are very similar the only details are really different is the
42:10
details are really different is the
42:10
details are really different is the controller part and the view model part
42:14
controller part and the view model part
42:14
controller part and the view model part mvvm is used a lot in systems that are
42:20
mvvm is used a lot in systems that are
42:20
mvvm is used a lot in systems that are self-contained and what I mean by
42:22
self-contained and what I mean by
42:22
self-contained and what I mean by self-contained they're typically things
42:24
self-contained they're typically things
42:24
self-contained they're typically things like phones or when you're concentrating
42:28
like phones or when you're concentrating
42:28
like phones or when you're concentrating mostly on the user interface where the
42:32
mostly on the user interface where the
42:32
mostly on the user interface where the model-view-controller portion is usually
42:36
model-view-controller portion is usually
42:36
model-view-controller portion is usually done for applications that are spread
42:43
done for applications that are spread
42:43
done for applications that are spread out where you want to have different
42:48
out where you want to have different
42:48
out where you want to have different things about it so one way I like to
42:50
things about it so one way I like to
42:50
things about it so one way I like to look at it is the mvvm model could be
42:54
look at it is the mvvm model could be
42:54
look at it is the mvvm model could be used for building out the mobile app so
42:58
used for building out the mobile app so
42:58
used for building out the mobile app so if we go back to our car ordering
43:00
if we go back to our car ordering
43:00
if we go back to our car ordering application we might have a mobile app
43:04
application we might have a mobile app
43:04
application we might have a mobile app so Amazon has a map that works on an
43:09
so Amazon has a map that works on an
43:09
so Amazon has a map that works on an Android and an iOS device inside that
43:12
Android and an iOS device inside that
43:12
Android and an iOS device inside that application they're probably following
43:13
application they're probably following
43:13
application they're probably following the MVVM pattern where the view model is
43:16
the MVVM pattern where the view model is
43:16
the MVVM pattern where the view model is going out and pulling the data back from
43:20
going out and pulling the data back from
43:20
going out and pulling the data back from the physical back-end repository where
43:26
the physical back-end repository where
43:26
the physical back-end repository where that back in repository is the Model
43:31
that back in repository is the Model
43:31
that back in repository is the Model View controller which is saying okay I'm
43:33
View controller which is saying okay I'm
43:33
View controller which is saying okay I'm going out I'm going out getting that
43:36
going out I'm going out getting that
43:36
going out I'm going out getting that service and I'm going to return this
43:40
service and I'm going to return this
43:40
service and I'm going to return this model via a view to the mobile
43:45
model via a view to the mobile
43:45
model via a view to the mobile application but that same view can also
43:48
application but that same view can also
43:48
application but that same view can also be done on the
43:51
be done on the
43:51
be done on the web application for if you're in a
43:54
web application for if you're in a
43:54
web application for if you're in a browser or not I think there was another
43:59
browser or not I think there was another
43:59
browser or not I think there was another question around that's in the show is it
44:05
question around that's in the show is it
44:05
question around that's in the show is it necessary to have domain driven design
44:08
necessary to have domain driven design
44:08
necessary to have domain driven design for CQRS and securest be applied to
44:12
for CQRS and securest be applied to
44:12
for CQRS and securest be applied to simple three layered application can I
44:14
simple three layered application can I
44:14
simple three layered application can I apply event sourcing to my three layered
44:18
apply event sourcing to my three layered
44:18
apply event sourcing to my three layered application wow that was a lot of
44:21
application wow that was a lot of
44:21
application wow that was a lot of questions all in one question the
44:24
questions all in one question the
44:24
questions all in one question the nutshell is yes again like I said a lot
44:27
nutshell is yes again like I said a lot
44:27
nutshell is yes again like I said a lot of these are individual patterns and
44:31
of these are individual patterns and
44:31
of these are individual patterns and preferences they're not hardcore
44:33
preferences they're not hardcore
44:33
preferences they're not hardcore solutions so if you look at the example
44:36
solutions so if you look at the example
44:36
solutions so if you look at the example I I gave originally within order
44:39
I I gave originally within order
44:39
I I gave originally within order especially with cqs you can say that I
44:43
especially with cqs you can say that I
44:43
especially with cqs you can say that I want my events to trigger a certain
44:50
want my events to trigger a certain
44:50
want my events to trigger a certain action so we looked here we have a
44:58
action so we looked here we have a
44:58
action so we looked here we have a indication that our orders placed is the
45:03
indication that our orders placed is the
45:03
indication that our orders placed is the actual event then it goes back out to do
45:07
actual event then it goes back out to do
45:07
actual event then it goes back out to do it so when we are calling here we see
45:11
it so when we are calling here we see
45:11
it so when we are calling here we see our user interface can set a command to
45:15
our user interface can set a command to
45:15
our user interface can set a command to go and call the command handlers and go
45:19
go and call the command handlers and go
45:19
go and call the command handlers and go all the way down while still keeping
45:21
all the way down while still keeping
45:21
all the way down while still keeping this out so from the three-tiered spot
45:24
this out so from the three-tiered spot
45:24
this out so from the three-tiered spot if you look at this diagram here
45:27
if you look at this diagram here
45:27
if you look at this diagram here everything in yellow is the Tier one or
45:31
everything in yellow is the Tier one or
45:31
everything in yellow is the Tier one or the first layer the presentation layer
45:33
the first layer the presentation layer
45:33
the first layer the presentation layer everything from the command command
45:36
everything from the command command
45:36
everything from the command command handler domain is the middle tier or the
45:42
handler domain is the middle tier or the
45:42
handler domain is the middle tier or the logic layer business layer service layer
45:44
logic layer business layer service layer
45:44
logic layer business layer service layer whatever your term is and then the last
45:47
whatever your term is and then the last
45:47
whatever your term is and then the last is the repository layer and this uses
45:51
is the repository layer and this uses
45:51
is the repository layer and this uses events all together so like I was saying
45:55
events all together so like I was saying
45:55
events all together so like I was saying and not every hammer not every nail
45:58
and not every hammer not every nail
45:58
and not every hammer not every nail needs a hammer you can actually mix and
46:02
needs a hammer you can actually mix and
46:02
needs a hammer you can actually mix and match
46:03
match
46:03
match these patterns you also ask the question
46:08
these patterns you also ask the question
46:08
these patterns you also ask the question of how so is different from
46:10
of how so is different from
46:10
of how so is different from microservices they're interchangeable
46:14
microservices they're interchangeable
46:14
microservices they're interchangeable micro-services is just trying to get it
46:17
micro-services is just trying to get it
46:17
micro-services is just trying to get it to a lot smaller content within your
46:21
to a lot smaller content within your
46:21
to a lot smaller content within your application and I see Magnus yes we ever
46:27
application and I see Magnus yes we ever
46:27
application and I see Magnus yes we ever had you you continued your questions
46:29
had you you continued your questions
46:29
had you you continued your questions yeah go ahead got my questions there be
46:32
yeah go ahead got my questions there be
46:32
yeah go ahead got my questions there be user questions a lot of questions
46:36
user questions a lot of questions
46:36
user questions a lot of questions because you you put so much so many
46:39
because you you put so much so many
46:39
because you you put so much so many patterns in there that a lot of people
46:42
patterns in there that a lot of people
46:42
patterns in there that a lot of people with crazy on the questions which is
46:44
with crazy on the questions which is
46:44
with crazy on the questions which is that's a good thing we can yeah when I
46:48
that's a good thing we can yeah when I
46:48
that's a good thing we can yeah when I went to a full screen with PowerPoint I
46:51
went to a full screen with PowerPoint I
46:51
went to a full screen with PowerPoint I lost all the questions so I couldn't see
46:54
lost all the questions so I couldn't see
46:54
lost all the questions so I couldn't see them all of course ya know we we could
46:57
them all of course ya know we we could
46:57
them all of course ya know we we could I'm sure we could spend a couple of more
46:59
I'm sure we could spend a couple of more
46:59
I'm sure we could spend a couple of more hours just talking with hashing this out
47:01
hours just talking with hashing this out
47:02
hours just talking with hashing this out and endlessly we need we need some for
47:06
and endlessly we need we need some for
47:06
and endlessly we need we need some for my beverage to do that I'm sure apply
47:11
my beverage to do that I'm sure apply
47:11
my beverage to do that I'm sure apply the adventure and pattern and domain
47:13
the adventure and pattern and domain
47:13
the adventure and pattern and domain driven design yeah I think I just
47:15
driven design yeah I think I just
47:15
driven design yeah I think I just answered that with the last question
47:18
answered that with the last question
47:18
answered that with the last question yeah we'll put these slides up on it one
47:23
yeah we'll put these slides up on it one
47:23
yeah we'll put these slides up on it one more question up UK arc that's you I
47:30
more question up UK arc that's you I
47:30
more question up UK arc that's you I hate that C game RS query here is only
47:35
hate that C game RS query here is only
47:35
hate that C game RS query here is only for fetching information or can it post
47:37
for fetching information or can it post
47:37
for fetching information or can it post data as well you typically don't want a
47:40
data as well you typically don't want a
47:40
data as well you typically don't want a Paris post that's why it's command query
47:44
Paris post that's why it's command query
47:44
Paris post that's why it's command query and read is the power part of it that's
47:47
and read is the power part of it that's
47:47
and read is the power part of it that's usually only for the query if you want
47:50
usually only for the query if you want
47:50
usually only for the query if you want to post any data usually should have a
47:52
to post any data usually should have a
47:52
to post any data usually should have a command for that sort of property events
47:54
command for that sort of property events
47:54
command for that sort of property events can fire throughout and I will post
47:59
can fire throughout and I will post
47:59
can fire throughout and I will post these on my blog at some point and
48:01
these on my blog at some point and
48:01
these on my blog at some point and they'll be in the github repo a very
48:04
they'll be in the github repo a very
48:04
they'll be in the github repo a very interesting technique in the scenario
48:07
interesting technique in the scenario
48:07
interesting technique in the scenario where it applies it can do a lot of a
48:10
where it applies it can do a lot of a
48:10
where it applies it can do a lot of a lot of fun things you really help you
48:13
lot of fun things you really help you
48:13
lot of fun things you really help you scale your application and so forth
48:14
scale your application and so forth
48:14
scale your application and so forth using that particular pattern
48:16
using that particular pattern
48:16
using that particular pattern yep and so yeah so much for being with
48:22
yep and so yeah so much for being with
48:22
yep and so yeah so much for being with us that was that was a lot to take in
48:24
us that was that was a lot to take in
48:24
us that was that was a lot to take in and that's the intent because there is
48:27
and that's the intent because there is
48:27
and that's the intent because there is so much to uncover in this in this field
48:29
so much to uncover in this in this field
48:29
so much to uncover in this in this field and I I saw from people in the questions
48:32
and I I saw from people in the questions
48:32
and I I saw from people in the questions that they were like wide-eyed that
48:34
that they were like wide-eyed that
48:34
that they were like wide-eyed that doe-eyed people listening to you I hope
48:38
doe-eyed people listening to you I hope
48:38
doe-eyed people listening to you I hope yeah no it's great
48:40
yeah no it's great
48:40
yeah no it's great you're gonna stick around for the pan a
48:42
you're gonna stick around for the pan a
48:42
you're gonna stick around for the pan a little bit uh yeah I'll be watching I
48:45
little bit uh yeah I'll be watching I
48:45
little bit uh yeah I'll be watching I mean - yeah well we're gonna continue
48:48
mean - yeah well we're gonna continue
48:48
mean - yeah well we're gonna continue we're gonna squeeze in one more topic
48:50
we're gonna squeeze in one more topic
48:50
we're gonna squeeze in one more topic before the panel and so now we're off to
48:53
before the panel and so now we're off to
48:53
before the panel and so now we're off to Cloudland
#Programming
#Windows & .NET


