Join us on June 26 with Steve "ardalis" Smith on Rockin' The Code World with dotNetDave - a weekly show to learn & live Q&A on .NET and other programming technologies.
AGENDA
• Clean Architecture with ASP.NET Core (vs. other approaches)
• API Endpoints vs. traditional Controllers
• Microservices
All Episodes: https://www.c-sharpcorner.com/live/rockin-the-code-world-with-dotnetdave
C# Corner - Community of Software and Data Developers
https://www.c-sharpcorner.com
#CSharpCorner #rockinthecodeworls #live #dotnet
Show More Show Less View Video Transcript
0:03
[Applause]
0:28
[Applause]
0:28
[Applause] so
0:31
so
0:31
so [Applause]
0:42
so
0:50
[Applause]
1:07
[Applause]
1:07
[Applause] [Music]
1:43
[Music]
1:43
[Music] [Applause]
1:44
[Applause]
1:44
[Applause] [Music]
1:57
[Music]
2:06
hey everybody welcome to rocking the
2:08
hey everybody welcome to rocking the
2:08
hey everybody welcome to rocking the code world.net dave
2:11
code world.net dave
2:11
code world.net dave i'm done dave i was thinking about this
2:13
i'm done dave i was thinking about this
2:13
i'm done dave i was thinking about this guitar that i played
2:17
at the conference in india in 2018
2:21
at the conference in india in 2018
2:21
at the conference in india in 2018 and i was thinking you know i haven't
2:23
and i was thinking you know i haven't
2:23
and i was thinking you know i haven't played in a while so i thought i'd show
2:24
played in a while so i thought i'd show
2:24
played in a while so i thought i'd show everybody this really cool
2:26
everybody this really cool
2:26
everybody this really cool led guitar uh that i took to india um
2:30
led guitar uh that i took to india um
2:30
led guitar uh that i took to india um i added the led lights but this guitar
2:32
i added the led lights but this guitar
2:32
i added the led lights but this guitar was actually
2:33
was actually
2:33
was actually uh purchased by um
2:36
uh purchased by um
2:36
uh purchased by um uh grape city for me so i just wanted to
2:40
uh grape city for me so i just wanted to
2:40
uh grape city for me so i just wanted to play it and uh thank great city again
2:43
play it and uh thank great city again
2:43
play it and uh thank great city again and uh i hope i get to play it next time
2:47
and uh i hope i get to play it next time
2:48
and uh i hope i get to play it next time i come to india what do you guys think
2:49
i come to india what do you guys think
2:50
i come to india what do you guys think make a comment
2:51
make a comment
2:51
make a comment um all right
2:54
um all right
2:54
um all right welcome to rock of the code world i hope
2:57
welcome to rock of the code world i hope
2:57
welcome to rock of the code world i hope everybody's doing great
2:58
everybody's doing great
2:58
everybody's doing great um today we have uh steve
3:02
um today we have uh steve
3:02
um today we have uh steve um smith our dallas also known as
3:04
um smith our dallas also known as
3:04
um smith our dallas also known as zardellis uh
3:05
zardellis uh
3:05
zardellis uh founding member of uh nibble pros
3:07
founding member of uh nibble pros
3:07
founding member of uh nibble pros speaking uh will be my guest today
3:10
speaking uh will be my guest today
3:10
speaking uh will be my guest today and like playing guitar before my uh
3:12
and like playing guitar before my uh
3:12
and like playing guitar before my uh session kind of threw me off because now
3:14
session kind of threw me off because now
3:14
session kind of threw me off because now i
3:14
i
3:14
i want to keep playing um
3:18
want to keep playing um
3:18
want to keep playing um anyway he's going to be our guest today
3:20
anyway he's going to be our guest today
3:20
anyway he's going to be our guest today i'm i'm really excited about that
3:21
i'm i'm really excited about that
3:21
i'm i'm really excited about that because
3:22
because
3:22
because i follow him and read his stuff on
3:23
i follow him and read his stuff on
3:23
i follow him and read his stuff on twitter a lot and uh
3:25
twitter a lot and uh
3:25
twitter a lot and uh so it's going to be exciting um
3:29
so it's going to be exciting um
3:29
so it's going to be exciting um you know you know the whole world is
3:30
you know you know the whole world is
3:30
you know you know the whole world is still dealing with this pandemic
3:33
still dealing with this pandemic
3:33
still dealing with this pandemic and uh you know kobe 19 uh pandemic
3:36
and uh you know kobe 19 uh pandemic
3:36
and uh you know kobe 19 uh pandemic and uh you know i just want to
3:39
and uh you know i just want to
3:39
and uh you know i just want to again say that you know india really
3:41
again say that you know india really
3:41
again say that you know india really needs your help right now
3:43
needs your help right now
3:43
needs your help right now um you can go to those links and i
3:46
um you can go to those links and i
3:46
um you can go to those links and i challenge all software developers out
3:48
challenge all software developers out
3:48
challenge all software developers out there to meet my challenge of a hundred
3:49
there to meet my challenge of a hundred
3:49
there to meet my challenge of a hundred dollars
3:50
dollars
3:50
dollars and uh because i know most of you can
3:53
and uh because i know most of you can
3:53
and uh because i know most of you can afford it and uh so
3:54
afford it and uh so
3:54
afford it and uh so i hope you'll please go to those links
3:57
i hope you'll please go to those links
3:57
i hope you'll please go to those links and you know donate
3:58
and you know donate
3:58
and you know donate as much as you can because they are
4:00
as much as you can because they are
4:00
as much as you can because they are still in a bad problem and
4:02
still in a bad problem and
4:02
still in a bad problem and you know this is not a india problem
4:04
you know this is not a india problem
4:04
you know this is not a india problem this is a world
4:05
this is a world
4:05
this is a world problem that we need to fix and the only
4:08
problem that we need to fix and the only
4:08
problem that we need to fix and the only way to do that
4:09
way to do that
4:09
way to do that is to get them you know get them help
4:12
is to get them you know get them help
4:12
is to get them you know get them help and get them vaccines
4:14
and get them vaccines
4:14
and get them vaccines and you know i looked up the stats last
4:17
and you know i looked up the stats last
4:17
and you know i looked up the stats last this morning
4:17
this morning
4:17
this morning and yesterday india had 1183 deaths
4:21
and yesterday india had 1183 deaths
4:21
and yesterday india had 1183 deaths compared to america we had 451
4:25
compared to america we had 451
4:25
compared to america we had 451 but the the bad the really bad news with
4:27
but the the bad the really bad news with
4:27
but the the bad the really bad news with india is that they only had 3.99
4:31
india is that they only had 3.99
4:31
india is that they only had 3.99 um vaccinated where we have 46
4:33
um vaccinated where we have 46
4:33
um vaccinated where we have 46 vaccinated
4:35
vaccinated
4:35
vaccinated and uh so they're still in
4:38
and uh so they're still in
4:38
and uh so they're still in a problem and you know the indian
4:40
a problem and you know the indian
4:40
a problem and you know the indian variant is now really strong here in
4:42
variant is now really strong here in
4:42
variant is now really strong here in america
4:43
america
4:43
america and some of our numbers are actually
4:44
and some of our numbers are actually
4:44
and some of our numbers are actually going up because of it
4:46
going up because of it
4:46
going up because of it so those of you especially in america
4:48
so those of you especially in america
4:48
so those of you especially in america who are
4:49
who are
4:49
who are are not getting vaccinated uh
4:52
are not getting vaccinated uh
4:52
are not getting vaccinated uh come come to my place so i can slap you
4:54
come come to my place so i can slap you
4:54
come come to my place so i can slap you upside the head because you know we're
4:56
upside the head because you know we're
4:56
upside the head because you know we're not going to get rid of this until
4:58
not going to get rid of this until
4:58
not going to get rid of this until you know we get hurt immunity in the
5:00
you know we get hurt immunity in the
5:00
you know we get hurt immunity in the whole world
5:01
whole world
5:01
whole world so um you know please get vaccinated
5:05
so um you know please get vaccinated
5:05
so um you know please get vaccinated please stay safe
5:06
please stay safe
5:06
please stay safe and please donate to that link there so
5:09
and please donate to that link there so
5:09
and please donate to that link there so we can get some more support for india
5:11
we can get some more support for india
5:11
we can get some more support for india i i will greatly appreciate it and so
5:14
i i will greatly appreciate it and so
5:14
i i will greatly appreciate it and so will
5:15
will
5:15
will all of our indian friends too because
5:17
all of our indian friends too because
5:17
all of our indian friends too because we've been losing people
5:19
we've been losing people
5:19
we've been losing people that um uh right on c-sharp corner and
5:22
that um uh right on c-sharp corner and
5:22
that um uh right on c-sharp corner and we're losing people who are members of
5:24
we're losing people who are members of
5:24
we're losing people who are members of c-sharp corner and i don't like seeing
5:26
c-sharp corner and i don't like seeing
5:26
c-sharp corner and i don't like seeing that
5:27
that
5:27
that so anyway um
5:31
so anyway um
5:31
so anyway um i also want to plug again i plugged it
5:33
i also want to plug again i plugged it
5:33
i also want to plug again i plugged it on the conference last week um the hello
5:35
on the conference last week um the hello
5:35
on the conference last week um the hello world cookbook
5:36
world cookbook
5:36
world cookbook uh those of you who are out there who
5:38
uh those of you who are out there who
5:38
uh those of you who are out there who can cook or maybe your wife can cook and
5:40
can cook or maybe your wife can cook and
5:40
can cook or maybe your wife can cook and you can submit the recipes
5:41
you can submit the recipes
5:41
you can submit the recipes or vice versa if your husband cooks and
5:44
or vice versa if your husband cooks and
5:44
or vice versa if your husband cooks and you want to submit the recipes
5:46
you want to submit the recipes
5:46
you want to submit the recipes please please submit your recipes now
5:48
please please submit your recipes now
5:48
please please submit your recipes now because if i don't get enough recipes by
5:50
because if i don't get enough recipes by
5:50
because if i don't get enough recipes by october this
5:51
october this
5:51
october this project is dead and uh
5:54
project is dead and uh
5:54
project is dead and uh and i want to you know fill it with
5:56
and i want to you know fill it with
5:56
and i want to you know fill it with recipes from technical people just like
5:58
recipes from technical people just like
5:58
recipes from technical people just like you and me
5:59
you and me
5:59
you and me um and 100 of the proceeds of the ebook
6:02
um and 100 of the proceeds of the ebook
6:02
um and 100 of the proceeds of the ebook and everything else will go to the voice
6:04
and everything else will go to the voice
6:04
and everything else will go to the voice of slum ngo in india
6:06
of slum ngo in india
6:06
of slum ngo in india um every month because i've been
6:08
um every month because i've been
6:08
um every month because i've been donating
6:09
donating
6:09
donating you know i've been donating all the
6:10
you know i've been donating all the
6:10
you know i've been donating all the money from one of my books to the voice
6:12
money from one of my books to the voice
6:12
money from one of my books to the voice of slum every month too
6:14
of slum every month too
6:14
of slum every month too and uh this is just another way because
6:17
and uh this is just another way because
6:17
and uh this is just another way because i think this will be more popular in my
6:19
i think this will be more popular in my
6:19
i think this will be more popular in my books
6:20
books
6:20
books so please please please go to
6:23
so please please please go to
6:23
so please please please go to helloworldcookbook.com
6:24
helloworldcookbook.com
6:24
helloworldcookbook.com donate your recipes if you don't want to
6:26
donate your recipes if you don't want to
6:26
donate your recipes if you don't want to donate you can sign up to be a unit
6:28
donate you can sign up to be a unit
6:28
donate you can sign up to be a unit tester to test the recipes because i
6:30
tester to test the recipes because i
6:30
tester to test the recipes because i can't test the recipes that have gluten
6:32
can't test the recipes that have gluten
6:32
can't test the recipes that have gluten in it so
6:33
in it so
6:33
in it so i need people to help me to test the
6:34
i need people to help me to test the
6:34
i need people to help me to test the recipes and i also need editors and i
6:36
recipes and i also need editors and i
6:36
recipes and i also need editors and i need a graphic artist
6:38
need a graphic artist
6:38
need a graphic artist to um for the book cover and things like
6:40
to um for the book cover and things like
6:40
to um for the book cover and things like that so
6:41
that so
6:41
that so please please help this project of mine
6:43
please please help this project of mine
6:43
please please help this project of mine because i don't want to see it
6:44
because i don't want to see it
6:44
because i don't want to see it i don't want to see it die okay
6:49
i don't want to see it die okay
6:49
i don't want to see it die okay wow that's it already so i'm going to
6:52
wow that's it already so i'm going to
6:52
wow that's it already so i'm going to welcome
6:53
welcome
6:53
welcome steve smith is an entrepreneur and
6:55
steve smith is an entrepreneur and
6:55
steve smith is an entrepreneur and software architect developer and trainer
6:57
software architect developer and trainer
6:57
software architect developer and trainer steve's firm nibble pros provides
6:59
steve's firm nibble pros provides
6:59
steve's firm nibble pros provides companies with the resources of training
7:01
companies with the resources of training
7:01
companies with the resources of training the need to deliver better software
7:03
the need to deliver better software
7:04
the need to deliver better software faster avoiding the trap about
7:05
faster avoiding the trap about
7:05
faster avoiding the trap about out of control debt steve has published
7:09
out of control debt steve has published
7:09
out of control debt steve has published many courses on pluralsight
7:10
many courses on pluralsight
7:10
many courses on pluralsight and has written a number of books and
7:12
and has written a number of books and
7:12
and has written a number of books and maintains dozens of new good packages
7:14
maintains dozens of new good packages
7:14
maintains dozens of new good packages you can find them on that link there
7:17
you can find them on that link there
7:18
you can find them on that link there and i'm sure he'll plug some other stuff
7:20
and i'm sure he'll plug some other stuff
7:20
and i'm sure he'll plug some other stuff later so welcome steve
7:22
later so welcome steve
7:22
later so welcome steve hi thanks for having me how's it going
7:25
hi thanks for having me how's it going
7:25
hi thanks for having me how's it going great
7:26
great
7:26
great so where do you live i'm in northeast
7:29
so where do you live i'm in northeast
7:29
so where do you live i'm in northeast ohio near lake erie
7:30
ohio near lake erie
7:30
ohio near lake erie cool how's the weather there today it's
7:34
cool how's the weather there today it's
7:34
cool how's the weather there today it's really hot today it's like 88 degrees
7:36
really hot today it's like 88 degrees
7:36
really hot today it's like 88 degrees and
7:36
and
7:36
and 80 humidity yeah yeah you guys are being
7:39
80 humidity yeah yeah you guys are being
7:39
80 humidity yeah yeah you guys are being hit with that
7:40
hit with that
7:40
hit with that uh heat wave right yeah tomorrow it's
7:42
uh heat wave right yeah tomorrow it's
7:42
uh heat wave right yeah tomorrow it's supposed to be even warmer supposed to
7:43
supposed to be even warmer supposed to
7:43
supposed to be even warmer supposed to be in the 90s
7:44
be in the 90s
7:44
be in the 90s yeah but it's it's all right i like it
7:47
yeah but it's it's all right i like it
7:47
yeah but it's it's all right i like it hot rather than cold and no hybrid
7:49
hot rather than cold and no hybrid
7:49
hot rather than cold and no hybrid gets both extremes so yeah yeah well all
7:52
gets both extremes so yeah yeah well all
7:52
gets both extremes so yeah yeah well all of you out there that don't want to deal
7:53
of you out there that don't want to deal
7:53
of you out there that don't want to deal with the heat
7:54
with the heat
7:54
with the heat come to san diego because it's never hot
7:56
come to san diego because it's never hot
7:56
come to san diego because it's never hot here so right is there cold it's never
7:58
here so right is there cold it's never
7:58
here so right is there cold it's never hot it's always just never hot never
7:59
hot it's always just never hot never
8:00
hot it's always just never hot never cold
8:00
cold
8:00
cold yeah it's 72 degrees most of the year
8:03
yeah it's 72 degrees most of the year
8:03
yeah it's 72 degrees most of the year and
8:04
and
8:04
and especially where i live by the beach
8:06
especially where i live by the beach
8:06
especially where i live by the beach it's it's pretty much 72 all year pretty
8:08
it's it's pretty much 72 all year pretty
8:08
it's it's pretty much 72 all year pretty much
8:08
much
8:08
much yeah but if i had a shack next to the
8:10
yeah but if i had a shack next to the
8:10
yeah but if i had a shack next to the beach in san diego i could have a
8:12
beach in san diego i could have a
8:12
beach in san diego i could have a mansion in ohio
8:13
mansion in ohio
8:13
mansion in ohio so that's the difference since the cost
8:15
so that's the difference since the cost
8:15
so that's the difference since the cost of living in real estate
8:17
of living in real estate
8:17
of living in real estate that's true my my place is pretty
8:19
that's true my my place is pretty
8:19
that's true my my place is pretty freaking expensive you know
8:21
freaking expensive you know
8:21
freaking expensive you know and uh i live about a mile from the
8:23
and uh i live about a mile from the
8:23
and uh i live about a mile from the beach uh but yeah it's
8:25
beach uh but yeah it's
8:25
beach uh but yeah it's pretty dang expensive but uh i love
8:28
pretty dang expensive but uh i love
8:28
pretty dang expensive but uh i love living by the beach i love the
8:29
living by the beach i love the
8:29
living by the beach i love the you know the water nearby you know it
8:31
you know the water nearby you know it
8:31
you know the water nearby you know it makes for you know nicer air quality
8:33
makes for you know nicer air quality
8:34
makes for you know nicer air quality and you know things like that so i was
8:36
and you know things like that so i was
8:36
and you know things like that so i was uh
8:37
uh
8:37
uh i saw your stuff at the cookbook at the
8:38
i saw your stuff at the cookbook at the
8:38
i saw your stuff at the cookbook at the conference previously and then just now
8:40
conference previously and then just now
8:40
conference previously and then just now um did you see the uh the net developers
8:43
um did you see the uh the net developers
8:43
um did you see the uh the net developers can cook
8:43
can cook
8:44
can cook cookbooks that came out a few years ago
8:45
cookbooks that came out a few years ago
8:45
cookbooks that came out a few years ago i basically stole their idea basically
8:47
i basically stole their idea basically
8:48
i basically stole their idea basically yeah um right so i was just wondering
8:50
yeah um right so i was just wondering
8:50
yeah um right so i was just wondering since you were talking about trying to
8:51
since you were talking about trying to
8:51
since you were talking about trying to get some help to make it happen have you
8:52
get some help to make it happen have you
8:52
get some help to make it happen have you thought about having some of your
8:53
thought about having some of your
8:53
thought about having some of your sponsors
8:54
sponsors
8:54
sponsors help with that because i think um you
8:56
help with that because i think um you
8:56
help with that because i think um you know that that one was all put together
8:57
know that that one was all put together
8:57
know that that one was all put together by component vendors
8:59
by component vendors
8:59
by component vendors yeah um well that was put by a grape
9:02
yeah um well that was put by a grape
9:02
yeah um well that was put by a grape city
9:02
city
9:02
city and i couldn't i know you have a
9:04
and i couldn't i know you have a
9:04
and i couldn't i know you have a relationship with them i do
9:06
relationship with them i do
9:06
relationship with them i do and i could've sworn i talked to him
9:08
and i could've sworn i talked to him
9:08
and i could've sworn i talked to him about it but let me let me hit him up
9:09
about it but let me let me hit him up
9:10
about it but let me let me hit him up again
9:10
again
9:10
again um but yeah i i definitely maybe we can
9:13
um but yeah i i definitely maybe we can
9:13
um but yeah i i definitely maybe we can just steal all those recipes
9:15
just steal all those recipes
9:15
just steal all those recipes yeah there you go do a greatest hits
9:18
yeah there you go do a greatest hits
9:18
yeah there you go do a greatest hits cookbook
9:19
cookbook
9:19
cookbook you know with some old favorites and
9:20
you know with some old favorites and
9:20
you know with some old favorites and some new ones yeah yeah you know i've
9:22
some new ones yeah yeah you know i've
9:22
some new ones yeah yeah you know i've been
9:23
been
9:23
been you know i've been uh cooking since i
9:25
you know i've been uh cooking since i
9:25
you know i've been uh cooking since i was a teenager you know and
9:27
was a teenager you know and
9:27
was a teenager you know and and i was even you know at 18 years old
9:29
and i was even you know at 18 years old
9:29
and i was even you know at 18 years old i was a
9:30
i was a
9:30
i was a um cook at an italian restaurant and so
9:34
um cook at an italian restaurant and so
9:34
um cook at an italian restaurant and so i think i've been cooking my whole life
9:35
i think i've been cooking my whole life
9:35
i think i've been cooking my whole life you know when i was married i was the
9:37
you know when i was married i was the
9:37
you know when i was married i was the cook you know
9:38
cook you know
9:38
cook you know uh when i have girlfriends i'm the cook
9:40
uh when i have girlfriends i'm the cook
9:40
uh when i have girlfriends i'm the cook usually and so
9:42
usually and so
9:42
usually and so um i love cooking for someone i don't
9:44
um i love cooking for someone i don't
9:44
um i love cooking for someone i don't necessarily like cooking for myself
9:46
necessarily like cooking for myself
9:46
necessarily like cooking for myself right it's a lot of work but it's just
9:47
right it's a lot of work but it's just
9:48
right it's a lot of work but it's just you yeah yeah um
9:51
you yeah yeah um
9:51
you yeah yeah um hey uh uh simon do you know where that
9:54
hey uh uh simon do you know where that
9:54
hey uh uh simon do you know where that echo is coming from
9:57
echo is coming from
9:57
echo is coming from maybe on my side do i have an echo i
9:59
maybe on my side do i have an echo i
9:59
maybe on my side do i have an echo i don't have any help
10:01
don't have any help
10:01
don't have any help i hear a neckline i don't hear an echo
10:04
i hear a neckline i don't hear an echo
10:04
i hear a neckline i don't hear an echo my ears are sensitive then i guess i
10:06
my ears are sensitive then i guess i
10:06
my ears are sensitive then i guess i don't know okay if no one's hearing it
10:08
don't know okay if no one's hearing it
10:08
don't know okay if no one's hearing it then i'm good
10:08
then i'm good
10:08
then i'm good it's just me i guess all right i tried
10:11
it's just me i guess all right i tried
10:11
it's just me i guess all right i tried meeting my mic for a couple seconds to
10:12
meeting my mic for a couple seconds to
10:12
meeting my mic for a couple seconds to get
10:12
get
10:12
get better here i'll do it again you try and
10:14
better here i'll do it again you try and
10:14
better here i'll do it again you try and talk hello hello
10:17
talk hello hello
10:17
talk hello hello yep it went away all right well maybe
10:19
yep it went away all right well maybe
10:19
yep it went away all right well maybe it's me i'll tell you i'll turn my
10:20
it's me i'll tell you i'll turn my
10:20
it's me i'll tell you i'll turn my volume down and maybe it's bleeding
10:21
volume down and maybe it's bleeding
10:21
volume down and maybe it's bleeding through the headphones yeah maybe
10:25
hey how's that sorry i'm a musician i'm
10:28
hey how's that sorry i'm a musician i'm
10:28
hey how's that sorry i'm a musician i'm picky about sound you know it's
10:31
picky about sound you know it's
10:31
picky about sound you know it's that's better yeah all right cool um
10:34
that's better yeah all right cool um
10:34
that's better yeah all right cool um so uh let's let's get into what we want
10:37
so uh let's let's get into what we want
10:37
so uh let's let's get into what we want to talk about so
10:39
to talk about so
10:39
to talk about so we got three topics here and i was
10:41
we got three topics here and i was
10:41
we got three topics here and i was looking at the first one today which i
10:42
looking at the first one today which i
10:42
looking at the first one today which i think is pretty good to start off with
10:44
think is pretty good to start off with
10:44
think is pretty good to start off with uh especially because i was actually
10:46
uh especially because i was actually
10:46
uh especially because i was actually asked a question like this during an
10:48
asked a question like this during an
10:48
asked a question like this during an interview today
10:49
interview today
10:49
interview today um oh speaking of interviews i you know
10:51
um oh speaking of interviews i you know
10:51
um oh speaking of interviews i you know i looked into your blog today i go how
10:53
i looked into your blog today i go how
10:53
i looked into your blog today i go how do i get a gig like yours
10:54
do i get a gig like yours
10:54
do i get a gig like yours you know just like training and
10:57
you know just like training and
10:57
you know just like training and pearlside and
10:58
pearlside and
10:58
pearlside and that's what i want to do it uh you know
11:01
that's what i want to do it uh you know
11:01
that's what i want to do it uh you know it takes years to become an overnight
11:02
it takes years to become an overnight
11:02
it takes years to become an overnight success
11:03
success
11:03
success you know yeah yeah i've been doing
11:04
you know yeah yeah i've been doing
11:04
you know yeah yeah i've been doing pluralsight since 2010 so yeah
11:06
pluralsight since 2010 so yeah
11:06
pluralsight since 2010 so yeah yeah it's a long grind yeah yeah
11:09
yeah it's a long grind yeah yeah
11:09
yeah it's a long grind yeah yeah i'm gonna hit them up again the last
11:11
i'm gonna hit them up again the last
11:11
i'm gonna hit them up again the last time i talked to them about
11:13
time i talked to them about
11:13
time i talked to them about you know doing uh like code quality uh
11:16
you know doing uh like code quality uh
11:16
you know doing uh like code quality uh you know training they weren't that
11:18
you know training they weren't that
11:18
you know training they weren't that interested in it so
11:19
interested in it so
11:19
interested in it so they've got a lot of people trying to do
11:20
they've got a lot of people trying to do
11:20
they've got a lot of people trying to do that including me and it's it's tough
11:23
that including me and it's it's tough
11:23
that including me and it's it's tough yeah yeah so that's the biggest problem
11:26
yeah yeah so that's the biggest problem
11:26
yeah yeah so that's the biggest problem with pluralsight right now as an author
11:27
with pluralsight right now as an author
11:27
with pluralsight right now as an author is finding a
11:28
is finding a
11:28
is finding a niche that is right so right right
11:31
niche that is right so right right
11:32
niche that is right so right right yeah so well let's talk about clean
11:33
yeah so well let's talk about clean
11:34
yeah so well let's talk about clean architecture because someone asked me
11:35
architecture because someone asked me
11:35
architecture because someone asked me about
11:35
about
11:35
about you know different architectural
11:37
you know different architectural
11:37
you know different architectural patterns and things like that so
11:39
patterns and things like that so
11:39
patterns and things like that so um so for everybody out there especially
11:41
um so for everybody out there especially
11:41
um so for everybody out there especially because we have a
11:42
because we have a
11:42
because we have a you know more younger you know crowd for
11:44
you know more younger you know crowd for
11:44
you know more younger you know crowd for the show um
11:45
the show um
11:45
the show um what is clean architecture to you to me
11:48
what is clean architecture to you to me
11:48
what is clean architecture to you to me clean architecture
11:49
clean architecture
11:49
clean architecture is architecture that's set up to follow
11:52
is architecture that's set up to follow
11:52
is architecture that's set up to follow the
11:52
the
11:52
the solid principles primarily and the most
11:55
solid principles primarily and the most
11:55
solid principles primarily and the most important
11:56
important
11:56
important one that it that it relates to is the
11:58
one that it that it relates to is the
11:58
one that it that it relates to is the dependency inversion principle
12:00
dependency inversion principle
12:00
dependency inversion principle and the thing it's trying to do is
12:03
and the thing it's trying to do is
12:03
and the thing it's trying to do is make it so that your code is not
12:04
make it so that your code is not
12:04
make it so that your code is not depending on the infrastructure on which
12:07
depending on the infrastructure on which
12:07
depending on the infrastructure on which it's running
12:07
it's running
12:08
it's running so for a lot of applications especially
12:10
so for a lot of applications especially
12:10
so for a lot of applications especially traditional.net apps
12:11
traditional.net apps
12:11
traditional.net apps you would generally have a database and
12:14
you would generally have a database and
12:14
you would generally have a database and somewhere in your code you would talk to
12:15
somewhere in your code you would talk to
12:16
somewhere in your code you would talk to that database right maybe you're using
12:17
that database right maybe you're using
12:17
that database right maybe you're using ado.net maybe more recently you're using
12:19
ado.net maybe more recently you're using
12:19
ado.net maybe more recently you're using entity framework and anywhere you need
12:21
entity framework and anywhere you need
12:21
entity framework and anywhere you need data you would just say
12:22
data you would just say
12:22
data you would just say i'm going to new up my data access layer
12:24
i'm going to new up my data access layer
12:24
i'm going to new up my data access layer class or i'm going to new up a db
12:25
class or i'm going to new up a db
12:25
class or i'm going to new up a db context
12:26
context
12:26
context and then go get the data i need um and
12:29
and then go get the data i need um and
12:29
and then go get the data i need um and new
12:29
new
12:29
new as a keyword is glue right anywhere in
12:31
as a keyword is glue right anywhere in
12:31
as a keyword is glue right anywhere in your code you see new you think new is
12:33
your code you see new you think new is
12:33
your code you see new you think new is glue it's gluing you to
12:35
glue it's gluing you to
12:35
glue it's gluing you to that implementation and so in this case
12:37
that implementation and so in this case
12:37
that implementation and so in this case it's gluing you to the database and it's
12:38
it's gluing you to the database and it's
12:38
it's gluing you to the database and it's gluing you to entity framework
12:40
gluing you to entity framework
12:40
gluing you to entity framework um and that makes it really hard for you
12:41
um and that makes it really hard for you
12:41
um and that makes it really hard for you to later unit test or change
12:43
to later unit test or change
12:43
to later unit test or change your implementation details so uh clean
12:46
your implementation details so uh clean
12:46
your implementation details so uh clean architecture
12:47
architecture
12:47
architecture follows the dependency inversion
12:48
follows the dependency inversion
12:48
follows the dependency inversion principle which is the d in solid
12:50
principle which is the d in solid
12:50
principle which is the d in solid and it flips that on its head so instead
12:52
and it flips that on its head so instead
12:52
and it flips that on its head so instead of saying my business logic the most
12:54
of saying my business logic the most
12:54
of saying my business logic the most important part of my application
12:56
important part of my application
12:56
important part of my application depends on my data access layer my
12:58
depends on my data access layer my
12:58
depends on my data access layer my entity my orm whatever that might be
13:00
entity my orm whatever that might be
13:00
entity my orm whatever that might be which depends on the database now it's
13:02
which depends on the database now it's
13:02
which depends on the database now it's my business layer defines
13:03
my business layer defines
13:04
my business layer defines some contracts that describe how it's
13:06
some contracts that describe how it's
13:06
some contracts that describe how it's going to get its data
13:07
going to get its data
13:07
going to get its data and then i can plug in my you know
13:10
and then i can plug in my you know
13:10
and then i can plug in my you know repository or my db context my data
13:12
repository or my db context my data
13:12
repository or my db context my data access layer dapper whatever it is
13:14
access layer dapper whatever it is
13:14
access layer dapper whatever it is and have it implement that contract and
13:16
and have it implement that contract and
13:16
and have it implement that contract and then get the data so
13:18
then get the data so
13:18
then get the data so it really just inverts those
13:19
it really just inverts those
13:19
it really just inverts those dependencies and makes it so it's very
13:21
dependencies and makes it so it's very
13:21
dependencies and makes it so it's very difficult
13:22
difficult
13:22
difficult for your business logic to uh depend on
13:24
for your business logic to uh depend on
13:24
for your business logic to uh depend on the implementation details
13:26
the implementation details
13:26
the implementation details right and so quickly explain what solid
13:29
right and so quickly explain what solid
13:29
right and so quickly explain what solid means for everybody else sure so
13:30
means for everybody else sure so
13:30
means for everybody else sure so so solid is a an acronym or even a
13:33
so solid is a an acronym or even a
13:33
so solid is a an acronym or even a macronym because it's an acronym of
13:35
macronym because it's an acronym of
13:35
macronym because it's an acronym of acronyms
13:35
acronyms
13:35
acronyms um and so the s is srp
13:39
um and so the s is srp
13:39
um and so the s is srp which is the single responsibility
13:40
which is the single responsibility
13:40
which is the single responsibility principle briefly it means classes
13:42
principle briefly it means classes
13:42
principle briefly it means classes should be focused on doing one thing
13:44
should be focused on doing one thing
13:44
should be focused on doing one thing right uh o is the open close principle
13:47
right uh o is the open close principle
13:47
right uh o is the open close principle or ocp
13:48
or ocp
13:48
or ocp and that means that you should be able
13:49
and that means that you should be able
13:49
and that means that you should be able to change how your classes
13:51
to change how your classes
13:51
to change how your classes behave or even methods without having to
13:53
behave or even methods without having to
13:53
behave or even methods without having to actually change the source code and then
13:55
actually change the source code and then
13:55
actually change the source code and then recompile them
13:56
recompile them
13:56
recompile them and generally the way you do that is by
13:57
and generally the way you do that is by
13:58
and generally the way you do that is by injecting something into it
13:59
injecting something into it
13:59
injecting something into it you know it could be as easy with a
14:00
you know it could be as easy with a
14:00
you know it could be as easy with a method as just passing in a parameter
14:02
method as just passing in a parameter
14:02
method as just passing in a parameter uh and that'll let that methods behavior
14:04
uh and that'll let that methods behavior
14:04
uh and that'll let that methods behavior change now based on that parameter
14:06
change now based on that parameter
14:06
change now based on that parameter and you can follow that same logic with
14:08
and you can follow that same logic with
14:08
and you can follow that same logic with whole classes where usually when you're
14:10
whole classes where usually when you're
14:10
whole classes where usually when you're passing in the parameter it's to the
14:11
passing in the parameter it's to the
14:11
passing in the parameter it's to the constructor
14:12
constructor
14:12
constructor and that changes how that class will
14:13
and that changes how that class will
14:13
and that changes how that class will behave right then the l
14:15
behave right then the l
14:15
behave right then the l is lsp which is liskov substitution
14:17
is lsp which is liskov substitution
14:18
is lsp which is liskov substitution principle
14:18
principle
14:18
principle and that just means that when you have
14:20
and that just means that when you have
14:20
and that just means that when you have child classes they should be
14:21
child classes they should be
14:22
child classes they should be substitutable for
14:23
substitutable for
14:23
substitutable for their base classes and anywhere that
14:25
their base classes and anywhere that
14:25
their base classes and anywhere that that's not true it can cause problems in
14:26
that's not true it can cause problems in
14:26
that's not true it can cause problems in your system
14:27
your system
14:27
your system and then the i is isp which stands for
14:30
and then the i is isp which stands for
14:30
and then the i is isp which stands for interface segregation principle
14:32
interface segregation principle
14:32
interface segregation principle and in a nutshell that goes really
14:34
and in a nutshell that goes really
14:34
and in a nutshell that goes really closely with single responsibility it
14:35
closely with single responsibility it
14:35
closely with single responsibility it means
14:36
means
14:36
means your interfaces should be small and
14:37
your interfaces should be small and
14:37
your interfaces should be small and cohesive not
14:39
cohesive not
14:39
cohesive not large and do everything and then the
14:41
large and do everything and then the
14:41
large and do everything and then the last one is d which we already mentioned
14:42
last one is d which we already mentioned
14:42
last one is d which we already mentioned that's the dependency inversion
14:44
that's the dependency inversion
14:44
that's the dependency inversion principle
14:45
principle
14:45
principle and that says that your higher level
14:47
and that says that your higher level
14:47
and that says that your higher level code should not depend on lower level
14:48
code should not depend on lower level
14:48
code should not depend on lower level code
14:49
code
14:49
code uh instead it should depend on
14:50
uh instead it should depend on
14:50
uh instead it should depend on abstractions and your low level details
14:53
abstractions and your low level details
14:53
abstractions and your low level details shouldn't depend or you're sorry your
14:55
shouldn't depend or you're sorry your
14:55
shouldn't depend or you're sorry your abstraction shouldn't depend on low
14:56
abstraction shouldn't depend on low
14:56
abstraction shouldn't depend on low level details but the other way around
14:58
level details but the other way around
14:58
level details but the other way around your um low level details should depend
15:00
your um low level details should depend
15:00
your um low level details should depend on your abstractions
15:01
on your abstractions
15:01
on your abstractions now that kind of requires you to define
15:03
now that kind of requires you to define
15:03
now that kind of requires you to define what high level and low level means
15:05
what high level and low level means
15:05
what high level and low level means a lot of us just kind of you know know
15:07
a lot of us just kind of you know know
15:07
a lot of us just kind of you know know it but if you don't know the difference
15:09
it but if you don't know the difference
15:09
it but if you don't know the difference the difference is
15:10
the difference is
15:10
the difference is high level code is more abstract it's
15:12
high level code is more abstract it's
15:12
high level code is more abstract it's not as close to
15:14
not as close to
15:14
not as close to uh some type of input device or output
15:16
uh some type of input device or output
15:16
uh some type of input device or output device
15:17
device
15:17
device uh so it's going to be things like
15:18
uh so it's going to be things like
15:18
uh so it's going to be things like business rules right i have a customer
15:20
business rules right i have a customer
15:20
business rules right i have a customer and a customer has an address
15:22
and a customer has an address
15:22
and a customer has an address now it doesn't say anything about where
15:24
now it doesn't say anything about where
15:24
now it doesn't say anything about where that's stored or how it's displayed or
15:26
that's stored or how it's displayed or
15:26
that's stored or how it's displayed or anything like that
15:27
anything like that
15:27
anything like that low level code is i need to write a line
15:30
low level code is i need to write a line
15:30
low level code is i need to write a line to a text file using this encoding
15:32
to a text file using this encoding
15:32
to a text file using this encoding right that's very low level and it's
15:33
right that's very low level and it's
15:33
right that's very low level and it's talking to something through input
15:35
talking to something through input
15:35
talking to something through input output
15:35
output
15:36
output or i need to display these pixels on the
15:38
or i need to display these pixels on the
15:38
or i need to display these pixels on the screen right now it's it's concerned
15:39
screen right now it's it's concerned
15:39
screen right now it's it's concerned with the screen right
15:40
with the screen right
15:40
with the screen right it's again close to the input output um
15:43
it's again close to the input output um
15:43
it's again close to the input output um and so you want your high level code
15:45
and so you want your high level code
15:45
and so you want your high level code to be not dependent upon all of that low
15:47
to be not dependent upon all of that low
15:47
to be not dependent upon all of that low level stuff you want the low level stuff
15:49
level stuff you want the low level stuff
15:49
level stuff you want the low level stuff to depend on the high level
15:50
to depend on the high level
15:50
to depend on the high level yeah um so
15:54
yeah um so
15:54
yeah um so explaining all that and kind of maybe
15:56
explaining all that and kind of maybe
15:56
explaining all that and kind of maybe tying it back to
15:57
tying it back to
15:57
tying it back to asp.net um well first
16:00
asp.net um well first
16:00
asp.net um well first you know so when you're talking about
16:02
you know so when you're talking about
16:02
you know so when you're talking about contracts you know
16:03
contracts you know
16:04
contracts you know what what's a contract to you is that an
16:05
what what's a contract to you is that an
16:05
what what's a contract to you is that an interface or an abstract class or
16:08
interface or an abstract class or
16:08
interface or an abstract class or it could be either in.net usually when
16:10
it could be either in.net usually when
16:10
it could be either in.net usually when we talk about an abstraction or a
16:11
we talk about an abstraction or a
16:11
we talk about an abstraction or a contract we're usually talking about an
16:13
contract we're usually talking about an
16:13
contract we're usually talking about an interface
16:13
interface
16:13
interface you would prefer to use interfaces most
16:15
you would prefer to use interfaces most
16:15
you would prefer to use interfaces most of the time because they're lighter
16:17
of the time because they're lighter
16:17
of the time because they're lighter weight than an abstract based class
16:19
weight than an abstract based class
16:19
weight than an abstract based class and you can have multiple interfaces
16:22
and you can have multiple interfaces
16:22
and you can have multiple interfaces attached to a class whereas you only get
16:23
attached to a class whereas you only get
16:23
attached to a class whereas you only get one
16:24
one
16:24
one base class because we only have single
16:25
base class because we only have single
16:25
base class because we only have single object inheritance yeah
16:27
object inheritance yeah
16:27
object inheritance yeah so are you using the new feature uh with
16:30
so are you using the new feature uh with
16:30
so are you using the new feature uh with um
16:31
um
16:31
um uh interfaces where you can actually put
16:33
uh interfaces where you can actually put
16:33
uh interfaces where you can actually put methods in it the default
16:34
methods in it the default
16:34
methods in it the default implementations yeah i have not found a
16:36
implementations yeah i have not found a
16:36
implementations yeah i have not found a good use for that yet uh i'm not a huge
16:39
good use for that yet uh i'm not a huge
16:39
good use for that yet uh i'm not a huge fan of that feature
16:40
fan of that feature
16:40
fan of that feature yet um i'm sure i'm sure there's reasons
16:42
yet um i'm sure i'm sure there's reasons
16:42
yet um i'm sure i'm sure there's reasons to use it and
16:43
to use it and
16:43
to use it and i've heard some reasons would be like if
16:44
i've heard some reasons would be like if
16:44
i've heard some reasons would be like if you have a large framework or you're
16:46
you have a large framework or you're
16:46
you have a large framework or you're depending on a large framework and you
16:47
depending on a large framework and you
16:47
depending on a large framework and you want to
16:48
want to
16:48
want to add some feature without breaking
16:49
add some feature without breaking
16:50
add some feature without breaking everything that's already there you
16:51
everything that's already there you
16:51
everything that's already there you could add it
16:52
could add it
16:52
could add it uh i'm not in that position so i haven't
16:54
uh i'm not in that position so i haven't
16:54
uh i'm not in that position so i haven't seen that value
16:55
seen that value
16:55
seen that value uh for me what it mostly does that
16:57
uh for me what it mostly does that
16:57
uh for me what it mostly does that muddies the waters
16:58
muddies the waters
16:58
muddies the waters for developers when you're trying to
16:59
for developers when you're trying to
16:59
for developers when you're trying to explain well what's the difference
17:00
explain well what's the difference
17:00
explain well what's the difference between an interface an abstract based
17:02
between an interface an abstract based
17:02
between an interface an abstract based class when would you use which one
17:03
class when would you use which one
17:03
class when would you use which one it's like well i'd use an abstract base
17:04
it's like well i'd use an abstract base
17:04
it's like well i'd use an abstract base class when i want to provide a default
17:06
class when i want to provide a default
17:06
class when i want to provide a default implementation and they're like right
17:07
implementation and they're like right
17:07
implementation and they're like right but i could do that with an interface
17:08
but i could do that with an interface
17:08
but i could do that with an interface now like
17:09
now like
17:09
now like now i have to explain it differently
17:11
now i have to explain it differently
17:11
now i have to explain it differently yeah i mean i've
17:13
yeah i mean i've
17:13
yeah i mean i've i've only done it a little bit and you
17:15
i've only done it a little bit and you
17:16
i've only done it a little bit and you know for
17:16
know for
17:16
know for my nougat package that uh generates
17:19
my nougat package that uh generates
17:19
my nougat package that uh generates random data
17:20
random data
17:20
random data you know i have some um base like
17:23
you know i have some um base like
17:23
you know i have some um base like classes in it and stuff and
17:25
classes in it and stuff and
17:25
classes in it and stuff and and one of the things i did it with with
17:27
and one of the things i did it with with
17:27
and one of the things i did it with with it was that you know i have a
17:28
it was that you know i have a
17:28
it was that you know i have a a p a person object right and so
17:32
a p a person object right and so
17:32
a p a person object right and so i did a default implementation basically
17:34
i did a default implementation basically
17:34
i did a default implementation basically that uh
17:35
that uh
17:35
that uh you know takes so a person has a he has
17:38
you know takes so a person has a he has
17:38
you know takes so a person has a he has a has
17:39
a has
17:39
a has when they were born right right then i
17:41
when they were born right right then i
17:41
when they were born right right then i but then i just created a default
17:43
but then i just created a default
17:43
but then i just created a default invitation to say what their age is
17:45
invitation to say what their age is
17:45
invitation to say what their age is right because now now every model has
17:48
right because now now every model has
17:48
right because now now every model has what their age is something right by
17:50
what their age is something right by
17:50
what their age is something right by just calculating it in the default
17:51
just calculating it in the default
17:51
just calculating it in the default method you know sure
17:54
method you know sure
17:54
method you know sure stuff like that you know but but you're
17:56
stuff like that you know but but you're
17:56
stuff like that you know but but you're right you know it's
17:57
right you know it's
17:57
right you know it's that could really muddy the waters and i
17:59
that could really muddy the waters and i
17:59
that could really muddy the waters and i you know i
18:00
you know i
18:00
you know i i know a lot of probably beginner
18:03
i know a lot of probably beginner
18:03
i know a lot of probably beginner programmers
18:04
programmers
18:04
programmers have a hard time knowing the difference
18:05
have a hard time knowing the difference
18:06
have a hard time knowing the difference between an interface and abstract class
18:08
between an interface and abstract class
18:08
between an interface and abstract class and
18:09
and
18:09
and and and i've experienced that and
18:13
and and i've experienced that and
18:13
and and i've experienced that and it was really funny i was on an
18:14
it was really funny i was on an
18:14
it was really funny i was on an interview yesterday and they asked me
18:16
interview yesterday and they asked me
18:16
interview yesterday and they asked me that question and i was going
18:17
that question and i was going
18:17
that question and i was going are you kidding me
18:18
are you kidding me
18:18
are you kidding me [Laughter]
18:20
[Laughter]
18:20
[Laughter] you obviously didn't research who i am
18:26
that's going i i even told them you know
18:28
that's going i i even told them you know
18:28
that's going i i even told them you know i teach this in college
18:30
i teach this in college
18:30
i teach this in college so here's the answer nice
18:33
so here's the answer nice
18:33
so here's the answer nice tell them come take my class and you can
18:35
tell them come take my class and you can
18:35
tell them come take my class and you can find out how i explain it i don't give
18:37
find out how i explain it i don't give
18:37
find out how i explain it i don't give that away for free
18:39
that away for free
18:39
that away for free i thought it was funny i was going
18:41
i thought it was funny i was going
18:41
i thought it was funny i was going really because most people when you know
18:43
really because most people when you know
18:43
really because most people when you know they meet me and they go and they look
18:45
they meet me and they go and they look
18:45
they meet me and they go and they look at my name and i go
18:46
at my name and i go
18:46
at my name and i go oh never mind we're not going to give
18:48
oh never mind we're not going to give
18:48
oh never mind we're not going to give you a test
18:49
you a test
18:49
you a test [Laughter]
18:53
so they can google you and find out that
18:55
so they can google you and find out that
18:55
so they can google you and find out that you know what you're talking about right
18:56
you know what you're talking about right
18:56
you know what you're talking about right exactly yeah that's that's important i
18:58
exactly yeah that's that's important i
18:58
exactly yeah that's that's important i mean that's why
18:59
mean that's why
19:00
mean that's why personal branding is a big deal because
19:01
personal branding is a big deal because
19:01
personal branding is a big deal because you can you can go
19:03
you can you can go
19:03
you can you can go through a lot of gates in in your career
19:05
through a lot of gates in in your career
19:05
through a lot of gates in in your career uh if you have
19:06
uh if you have
19:06
uh if you have a personal brand in the form of a blog
19:09
a personal brand in the form of a blog
19:09
a personal brand in the form of a blog social media preference get
19:10
social media preference get
19:10
social media preference get presents uh github etc i i talk a lot
19:13
presents uh github etc i i talk a lot
19:13
presents uh github etc i i talk a lot about that in my devbetter
19:15
about that in my devbetter
19:15
about that in my devbetter coaching group that i have um and and we
19:18
coaching group that i have um and and we
19:18
coaching group that i have um and and we are
19:18
are
19:18
are you know there's about a dozen folks in
19:20
you know there's about a dozen folks in
19:20
you know there's about a dozen folks in the in the group and i'm basically
19:21
the in the group and i'm basically
19:21
the in the group and i'm basically trying to help them
19:22
trying to help them
19:22
trying to help them find better opportunities get better
19:24
find better opportunities get better
19:24
find better opportunities get better jobs you know get better contracts and
19:26
jobs you know get better contracts and
19:26
jobs you know get better contracts and you know that that's a big part of it
19:27
you know that that's a big part of it
19:27
you know that that's a big part of it what you just described that's what you
19:28
what you just described that's what you
19:28
what you just described that's what you want yeah
19:30
want yeah
19:30
want yeah because because there's all kinds of
19:31
because because there's all kinds of
19:31
because because there's all kinds of resources out there like well how do i
19:32
resources out there like well how do i
19:32
resources out there like well how do i interview how do i get a job at facebook
19:34
interview how do i get a job at facebook
19:34
interview how do i get a job at facebook how do i what are the tricks to get past
19:35
how do i what are the tricks to get past
19:35
how do i what are the tricks to get past the interview it's like
19:36
the interview it's like
19:36
the interview it's like the biggest trick is that they come to
19:38
the biggest trick is that they come to
19:38
the biggest trick is that they come to you right they don't even they're not
19:40
you right they don't even they're not
19:40
you right they don't even they're not you know
19:41
you know
19:41
you know running you through the you know here's
19:42
running you through the you know here's
19:42
running you through the you know here's a thousand resumes and how do you make
19:43
a thousand resumes and how do you make
19:43
a thousand resumes and how do you make the cut
19:44
the cut
19:44
the cut like no you build yourself up with a
19:45
like no you build yourself up with a
19:45
like no you build yourself up with a reputation so they call you
19:47
reputation so they call you
19:47
reputation so they call you and they say we want you yeah that's
19:50
and they say we want you yeah that's
19:50
and they say we want you yeah that's that's true you know and
19:51
that's true you know and
19:51
that's true you know and that hasn't happened a lot to me you
19:53
that hasn't happened a lot to me you
19:53
that hasn't happened a lot to me you know since the internet bubble burst but
19:55
know since the internet bubble burst but
19:55
know since the internet bubble burst but you know because back then i didn't even
19:57
you know because back then i didn't even
19:57
you know because back then i didn't even really interview all i did was
19:59
really interview all i did was
19:59
really interview all i did was negotiate money right you know that was
20:01
negotiate money right you know that was
20:01
negotiate money right you know that was it you know
20:02
it you know
20:02
it you know and like and there are certainly a lot
20:04
and like and there are certainly a lot
20:04
and like and there are certainly a lot more developers now than there were yeah
20:06
more developers now than there were yeah
20:06
more developers now than there were yeah right it's doubling every five years and
20:07
right it's doubling every five years and
20:08
right it's doubling every five years and actually it's going to catch up to
20:09
actually it's going to catch up to
20:09
actually it's going to catch up to demand but we're not there yet so yeah i
20:11
demand but we're not there yet so yeah i
20:11
demand but we're not there yet so yeah i know
20:11
know
20:11
know the economy is still strong yeah so uh
20:15
the economy is still strong yeah so uh
20:15
the economy is still strong yeah so uh so so you know talk about clean
20:17
so so you know talk about clean
20:17
so so you know talk about clean architecture and
20:18
architecture and
20:18
architecture and like let's say asp.net core like we have
20:21
like let's say asp.net core like we have
20:21
like let's say asp.net core like we have listed here
20:22
listed here
20:22
listed here um uh i was thinking you know with the
20:25
um uh i was thinking you know with the
20:25
um uh i was thinking you know with the way that
20:26
way that
20:26
way that you know you do clean architecture and
20:28
you know you do clean architecture and
20:28
you know you do clean architecture and asp.net
20:29
asp.net
20:29
asp.net um does that include things like you
20:31
um does that include things like you
20:31
um does that include things like you know using the repository factory or
20:33
know using the repository factory or
20:33
know using the repository factory or upright how do you
20:34
upright how do you
20:34
upright how do you basically i guess what i'm asking is how
20:37
basically i guess what i'm asking is how
20:37
basically i guess what i'm asking is how do you kind of like
20:38
do you kind of like
20:38
do you kind of like set up the architecture for like your
20:40
set up the architecture for like your
20:40
set up the architecture for like your data access and
20:41
data access and
20:41
data access and sure sure um well i'm happy to share my
20:44
sure sure um well i'm happy to share my
20:44
sure sure um well i'm happy to share my screen and i can walk you through all of
20:45
screen and i can walk you through all of
20:45
screen and i can walk you through all of it
20:45
it
20:46
it um because i've done this you haven't
20:47
um because i've done this you haven't
20:47
um because i've done this you haven't read it sure yeah
20:49
read it sure yeah
20:49
read it sure yeah and and i've done you know i've set it
20:51
and and i've done you know i've set it
20:51
and and i've done you know i've set it up a lot of times for my own projects
20:52
up a lot of times for my own projects
20:52
up a lot of times for my own projects and also for clients
20:53
and also for clients
20:53
and also for clients i you know one of my new get packages
20:55
i you know one of my new get packages
20:55
i you know one of my new get packages that's out there is a solution template
20:57
that's out there is a solution template
20:57
that's out there is a solution template for
20:57
for
20:57
for clean architecture and you can just say
20:59
clean architecture and you can just say
20:59
clean architecture and you can just say net new clean desk arch and then give it
21:01
net new clean desk arch and then give it
21:01
net new clean desk arch and then give it a name and it boom it's like you've got
21:03
a name and it boom it's like you've got
21:03
a name and it boom it's like you've got your
21:04
your
21:04
your your solution so i'd be happy to show
21:05
your solution so i'd be happy to show
21:05
your solution so i'd be happy to show you that uh right here if you want
21:07
you that uh right here if you want
21:07
you that uh right here if you want so let's let's throw the screen up there
21:11
so let's let's throw the screen up there
21:11
so let's let's throw the screen up there i'm gonna check that out after the show
21:13
i'm gonna check that out after the show
21:13
i'm gonna check that out after the show all right so on
21:14
all right so on
21:14
all right so on on github.com our dallas clean
21:17
on github.com our dallas clean
21:17
on github.com our dallas clean architecture is where this is at
21:19
architecture is where this is at
21:19
architecture is where this is at and if you go on through the readme here
21:21
and if you go on through the readme here
21:21
and if you go on through the readme here there is a visual studio template you
21:23
there is a visual studio template you
21:23
there is a visual studio template you can find
21:23
can find
21:23
can find if you search for it it's usually a
21:25
if you search for it it's usually a
21:25
if you search for it it's usually a little bit out of date the most recent
21:27
little bit out of date the most recent
21:27
little bit out of date the most recent one is the
21:27
one is the
21:28
one is the net cli template and so one of the cool
21:29
net cli template and so one of the cool
21:29
net cli template and so one of the cool things that.net core
21:31
things that.net core
21:31
things that.net core now.net 5 gives us is the ability to
21:33
now.net 5 gives us is the ability to
21:33
now.net 5 gives us is the ability to create our own templates
21:35
create our own templates
21:35
create our own templates and so if you create your own template
21:36
and so if you create your own template
21:36
and so if you create your own template that has all the things set up the way
21:37
that has all the things set up the way
21:38
that has all the things set up the way you want
21:38
you want
21:38
you want um you can just you know publish that on
21:40
um you can just you know publish that on
21:40
um you can just you know publish that on nuget and then anyone can use it
21:41
nuget and then anyone can use it
21:41
nuget and then anyone can use it whether it's in your company or
21:43
whether it's in your company or
21:43
whether it's in your company or community and so that's what i've done
21:44
community and so that's what i've done
21:44
community and so that's what i've done so i've got this
21:45
so i've got this
21:45
so i've got this dot-net new uh you have to install it
21:47
dot-net new uh you have to install it
21:47
dot-net new uh you have to install it first right so run this.net new dash
21:49
first right so run this.net new dash
21:49
first right so run this.net new dash i our dallas.cleanarchitecture.template
21:52
i our dallas.cleanarchitecture.template
21:52
i our dallas.cleanarchitecture.template and then go to some folder and say
21:54
and then go to some folder and say
21:54
and then go to some folder and say datanewcleanarch-oh that's the name you
21:56
datanewcleanarch-oh that's the name you
21:56
datanewcleanarch-oh that's the name you want to give it
21:57
want to give it
21:57
want to give it your project name right so that'll set
21:58
your project name right so that'll set
21:58
your project name right so that'll set the name spaces and folder names to all
22:00
the name spaces and folder names to all
22:00
the name spaces and folder names to all be correct
22:01
be correct
22:01
be correct so let's just do that i've got a scratch
22:03
so let's just do that i've got a scratch
22:03
so let's just do that i've got a scratch folder that i'm going to use here
22:05
folder that i'm going to use here
22:05
folder that i'm going to use here we'll copy this line right there
22:09
we'll copy this line right there
22:09
we'll copy this line right there and paste it in here and what should we
22:11
and paste it in here and what should we
22:11
and paste it in here and what should we name our
22:12
name our
22:12
name our project uh rock in the code world
22:16
project uh rock in the code world
22:16
project uh rock in the code world rocking the code world there we go there
22:19
rocking the code world there we go there
22:19
rocking the code world there we go there you go
22:19
you go
22:19
you go and it says there is no oh i guess so
22:21
and it says there is no oh i guess so
22:21
and it says there is no oh i guess so maybe i have to install it again
22:23
maybe i have to install it again
22:23
maybe i have to install it again i probably need to install it again
22:24
i probably need to install it again
22:24
i probably need to install it again because i've got a new version.net on
22:26
because i've got a new version.net on
22:26
because i've got a new version.net on here no
22:27
here no
22:27
here no yeah this way i'll show you that the
22:31
yeah this way i'll show you that the
22:31
yeah this way i'll show you that the installer works or not because
22:33
installer works or not because
22:33
installer works or not because it won't work but look it worked hey
22:36
it won't work but look it worked hey
22:36
it won't work but look it worked hey all right let's try this again
22:40
all right let's try this again
22:40
all right let's try this again and the template was created all right
22:41
and the template was created all right
22:41
and the template was created all right so now if i cd into
22:43
so now if i cd into
22:43
so now if i cd into uh rockin there we go uh
22:46
uh rockin there we go uh
22:46
uh rockin there we go uh and view it this is this is what's there
22:48
and view it this is this is what's there
22:48
and view it this is this is what's there in the default folder so there's a
22:50
in the default folder so there's a
22:50
in the default folder so there's a source folder a test folder
22:52
source folder a test folder
22:52
source folder a test folder uh and a bunch of the stuff you'd expect
22:53
uh and a bunch of the stuff you'd expect
22:53
uh and a bunch of the stuff you'd expect in the in the middle and then the
22:54
in the in the middle and then the
22:54
in the in the middle and then the solution
22:55
solution
22:55
solution um i've got the latest preview build
22:57
um i've got the latest preview build
22:58
um i've got the latest preview build here
22:58
here
22:58
here of visual studio 2022 so i'm just going
23:01
of visual studio 2022 so i'm just going
23:01
of visual studio 2022 so i'm just going to go to
23:03
to go to
23:03
to go to sql and scratch dev scratch uh
23:09
sql and scratch dev scratch uh
23:09
sql and scratch dev scratch uh no you're supposed to go there so you
23:10
no you're supposed to go there so you
23:10
no you're supposed to go there so you call in backslash dev backslash scratch
23:13
call in backslash dev backslash scratch
23:13
call in backslash dev backslash scratch backs let's rock in there we go and
23:16
backs let's rock in there we go and
23:16
backs let's rock in there we go and we'll open up uh
23:17
we'll open up uh
23:17
we'll open up uh that solution and we can talk about
23:19
that solution and we can talk about
23:19
that solution and we can talk about what's in here so
23:20
what's in here so
23:20
what's in here so oh before you do that let me break for
23:22
oh before you do that let me break for
23:22
oh before you do that let me break for just a second and say that
23:24
just a second and say that
23:24
just a second and say that you know if you guys want to ask
23:25
you know if you guys want to ask
23:25
you know if you guys want to ask questions to steve please put them in
23:27
questions to steve please put them in
23:27
questions to steve please put them in the comments
23:28
the comments
23:28
the comments i know someone is already cited because
23:30
i know someone is already cited because
23:30
i know someone is already cited because you're one of
23:31
you're one of
23:31
you're one of they're you're one of their favorite
23:33
they're you're one of their favorite
23:33
they're you're one of their favorite people so
23:34
people so
23:34
people so ask some questions people while he while
23:37
ask some questions people while he while
23:37
ask some questions people while he while we're well he's
23:38
we're well he's
23:38
we're well he's showing this okay all right cool yeah
23:41
showing this okay all right cool yeah
23:41
showing this okay all right cool yeah questions are always welcome
23:42
questions are always welcome
23:42
questions are always welcome um okay so in here there are about seven
23:45
um okay so in here there are about seven
23:45
um okay so in here there are about seven projects
23:46
projects
23:46
projects and what you would really have in your
23:48
and what you would really have in your
23:48
and what you would really have in your production code would be six of these
23:50
production code would be six of these
23:50
production code would be six of these because one of these things this shared
23:52
because one of these things this shared
23:52
because one of these things this shared kernel project um you would pull out of
23:54
kernel project um you would pull out of
23:54
kernel project um you would pull out of here and put it in its own separate
23:55
here and put it in its own separate
23:55
here and put it in its own separate project or solution
23:56
project or solution
23:56
project or solution and then you would publish that as a
23:57
and then you would publish that as a
23:58
and then you would publish that as a nuget package and then these other
23:59
nuget package and then these other
23:59
nuget package and then these other projects would depend on that
24:01
projects would depend on that
24:01
projects would depend on that now this is this is somewhat opinionated
24:03
now this is this is somewhat opinionated
24:03
now this is this is somewhat opinionated this is like how i would like to set
24:05
this is like how i would like to set
24:05
this is like how i would like to set things up
24:05
things up
24:05
things up um and obviously you can tweak it to be
24:07
um and obviously you can tweak it to be
24:07
um and obviously you can tweak it to be how you want and it's not a sample app
24:09
how you want and it's not a sample app
24:09
how you want and it's not a sample app right it's a solution template so it's a
24:11
right it's a solution template so it's a
24:11
right it's a solution template so it's a starting point
24:11
starting point
24:12
starting point uh so there's very minimal stuff in here
24:14
uh so there's very minimal stuff in here
24:14
uh so there's very minimal stuff in here but there is enough that you can get
24:15
but there is enough that you can get
24:15
but there is enough that you can get started
24:16
started
24:16
started the i i because i don't have a ton of
24:18
the i i because i don't have a ton of
24:18
the i i because i don't have a ton of time i don't want to have to maintain
24:19
time i don't want to have to maintain
24:19
time i don't want to have to maintain different versions of this for
24:21
different versions of this for
24:21
different versions of this for a web api project or a
24:24
a web api project or a
24:24
a web api project or a api endpoint style project or a razer
24:26
api endpoint style project or a razer
24:26
api endpoint style project or a razer pages project or an mvc view project
24:28
pages project or an mvc view project
24:28
pages project or an mvc view project and so all of those are in here and so
24:31
and so all of those are in here and so
24:31
and so all of those are in here and so you just rip out the ones you don't want
24:32
you just rip out the ones you don't want
24:32
you just rip out the ones you don't want so if you look in here
24:33
so if you look in here
24:33
so if you look in here you'll see there there's controllers and
24:35
you'll see there there's controllers and
24:35
you'll see there there's controllers and you can have a home controller and
24:37
you can have a home controller and
24:37
you can have a home controller and there's views
24:38
there's views
24:38
there's views with you know home view there's razor
24:39
with you know home view there's razor
24:40
with you know home view there's razor pages so
24:41
pages so
24:41
pages so you know there's just some stuff in here
24:42
you know there's just some stuff in here
24:42
you know there's just some stuff in here that uses razor pages there's an api
24:44
that uses razor pages there's an api
24:44
that uses razor pages there's an api with a api controller that shows you
24:46
with a api controller that shows you
24:46
with a api controller that shows you stuff
24:46
stuff
24:46
stuff and then there's endpoints using my api
24:49
and then there's endpoints using my api
24:49
and then there's endpoints using my api endpoints package which we'll also
24:50
endpoints package which we'll also
24:50
endpoints package which we'll also hopefully have a chance to talk about
24:51
hopefully have a chance to talk about
24:51
hopefully have a chance to talk about today
24:52
today
24:52
today um so that's just in the ui uh but in
24:55
um so that's just in the ui uh but in
24:55
um so that's just in the ui uh but in the core
24:55
the core
24:56
the core this is where you put all your your
24:58
this is where you put all your your
24:58
this is where you put all your your business logic your domain
24:59
business logic your domain
25:00
business logic your domain model if you're following domain driven
25:01
model if you're following domain driven
25:01
model if you're following domain driven design um and if we look at the
25:03
design um and if we look at the
25:03
design um and if we look at the dependencies here you'll see that it has
25:06
dependencies here you'll see that it has
25:06
dependencies here you'll see that it has only the the shared kernel project which
25:08
only the the shared kernel project which
25:08
only the the shared kernel project which again in your real application when you
25:10
again in your real application when you
25:10
again in your real application when you set this up that would be a package
25:12
set this up that would be a package
25:12
set this up that would be a package and not infrastructure not web so the
25:15
and not infrastructure not web so the
25:15
and not infrastructure not web so the other things depend on the core or the
25:16
other things depend on the core or the
25:16
other things depend on the core or the domain model
25:17
domain model
25:18
domain model and not the other way around now in here
25:20
and not the other way around now in here
25:20
and not the other way around now in here you're going to have your interfaces
25:21
you're going to have your interfaces
25:21
you're going to have your interfaces for various things in shared kernel is
25:24
for various things in shared kernel is
25:24
for various things in shared kernel is actually where i've got my
25:25
actually where i've got my
25:25
actually where i've got my my data access stuff and so that's where
25:28
my data access stuff and so that's where
25:28
my data access stuff and so that's where the repositories are that you were
25:29
the repositories are that you were
25:29
the repositories are that you were talking about
25:31
talking about
25:31
talking about and and i'm using another package of
25:33
and and i'm using another package of
25:33
and and i'm using another package of mine which is called the
25:34
mine which is called the
25:34
mine which is called the uh specification package and there's a
25:37
uh specification package and there's a
25:37
uh specification package and there's a pattern that i use with the repository
25:39
pattern that i use with the repository
25:39
pattern that i use with the repository that takes care of some of the problems
25:40
that takes care of some of the problems
25:40
that takes care of some of the problems you run into with repositories so yeah
25:42
you run into with repositories so yeah
25:42
you run into with repositories so yeah um a lot of folks online aren't really a
25:45
um a lot of folks online aren't really a
25:45
um a lot of folks online aren't really a fan of the repository pattern these days
25:46
fan of the repository pattern these days
25:46
fan of the repository pattern these days and they'll say
25:47
and they'll say
25:47
and they'll say hey you know what if you have a db
25:49
hey you know what if you have a db
25:49
hey you know what if you have a db context you don't need a repository it's
25:50
context you don't need a repository it's
25:50
context you don't need a repository it's already implementing that
25:53
already implementing that
25:53
already implementing that and that's really kind of not
25:54
and that's really kind of not
25:54
and that's really kind of not understanding what the point of the
25:55
understanding what the point of the
25:56
understanding what the point of the repository pattern is
25:57
repository pattern is
25:57
repository pattern is uh because the only thing the repository
25:59
uh because the only thing the repository
25:59
uh because the only thing the repository pattern is valuable because of
26:01
pattern is valuable because of
26:01
pattern is valuable because of or the only reason it's valuable um is
26:03
or the only reason it's valuable um is
26:03
or the only reason it's valuable um is because of the abstraction
26:05
because of the abstraction
26:05
because of the abstraction that is your abstraction that you own
26:06
that is your abstraction that you own
26:06
that is your abstraction that you own and you can depend on um and so this is
26:08
and you can depend on um and so this is
26:08
and you can depend on um and so this is the
26:09
the
26:09
the repository abstraction and right now
26:11
repository abstraction and right now
26:11
repository abstraction and right now like i said it's coming from our dallas
26:13
like i said it's coming from our dallas
26:13
like i said it's coming from our dallas specification
26:14
specification
26:14
specification um but it would have methods that look
26:15
um but it would have methods that look
26:15
um but it would have methods that look kind of like this um
26:17
kind of like this um
26:17
kind of like this um and so it'll it'll get list add update
26:19
and so it'll it'll get list add update
26:19
and so it'll it'll get list add update delete um but this list async here
26:22
delete um but this list async here
26:22
delete um but this list async here that takes in a specification takes care
26:24
that takes in a specification takes care
26:24
that takes in a specification takes care of one of the biggest problems that
26:25
of one of the biggest problems that
26:25
of one of the biggest problems that folks have with repositories which is
26:27
folks have with repositories which is
26:27
folks have with repositories which is that they they make it so that you um
26:30
that they they make it so that you um
26:30
that they they make it so that you um hide too much of the functionality of
26:32
hide too much of the functionality of
26:32
hide too much of the functionality of your
26:32
your
26:32
your of your implementation away specifically
26:34
of your implementation away specifically
26:34
of your implementation away specifically if you're using any framework
26:36
if you're using any framework
26:36
if you're using any framework and a repository a lot of folks run into
26:38
and a repository a lot of folks run into
26:38
and a repository a lot of folks run into this problem where
26:40
this problem where
26:40
this problem where they can't pick which columns they want
26:41
they can't pick which columns they want
26:41
they can't pick which columns they want they can't pick which other
26:43
they can't pick which other
26:43
they can't pick which other tables to include or which other
26:44
tables to include or which other
26:44
tables to include or which other entities to include and the only way
26:46
entities to include and the only way
26:46
entities to include and the only way that they know how to do that
26:48
that they know how to do that
26:48
that they know how to do that is to add more methods right so maybe
26:50
is to add more methods right so maybe
26:50
is to add more methods right so maybe they start out with a generic repository
26:51
they start out with a generic repository
26:51
they start out with a generic repository and then they're like well i need to get
26:52
and then they're like well i need to get
26:52
and then they're like well i need to get customer with address
26:54
customer with address
26:54
customer with address so they create a new customer repository
26:56
so they create a new customer repository
26:56
so they create a new customer repository that inherits from
26:57
that inherits from
26:57
that inherits from i repository of customer and on there
27:00
i repository of customer and on there
27:00
i repository of customer and on there they say
27:00
they say
27:00
they say get customer with address right and have
27:03
get customer with address right and have
27:03
get customer with address right and have this extra method
27:04
this extra method
27:04
this extra method but now their api is kind of broken
27:06
but now their api is kind of broken
27:06
but now their api is kind of broken because everywhere in their code there
27:08
because everywhere in their code there
27:08
because everywhere in their code there it's like well do i get the i repository
27:10
it's like well do i get the i repository
27:10
it's like well do i get the i repository of customer or do i get the i customer
27:11
of customer or do i get the i customer
27:11
of customer or do i get the i customer repository which one should i pick
27:13
repository which one should i pick
27:13
repository which one should i pick um and developers now have to make a
27:15
um and developers now have to make a
27:15
um and developers now have to make a decision and ambiguity is bad for
27:17
decision and ambiguity is bad for
27:17
decision and ambiguity is bad for developers
27:18
developers
27:18
developers uh we want to have one clear way to do
27:20
uh we want to have one clear way to do
27:20
uh we want to have one clear way to do it and so what the specification
27:22
it and so what the specification
27:22
it and so what the specification does is it means that this this
27:24
does is it means that this this
27:24
does is it means that this this interface and the the code that
27:26
interface and the the code that
27:26
interface and the the code that implements it now follows the open close
27:28
implements it now follows the open close
27:28
implements it now follows the open close principle meaning i don't have to change
27:30
principle meaning i don't have to change
27:30
principle meaning i don't have to change it to change its behavior
27:31
it to change its behavior
27:31
it to change its behavior right whereas before if i didn't have
27:34
right whereas before if i didn't have
27:34
right whereas before if i didn't have that i would have to go and create more
27:35
that i would have to go and create more
27:35
that i would have to go and create more methods every time i wanted some other
27:37
methods every time i wanted some other
27:37
methods every time i wanted some other variable way to get the data
27:38
variable way to get the data
27:38
variable way to get the data by using a specification i inject all of
27:41
by using a specification i inject all of
27:41
by using a specification i inject all of the query details
27:42
the query details
27:42
the query details in the form of that specification and
27:44
in the form of that specification and
27:44
in the form of that specification and now i only need these methods on the
27:46
now i only need these methods on the
27:46
now i only need these methods on the repository i never need another one
27:48
repository i never need another one
27:48
repository i never need another one i don't need to have custom uh
27:50
i don't need to have custom uh
27:50
i don't need to have custom uh implementations of my repository and
27:51
implementations of my repository and
27:52
implementations of my repository and except in very rare cases
27:53
except in very rare cases
27:53
except in very rare cases um and so it solves that problem for it
27:56
um and so it solves that problem for it
27:56
um and so it solves that problem for it so i can show you an example of that so
27:58
so i can show you an example of that so
27:58
so i can show you an example of that so let's look at this i definitely want to
27:59
let's look at this i definitely want to
27:59
let's look at this i definitely want to check that out
28:00
check that out
28:00
check that out yeah let me let me show you this project
28:02
yeah let me let me show you this project
28:02
yeah let me let me show you this project aggregate um
28:04
aggregate um
28:04
aggregate um so aggregates are another ddd thing it's
28:05
so aggregates are another ddd thing it's
28:06
so aggregates are another ddd thing it's a way to group together related
28:07
a way to group together related
28:07
a way to group together related uh things usually like master detail
28:09
uh things usually like master detail
28:09
uh things usually like master detail style relationships like
28:11
style relationships like
28:11
style relationships like a customer with their addresses perhaps
28:13
a customer with their addresses perhaps
28:13
a customer with their addresses perhaps and so when you persist it when you
28:15
and so when you persist it when you
28:15
and so when you persist it when you fetch it from the database
28:16
fetch it from the database
28:16
fetch it from the database or save it you want to do it as a unit
28:17
or save it you want to do it as a unit
28:17
or save it you want to do it as a unit with all those things
28:19
with all those things
28:19
with all those things and so in this example i have a to-do
28:21
and so in this example i have a to-do
28:21
and so in this example i have a to-do list but the to-do list is part of a
28:24
list but the to-do list is part of a
28:24
list but the to-do list is part of a project
28:24
project
28:24
project so it's not just a bunch of to-do items
28:27
so it's not just a bunch of to-do items
28:27
so it's not just a bunch of to-do items it's one or more projects each project
28:29
it's one or more projects each project
28:29
it's one or more projects each project has a bunch of to-do
28:30
has a bunch of to-do
28:30
has a bunch of to-do items or tasks and and so when you've
28:32
items or tasks and and so when you've
28:32
items or tasks and and so when you've completed all the to-do items then the
28:33
completed all the to-do items then the
28:33
completed all the to-do items then the project is complete
28:35
project is complete
28:35
project is complete um and so again this is not a sample app
28:37
um and so again this is not a sample app
28:37
um and so again this is not a sample app it's just really simple
28:38
it's just really simple
28:38
it's just really simple um but this is what a base entity would
28:41
um but this is what a base entity would
28:41
um but this is what a base entity would look like your base entity
28:42
look like your base entity
28:42
look like your base entity type comes from shared kernel and on
28:45
type comes from shared kernel and on
28:45
type comes from shared kernel and on there basically all it gives you is an
28:46
there basically all it gives you is an
28:46
there basically all it gives you is an id
28:47
id
28:47
id and a collection of events that you can
28:49
and a collection of events that you can
28:49
and a collection of events that you can use to if you want to follow the main
28:50
use to if you want to follow the main
28:50
use to if you want to follow the main events pattern
28:52
events pattern
28:52
events pattern then the project is here and it just has
28:55
then the project is here and it just has
28:55
then the project is here and it just has this collection of items
28:56
this collection of items
28:56
this collection of items which it exposes through an innumerable
28:59
which it exposes through an innumerable
28:59
which it exposes through an innumerable so that you can't actually manipulate
29:01
so that you can't actually manipulate
29:01
so that you can't actually manipulate the list except through its exposed
29:02
the list except through its exposed
29:02
the list except through its exposed methods and that's very important when
29:04
methods and that's very important when
29:04
methods and that's very important when you're exposing lists
29:06
you're exposing lists
29:06
you're exposing lists and you actually expose as a property
29:08
and you actually expose as a property
29:08
and you actually expose as a property the list you end up making it so that
29:10
the list you end up making it so that
29:10
the list you end up making it so that anything in your application
29:11
anything in your application
29:12
anything in your application can mess with that list and the parent
29:13
can mess with that list and the parent
29:13
can mess with that list and the parent object has no idea
29:15
object has no idea
29:15
object has no idea right so if you have any behavior or
29:17
right so if you have any behavior or
29:17
right so if you have any behavior or validation you want to do around that
29:19
validation you want to do around that
29:19
validation you want to do around that you need to encapsulate that list which
29:21
you need to encapsulate that list which
29:22
you need to encapsulate that list which is what these two lines are doing
29:23
is what these two lines are doing
29:23
is what these two lines are doing they're making it so no one can get to
29:24
they're making it so no one can get to
29:24
they're making it so no one can get to this underscore items
29:26
this underscore items
29:26
this underscore items except within this this class and then
29:29
except within this this class and then
29:29
except within this this class and then they
29:29
they
29:29
they provide just the operations they want to
29:31
provide just the operations they want to
29:31
provide just the operations they want to provide for how to manipulate that so
29:33
provide for how to manipulate that so
29:33
provide for how to manipulate that so right now the only thing you can do on
29:34
right now the only thing you can do on
29:34
right now the only thing you can do on this project is add
29:35
this project is add
29:36
this project is add items to it you can't remove them you
29:37
items to it you can't remove them you
29:37
items to it you can't remove them you can't clear the list you can't do
29:38
can't clear the list you can't do
29:38
can't clear the list you can't do anything else
29:39
anything else
29:40
anything else when you add an item i'm going to make
29:41
when you add an item i'm going to make
29:41
when you add an item i'm going to make sure it's not null with a guard clause
29:43
sure it's not null with a guard clause
29:43
sure it's not null with a guard clause yeah and actually i have another nuget
29:44
yeah and actually i have another nuget
29:44
yeah and actually i have another nuget package that has those guard clauses
29:46
package that has those guard clauses
29:46
package that has those guard clauses and i'm also going to raise an event
29:48
and i'm also going to raise an event
29:48
and i'm also going to raise an event that i could react to
29:50
that i could react to
29:50
that i could react to okay now getting into the specifications
29:53
okay now getting into the specifications
29:53
okay now getting into the specifications there's various ways i'm going to want
29:54
there's various ways i'm going to want
29:54
there's various ways i'm going to want to list
29:55
to list
29:55
to list on these projects with their with their
29:58
on these projects with their with their
29:58
on these projects with their with their items
29:58
items
29:58
items their to-do items so inside this
30:00
their to-do items so inside this
30:00
their to-do items so inside this aggregate i have the specifications that
30:02
aggregate i have the specifications that
30:02
aggregate i have the specifications that are related to
30:03
are related to
30:03
are related to project and so i can say give me a list
30:06
project and so i can say give me a list
30:06
project and so i can say give me a list of all the items that are incomplete
30:09
of all the items that are incomplete
30:09
of all the items that are incomplete and so i get a specification of just the
30:11
and so i get a specification of just the
30:11
and so i get a specification of just the item
30:12
item
30:12
item and this incomplete item search is going
30:15
and this incomplete item search is going
30:15
and this incomplete item search is going to go and find me all the items
30:16
to go and find me all the items
30:16
to go and find me all the items where it's not done and it has this
30:20
where it's not done and it has this
30:20
where it's not done and it has this search string that i'm looking for
30:21
search string that i'm looking for
30:22
search string that i'm looking for and then there's another variant of that
30:23
and then there's another variant of that
30:23
and then there's another variant of that here that just checks for whether it's
30:25
here that just checks for whether it's
30:25
here that just checks for whether it's done and then there's
30:27
done and then there's
30:27
done and then there's go fetch me the project with its items
30:29
go fetch me the project with its items
30:29
go fetch me the project with its items um here and so
30:31
um here and so
30:31
um here and so this will get me one project with with
30:33
this will get me one project with with
30:33
this will get me one project with with all of its items
30:34
all of its items
30:34
all of its items now do those uh that spec
30:38
now do those uh that spec
30:38
now do those uh that spec uh class you have is that is that
30:40
uh class you have is that is that
30:40
uh class you have is that is that implementing the i specification
30:41
implementing the i specification
30:41
implementing the i specification the was it the i specification interface
30:45
the was it the i specification interface
30:45
the was it the i specification interface uh it's implementing a base class called
30:47
uh it's implementing a base class called
30:47
uh it's implementing a base class called specification of t which is defined in
30:49
specification of t which is defined in
30:49
specification of t which is defined in my our dallas specification nuget
30:50
my our dallas specification nuget
30:50
my our dallas specification nuget package
30:51
package
30:51
package okay so inside of there it has all the
30:53
okay so inside of there it has all the
30:53
okay so inside of there it has all the logic for this but basically
30:55
logic for this but basically
30:55
logic for this but basically it just has a bunch of iqueryable stuff
30:57
it just has a bunch of iqueryable stuff
30:57
it just has a bunch of iqueryable stuff on it that it builds up internally
30:59
on it that it builds up internally
30:59
on it that it builds up internally i don't expose iqueryable outside of my
31:01
i don't expose iqueryable outside of my
31:01
i don't expose iqueryable outside of my data layer
31:02
data layer
31:02
data layer but within the repository within a given
31:04
but within the repository within a given
31:04
but within the repository within a given query i use iqueryables to build up the
31:06
query i use iqueryables to build up the
31:06
query i use iqueryables to build up the query
31:07
query
31:07
query here and then i execute that in the
31:10
here and then i execute that in the
31:10
here and then i execute that in the repository
31:11
repository
31:11
repository and like i said my repository isn't here
31:13
and like i said my repository isn't here
31:13
and like i said my repository isn't here technically either
31:15
technically either
31:15
technically either i've got the interface defined here but
31:17
i've got the interface defined here but
31:17
i've got the interface defined here but the actual implementation
31:19
the actual implementation
31:19
the actual implementation is coming from the our dallas
31:21
is coming from the our dallas
31:21
is coming from the our dallas specification
31:22
specification
31:22
specification so i'm implementing this i repository
31:24
so i'm implementing this i repository
31:24
so i'm implementing this i repository base of t
31:25
base of t
31:25
base of t and then when i wire everything up i
31:27
and then when i wire everything up i
31:27
and then when i wire everything up i wire that up to use
31:29
wire that up to use
31:29
wire that up to use a repository that's defined inside of
31:31
a repository that's defined inside of
31:32
a repository that's defined inside of that
31:32
that
31:32
that that nuget package you don't have to do
31:34
that nuget package you don't have to do
31:34
that nuget package you don't have to do it that way you can write your own
31:36
it that way you can write your own
31:36
it that way you can write your own but this just made it so i didn't have
31:37
but this just made it so i didn't have
31:37
but this just made it so i didn't have to have as much code inside this this
31:38
to have as much code inside this this
31:38
to have as much code inside this this template
31:40
template
31:40
template and actually the the app the repository
31:44
and actually the the app the repository
31:44
and actually the the app the repository itself is here
31:45
itself is here
31:45
itself is here it's just it doesn't actually have
31:46
it's just it doesn't actually have
31:46
it's just it doesn't actually have anything in it like this is it it is in
31:48
anything in it like this is it it is in
31:48
anything in it like this is it it is in my
31:49
my
31:49
my solution um but all the functionality is
31:51
solution um but all the functionality is
31:51
solution um but all the functionality is in the base
31:53
in the base
31:53
in the base all right um another thing that's really
31:56
all right um another thing that's really
31:56
all right um another thing that's really important to me
31:56
important to me
31:56
important to me in designing solutions and architecting
31:59
in designing solutions and architecting
31:59
in designing solutions and architecting solutions is using constraints
32:01
solutions is using constraints
32:01
solutions is using constraints uh in an intelligent way one of the
32:02
uh in an intelligent way one of the
32:02
uh in an intelligent way one of the things i like to say in my training is i
32:04
things i like to say in my training is i
32:04
things i like to say in my training is i want developers
32:05
want developers
32:05
want developers to fall into the pit of success right
32:07
to fall into the pit of success right
32:07
to fall into the pit of success right and the way you do that is you make it
32:09
and the way you do that is you make it
32:09
and the way you do that is you make it so that the
32:09
so that the
32:10
so that the wrong thing is hard and the right thing
32:11
wrong thing is hard and the right thing
32:11
wrong thing is hard and the right thing is easy and constraints are great for
32:13
is easy and constraints are great for
32:13
is easy and constraints are great for that
32:14
that
32:14
that and so one of the things that i'm using
32:16
and so one of the things that i'm using
32:16
and so one of the things that i'm using here as a constraint is this i aggregate
32:18
here as a constraint is this i aggregate
32:18
here as a constraint is this i aggregate root constraint
32:18
root constraint
32:18
root constraint on t so t is the entity that this is
32:22
on t so t is the entity that this is
32:22
on t so t is the entity that this is going to work with
32:23
going to work with
32:23
going to work with and with generic constraints you get
32:25
and with generic constraints you get
32:25
and with generic constraints you get compiler
32:26
compiler
32:26
compiler validation compiler checks that say
32:29
validation compiler checks that say
32:29
validation compiler checks that say whether or not that type
32:30
whether or not that type
32:30
whether or not that type is you know a class uh which means that
32:33
is you know a class uh which means that
32:33
is you know a class uh which means that i couldn't for instance have a
32:34
i couldn't for instance have a
32:34
i couldn't for instance have a an i repository of int right it's not a
32:37
an i repository of int right it's not a
32:37
an i repository of int right it's not a class right so it wouldn't work
32:38
class right so it wouldn't work
32:38
class right so it wouldn't work um but i can also say it has to be an i
32:40
um but i can also say it has to be an i
32:40
um but i can also say it has to be an i aggregate root
32:42
aggregate root
32:42
aggregate root and an aggregate root goes back to that
32:44
and an aggregate root goes back to that
32:44
and an aggregate root goes back to that ddd aggregates
32:45
ddd aggregates
32:45
ddd aggregates uh pattern thing so if we if we look up
32:47
uh pattern thing so if we if we look up
32:47
uh pattern thing so if we if we look up here at project and to do item again
32:50
here at project and to do item again
32:50
here at project and to do item again if you look at to do item it's just a
32:51
if you look at to do item it's just a
32:51
if you look at to do item it's just a base entity
32:53
base entity
32:53
base entity but if you look at its project the
32:55
but if you look at its project the
32:55
but if you look at its project the project is a base entity but also
32:57
project is a base entity but also
32:57
project is a base entity but also implements i aggregate root
32:59
implements i aggregate root
32:59
implements i aggregate root now i aggregate root is a marker
33:01
now i aggregate root is a marker
33:01
now i aggregate root is a marker interface it doesn't actually have any
33:02
interface it doesn't actually have any
33:02
interface it doesn't actually have any logic in it at all it doesn't define any
33:03
logic in it at all it doesn't define any
33:03
logic in it at all it doesn't define any methods or say you have to implement
33:05
methods or say you have to implement
33:05
methods or say you have to implement anything at all
33:06
anything at all
33:06
anything at all but it is a type and so i can use it
33:08
but it is a type and so i can use it
33:08
but it is a type and so i can use it with constraints and so it's a way for
33:09
with constraints and so it's a way for
33:10
with constraints and so it's a way for me to tell the compiler that this thing
33:12
me to tell the compiler that this thing
33:12
me to tell the compiler that this thing is an aggregate route
33:14
is an aggregate route
33:14
is an aggregate route and one of the rules that you should
33:15
and one of the rules that you should
33:15
and one of the rules that you should follow with aggregates is that you only
33:17
follow with aggregates is that you only
33:17
follow with aggregates is that you only persist
33:18
persist
33:18
persist at the aggregate level you don't persist
33:20
at the aggregate level you don't persist
33:20
at the aggregate level you don't persist individual children under it
33:22
individual children under it
33:22
individual children under it and so now with the repository that i'm
33:24
and so now with the repository that i'm
33:24
and so now with the repository that i'm using i'll get a compiler error if i try
33:26
using i'll get a compiler error if i try
33:26
using i'll get a compiler error if i try to use
33:27
to use
33:27
to use uh a repository of to do item um
33:30
uh a repository of to do item um
33:30
uh a repository of to do item um and to show you what that looks like if
33:31
and to show you what that looks like if
33:32
and to show you what that looks like if i come down to like this projects
33:33
i come down to like this projects
33:33
i come down to like this projects controller
33:34
controller
33:34
controller right now it's taking in an irepository
33:36
right now it's taking in an irepository
33:36
right now it's taking in an irepository project but if i said you know what i
33:38
project but if i said you know what i
33:38
project but if i said you know what i don't need the project i just want this
33:39
don't need the project i just want this
33:39
don't need the project i just want this to do item
33:40
to do item
33:40
to do item let me give an irepository of to do item
33:43
let me give an irepository of to do item
33:43
let me give an irepository of to do item you know to do repo right what's this
33:47
you know to do repo right what's this
33:47
you know to do repo right what's this going to do it's going to tell me
33:49
going to do it's going to tell me
33:49
going to do it's going to tell me i cannot use to do item as a type
33:51
i cannot use to do item as a type
33:51
i cannot use to do item as a type parameter t and a generic type i
33:53
parameter t and a generic type i
33:53
parameter t and a generic type i repository of t
33:54
repository of t
33:54
repository of t because i can't convert a to do item to
33:56
because i can't convert a to do item to
33:56
because i can't convert a to do item to an i aggregate root
33:58
an i aggregate root
33:58
an i aggregate root right so it's the compiler won't let the
33:59
right so it's the compiler won't let the
33:59
right so it's the compiler won't let the developer do the thing that they're not
34:01
developer do the thing that they're not
34:01
developer do the thing that they're not supposed to do
34:01
supposed to do
34:02
supposed to do yeah and that's that's way better than
34:04
yeah and that's that's way better than
34:04
yeah and that's that's way better than if
34:05
if
34:05
if i just put in my code here where the
34:07
i just put in my code here where the
34:07
i just put in my code here where the project was
34:08
project was
34:08
project was uh you know instead of this maybe i had
34:10
uh you know instead of this maybe i had
34:10
uh you know instead of this maybe i had some comment that says
34:11
some comment that says
34:11
some comment that says aggregate root right that that's not
34:14
aggregate root right that that's not
34:14
aggregate root right that that's not very useful right maybe the developer
34:15
very useful right maybe the developer
34:15
very useful right maybe the developer sees it maybe they don't maybe they
34:16
sees it maybe they don't maybe they
34:16
sees it maybe they don't maybe they follow it maybe they don't
34:18
follow it maybe they don't
34:18
follow it maybe they don't this is visible it it communicates
34:21
this is visible it it communicates
34:21
this is visible it it communicates intent
34:21
intent
34:21
intent but more importantly it enforces that at
34:24
but more importantly it enforces that at
34:24
but more importantly it enforces that at the compiler level
34:25
the compiler level
34:25
the compiler level right um and so coming back to the the
34:28
right um and so coming back to the the
34:28
right um and so coming back to the the high level view here
34:30
high level view here
34:30
high level view here overall right there's these three
34:32
overall right there's these three
34:32
overall right there's these three projects and if you look at what depends
34:34
projects and if you look at what depends
34:34
projects and if you look at what depends on what
34:34
on what
34:34
on what we'll forget about shared colonel still
34:36
we'll forget about shared colonel still
34:36
we'll forget about shared colonel still for a minute infrastructure's dependency
34:38
for a minute infrastructure's dependency
34:38
for a minute infrastructure's dependency is on uh just core and also shared
34:41
is on uh just core and also shared
34:42
is on uh just core and also shared kernel pretty much everything depends on
34:43
kernel pretty much everything depends on
34:43
kernel pretty much everything depends on share kernel yeah and then web depends
34:45
share kernel yeah and then web depends
34:45
share kernel yeah and then web depends on both
34:46
on both
34:46
on both uh projects of infrastructure and in
34:49
uh projects of infrastructure and in
34:49
uh projects of infrastructure and in cork or in this case it's transitively
34:51
cork or in this case it's transitively
34:51
cork or in this case it's transitively because it goes through infrastructure
34:52
because it goes through infrastructure
34:52
because it goes through infrastructure but
34:52
but
34:52
but um but it does it depends on core too uh
34:55
um but it does it depends on core too uh
34:55
um but it does it depends on core too uh and so if we run this
34:56
and so if we run this
34:56
and so if we run this just to show you what it looks like when
34:58
just to show you what it looks like when
34:58
just to show you what it looks like when you start
34:59
you start
34:59
you start uh it just has a simple little home page
35:01
uh it just has a simple little home page
35:01
uh it just has a simple little home page that shows you
35:02
that shows you
35:02
that shows you what it can do well i definitely know
35:05
what it can do well i definitely know
35:05
what it can do well i definitely know what i'm watching next week on
35:06
what i'm watching next week on
35:06
what i'm watching next week on pluralsight
35:07
pluralsight
35:07
pluralsight [Laughter]
35:09
[Laughter]
35:09
[Laughter] i gotta learn more about this this
35:10
i gotta learn more about this this
35:10
i gotta learn more about this this sounds really awesome i'm
35:12
sounds really awesome i'm
35:12
sounds really awesome i'm i'm i i hate that i haven't even looked
35:15
i'm i i hate that i haven't even looked
35:15
i'm i i hate that i haven't even looked at this yet
35:16
at this yet
35:16
at this yet so i'm glad you're here today yeah i
35:18
so i'm glad you're here today yeah i
35:18
so i'm glad you're here today yeah i just found a bug this thing says lastest
35:20
just found a bug this thing says lastest
35:20
just found a bug this thing says lastest plural cycles that should be the latest
35:22
plural cycles that should be the latest
35:22
plural cycles that should be the latest we'll fix that while we're here we're
35:23
we'll fix that while we're here we're
35:23
we'll fix that while we're here we're software engineers we can't spell
35:25
software engineers we can't spell
35:25
software engineers we can't spell that's right um so this has some details
35:28
that's right um so this has some details
35:28
that's right um so this has some details on how to use this thing and then it has
35:29
on how to use this thing and then it has
35:29
on how to use this thing and then it has swagger
35:30
swagger
35:30
swagger so most of the stuff that's interesting
35:31
so most of the stuff that's interesting
35:31
so most of the stuff that's interesting is in the apis in my opinion so if we
35:33
is in the apis in my opinion so if we
35:33
is in the apis in my opinion so if we jump to swagger
35:35
jump to swagger
35:35
jump to swagger we can see all the apis these are the
35:36
we can see all the apis these are the
35:36
we can see all the apis these are the ones that use endpoints
35:38
ones that use endpoints
35:38
ones that use endpoints which which we can talk about in a
35:39
which which we can talk about in a
35:39
which which we can talk about in a minute these are the ones that use the
35:41
minute these are the ones that use the
35:41
minute these are the ones that use the api controller
35:42
api controller
35:42
api controller but this is all functional now so you
35:44
but this is all functional now so you
35:44
but this is all functional now so you can come in here and you say hey i want
35:45
can come in here and you say hey i want
35:45
can come in here and you say hey i want to try this out let me see my projects
35:47
to try this out let me see my projects
35:47
to try this out let me see my projects uh and you can say okay well here's your
35:49
uh and you can say okay well here's your
35:49
uh and you can say okay well here's your test project um
35:51
test project um
35:51
test project um and it has an empty items collection
35:53
and it has an empty items collection
35:53
and it has an empty items collection which is probably wrong
35:54
which is probably wrong
35:54
which is probably wrong let's see what i get if i do it up here
35:56
let's see what i get if i do it up here
35:56
let's see what i get if i do it up here uh try this one out
35:58
uh try this one out
35:58
uh try this one out and execute list of projects uh yeah
36:01
and execute list of projects uh yeah
36:01
and execute list of projects uh yeah here it is okay no that is right that's
36:03
here it is okay no that is right that's
36:03
here it is okay no that is right that's right if i get one of them
36:04
right if i get one of them
36:04
right if i get one of them uh if i get one project so project id
36:07
uh if i get one project so project id
36:07
uh if i get one project so project id like this is telling me it's got id one
36:09
like this is telling me it's got id one
36:09
like this is telling me it's got id one right so we can say get project by id
36:11
right so we can say get project by id
36:11
right so we can say get project by id try it out there's one
36:13
try it out there's one
36:13
try it out there's one execute and say here tell me everything
36:16
execute and say here tell me everything
36:16
execute and say here tell me everything um about project one that didn't work at
36:19
um about project one that didn't work at
36:19
um about project one that didn't work at all did it
36:20
all did it
36:20
all did it went to the wrong end point that should
36:22
went to the wrong end point that should
36:22
went to the wrong end point that should have been slash oh that's that's the
36:24
have been slash oh that's that's the
36:24
have been slash oh that's that's the meta no it's not
36:25
meta no it's not
36:25
meta no it's not okay no that should have been slash api
36:27
okay no that should have been slash api
36:27
okay no that should have been slash api slash so i don't know why that's got the
36:29
slash so i don't know why that's got the
36:29
slash so i don't know why that's got the wrong uh route but this is not
36:31
wrong uh route but this is not
36:31
wrong uh route but this is not a razor page yeah i'm finding all the
36:33
a razor page yeah i'm finding all the
36:34
a razor page yeah i'm finding all the bugs just while we're doing this uh
36:35
bugs just while we're doing this uh
36:35
bugs just while we're doing this uh interview that's good
36:36
interview that's good
36:36
interview that's good all right so let me usually i test it
36:38
all right so let me usually i test it
36:38
all right so let me usually i test it with the endpoint version that's the
36:39
with the endpoint version that's the
36:39
with the endpoint version that's the problem um
36:40
problem um
36:40
problem um but i don't test the other one as much
36:41
but i don't test the other one as much
36:42
but i don't test the other one as much alright so here's the get single project
36:44
alright so here's the get single project
36:44
alright so here's the get single project try it out one execute i'm going to
36:46
try it out one execute i'm going to
36:46
try it out one execute i'm going to write some integration tests here in a
36:47
write some integration tests here in a
36:47
write some integration tests here in a second
36:48
second
36:48
second so here's what you get here so the thing
36:50
so here's what you get here so the thing
36:50
so here's what you get here so the thing i want to point out is that
36:51
i want to point out is that
36:51
i want to point out is that when you're designing an api a lot of
36:54
when you're designing an api a lot of
36:54
when you're designing an api a lot of the time you want to
36:55
the time you want to
36:55
the time you want to get sort of the goldilocks amount of
36:57
get sort of the goldilocks amount of
36:57
get sort of the goldilocks amount of data to come back goldilocks meaning not
36:59
data to come back goldilocks meaning not
36:59
data to come back goldilocks meaning not too much but not too little
37:01
too much but not too little
37:01
too much but not too little and so when i get a list of projects i
37:03
and so when i get a list of projects i
37:03
and so when i get a list of projects i don't necessarily want to get a list of
37:04
don't necessarily want to get a list of
37:04
don't necessarily want to get a list of projects and all their to-do items
37:06
projects and all their to-do items
37:06
projects and all their to-do items because maybe i'm just showing him in a
37:07
because maybe i'm just showing him in a
37:07
because maybe i'm just showing him in a drop down list or or some kind of
37:09
drop down list or or some kind of
37:09
drop down list or or some kind of navigation for the user to pick
37:10
navigation for the user to pick
37:10
navigation for the user to pick um but when i say i want to get this one
37:12
um but when i say i want to get this one
37:12
um but when i say i want to get this one project i probably want to get its
37:14
project i probably want to get its
37:14
project i probably want to get its details too
37:15
details too
37:15
details too um and that's up to me as the api
37:17
um and that's up to me as the api
37:17
um and that's up to me as the api designer to make that choice
37:18
designer to make that choice
37:18
designer to make that choice and it's totally uh different from how i
37:21
and it's totally uh different from how i
37:21
and it's totally uh different from how i might
37:22
might
37:22
might implement things in the domain model uh
37:24
implement things in the domain model uh
37:24
implement things in the domain model uh you know and whether or not i'm using
37:25
you know and whether or not i'm using
37:25
you know and whether or not i'm using entity framework with include or not
37:27
entity framework with include or not
37:27
entity framework with include or not um and so you want to keep those things
37:29
um and so you want to keep those things
37:29
um and so you want to keep those things separate when you're designing your apis
37:30
separate when you're designing your apis
37:30
separate when you're designing your apis your focus should be on what does your
37:32
your focus should be on what does your
37:32
your focus should be on what does your client need and when you're designing
37:33
client need and when you're designing
37:34
client need and when you're designing your domain model you just want to have
37:35
your domain model you just want to have
37:35
your domain model you just want to have the flexibility
37:36
the flexibility
37:36
the flexibility to support whatever that api or that
37:38
to support whatever that api or that
37:38
to support whatever that api or that application is going to need
37:40
application is going to need
37:40
application is going to need and so in this case when i when i say
37:41
and so in this case when i when i say
37:41
and so in this case when i when i say get by id i do fetch all the items with
37:44
get by id i do fetch all the items with
37:44
get by id i do fetch all the items with it
37:45
it
37:45
it and that's also why if you look at those
37:46
and that's also why if you look at those
37:46
and that's also why if you look at those specifications we saw
37:48
specifications we saw
37:48
specifications we saw some of them did include the items some
37:50
some of them did include the items some
37:50
some of them did include the items some of them didn't
37:51
of them didn't
37:51
of them didn't uh just for the purposes of efficiency
37:53
uh just for the purposes of efficiency
37:53
uh just for the purposes of efficiency and what goes over the wire with that
37:54
and what goes over the wire with that
37:54
and what goes over the wire with that api
37:56
api
37:56
api so we have some questions um cool
37:59
so we have some questions um cool
37:59
so we have some questions um cool i love questions we got a bunch of
38:01
i love questions we got a bunch of
38:01
i love questions we got a bunch of questions so let's see uh
38:04
questions so let's see uh
38:04
questions so let's see uh yeah so this is a good one the first one
38:05
yeah so this is a good one the first one
38:05
yeah so this is a good one the first one is in in clean architecture which is the
38:07
is in in clean architecture which is the
38:07
is in in clean architecture which is the right place for entities interface and
38:09
right place for entities interface and
38:09
right place for entities interface and business logic
38:11
business logic
38:11
business logic okay i was going to i was kind of going
38:12
okay i was going to i was kind of going
38:12
okay i was going to i was kind of going to ask the question about and
38:14
to ask the question about and
38:14
to ask the question about and entities too yeah um
38:17
entities too yeah um
38:17
entities too yeah um entities belong in the domain model so
38:19
entities belong in the domain model so
38:19
entities belong in the domain model so all the things that were in that
38:20
all the things that were in that
38:20
all the things that were in that aggregate
38:21
aggregate
38:21
aggregate the project the to do items those are
38:23
the project the to do items those are
38:23
the project the to do items those are entities uh in the ddd sense as well as
38:26
entities uh in the ddd sense as well as
38:26
entities uh in the ddd sense as well as in the entity framework sense
38:27
in the entity framework sense
38:28
in the entity framework sense um when you're using entity framework
38:29
um when you're using entity framework
38:30
um when you're using entity framework code first whether you're on.net ef6
38:32
code first whether you're on.net ef6
38:32
code first whether you're on.net ef6 or your.net core which basically only
38:35
or your.net core which basically only
38:35
or your.net core which basically only supports code first
38:36
supports code first
38:36
supports code first out of the box you you generally want to
38:39
out of the box you you generally want to
38:39
out of the box you you generally want to use your domain model entities as
38:41
use your domain model entities as
38:41
use your domain model entities as your database model as well so
38:44
your database model as well so
38:44
your database model as well so most of the time i don't have a separate
38:46
most of the time i don't have a separate
38:46
most of the time i don't have a separate set of database entities
38:48
set of database entities
38:48
set of database entities that i map to my business entities or my
38:50
that i map to my business entities or my
38:50
that i map to my business entities or my domain entities i use the same one for
38:52
domain entities i use the same one for
38:52
domain entities i use the same one for both
38:53
both
38:53
both now you'll see i don't have the
38:55
now you'll see i don't have the
38:55
now you'll see i don't have the screenshot anymore but
38:56
screenshot anymore but
38:56
screenshot anymore but in in the project or in the to do items
38:59
in in the project or in the to do items
38:59
in in the project or in the to do items you didn't see any
38:59
you didn't see any
39:00
you didn't see any kind of attributes saying things like
39:01
kind of attributes saying things like
39:01
kind of attributes saying things like this is required and this has a max
39:03
this is required and this has a max
39:03
this is required and this has a max length and stuff like that
39:04
length and stuff like that
39:04
length and stuff like that i don't like to put that in my domain
39:06
i don't like to put that in my domain
39:06
i don't like to put that in my domain model classes instead i put that in the
39:08
model classes instead i put that in the
39:08
model classes instead i put that in the infrastructure project
39:09
infrastructure project
39:09
infrastructure project where i configure everything in code and
39:12
where i configure everything in code and
39:12
where i configure everything in code and so the
39:13
so the
39:13
so the the questions were where do interfaces
39:14
the questions were where do interfaces
39:14
the questions were where do interfaces live what entities live where does db
39:16
live what entities live where does db
39:16
live what entities live where does db context live
39:17
context live
39:17
context live um entities are part of your domain
39:19
um entities are part of your domain
39:19
um entities are part of your domain model
39:20
model
39:20
model interfaces most of those are going to be
39:22
interfaces most of those are going to be
39:22
interfaces most of those are going to be part of your domain model too so they'll
39:23
part of your domain model too so they'll
39:23
part of your domain model too so they'll live in
39:24
live in
39:24
live in the core project or the domain model
39:26
the core project or the domain model
39:26
the core project or the domain model project if they're being used by lots
39:28
project if they're being used by lots
39:28
project if they're being used by lots and lots of different solutions in your
39:30
and lots of different solutions in your
39:30
and lots of different solutions in your company
39:30
company
39:30
company you might put some of them in shared
39:31
you might put some of them in shared
39:31
you might put some of them in shared kernel right shared kernel is like a
39:33
kernel right shared kernel is like a
39:33
kernel right shared kernel is like a small subset of core that you want to
39:35
small subset of core that you want to
39:35
small subset of core that you want to share elsewhere
39:36
share elsewhere
39:36
share elsewhere but it follows the same rules as core in
39:38
but it follows the same rules as core in
39:38
but it follows the same rules as core in that it shouldn't depend on any
39:40
that it shouldn't depend on any
39:40
that it shouldn't depend on any infrastructure
39:40
infrastructure
39:40
infrastructure details and then inside of the
39:43
details and then inside of the
39:43
details and then inside of the infrastructure class
39:44
infrastructure class
39:44
infrastructure class that's where your implementation details
39:46
that's where your implementation details
39:46
that's where your implementation details go entity framework
39:47
go entity framework
39:47
go entity framework is an implementation detail so it
39:49
is an implementation detail so it
39:49
is an implementation detail so it belongs in infrastructure it's
39:51
belongs in infrastructure it's
39:51
belongs in infrastructure it's how i'm going to get my data i might
39:52
how i'm going to get my data i might
39:52
how i'm going to get my data i might decide to change it i might decide to
39:54
decide to change it i might decide to
39:54
decide to change it i might decide to use dapper or i might decide that for
39:56
use dapper or i might decide that for
39:56
use dapper or i might decide that for this particular query i don't want to
39:57
this particular query i don't want to
39:57
this particular query i don't want to use an orm at all i want to just
39:59
use an orm at all i want to just
39:59
use an orm at all i want to just talk directly to the database because
40:00
talk directly to the database because
40:00
talk directly to the database because that's faster i want to call stored
40:01
that's faster i want to call stored
40:01
that's faster i want to call stored procedure
40:02
procedure
40:02
procedure and yes i could do that through ef and
40:04
and yes i could do that through ef and
40:04
and yes i could do that through ef and or through dapper or i could write my
40:05
or through dapper or i could write my
40:05
or through dapper or i could write my own whatever
40:06
own whatever
40:06
own whatever but all of that stuff is implementation
40:08
but all of that stuff is implementation
40:08
but all of that stuff is implementation detail and so it belongs
40:09
detail and so it belongs
40:10
detail and so it belongs in infrastructure not in your domain
40:11
in infrastructure not in your domain
40:11
in infrastructure not in your domain model right
40:13
model right
40:13
model right great i that's a great answer um the
40:16
great i that's a great answer um the
40:16
great i that's a great answer um the next one is if we place
40:17
next one is if we place
40:17
next one is if we place any framework in infrastructure how to
40:19
any framework in infrastructure how to
40:19
any framework in infrastructure how to avoid leaky abstraction
40:21
avoid leaky abstraction
40:21
avoid leaky abstraction with regards to reference in another
40:23
with regards to reference in another
40:23
with regards to reference in another layer
40:24
layer
40:24
layer sure so the the most important layer
40:27
sure so the the most important layer
40:27
sure so the the most important layer that you want to protect
40:28
that you want to protect
40:28
that you want to protect is your domain model right you want to
40:29
is your domain model right you want to
40:29
is your domain model right you want to have all your business logic in there
40:31
have all your business logic in there
40:31
have all your business logic in there and you want to be easy to test and
40:33
and you want to be easy to test and
40:33
and you want to be easy to test and change and refactor and not have it be
40:34
change and refactor and not have it be
40:34
change and refactor and not have it be depending on
40:35
depending on
40:35
depending on the database or other infrastructure
40:37
the database or other infrastructure
40:37
the database or other infrastructure concerns so by having infrastructure
40:39
concerns so by having infrastructure
40:39
concerns so by having infrastructure depend
40:39
depend
40:40
depend on core you make it so it is impossible
40:42
on core you make it so it is impossible
40:42
on core you make it so it is impossible again it's falling into the pit of
40:43
again it's falling into the pit of
40:44
again it's falling into the pit of success it's impossible for anything in
40:45
success it's impossible for anything in
40:45
success it's impossible for anything in core to depend on infrastructure
40:47
core to depend on infrastructure
40:47
core to depend on infrastructure because that would create a circular
40:48
because that would create a circular
40:48
because that would create a circular project right so the compiler and visual
40:50
project right so the compiler and visual
40:50
project right so the compiler and visual studio will not let you do that
40:52
studio will not let you do that
40:52
studio will not let you do that now higher up the stack right you've got
40:54
now higher up the stack right you've got
40:54
now higher up the stack right you've got a user interface in this case we've got
40:55
a user interface in this case we've got
40:55
a user interface in this case we've got this web
40:56
this web
40:56
this web project using asp.net core it can get to
40:58
project using asp.net core it can get to
40:58
project using asp.net core it can get to infrastructure and it can get to core
41:01
infrastructure and it can get to core
41:01
infrastructure and it can get to core and so theoretically you could have a
41:02
and so theoretically you could have a
41:02
and so theoretically you could have a controller in your web project
41:04
controller in your web project
41:04
controller in your web project that takes a db context and just uses
41:07
that takes a db context and just uses
41:07
that takes a db context and just uses the data access layer directly
41:08
the data access layer directly
41:08
the data access layer directly you should not do that it is possible to
41:11
you should not do that it is possible to
41:11
you should not do that it is possible to not have a project reference
41:13
not have a project reference
41:13
not have a project reference on infrastructure to have the web
41:15
on infrastructure to have the web
41:15
on infrastructure to have the web project only know about types
41:17
project only know about types
41:17
project only know about types that are in core and in the web project
41:19
that are in core and in the web project
41:19
that are in core and in the web project and the way you would do that is using
41:21
and the way you would do that is using
41:21
and the way you would do that is using uh not not the built-in di container
41:24
uh not not the built-in di container
41:24
uh not not the built-in di container that
41:24
that
41:24
that dot-net core ships with but use a
41:26
dot-net core ships with but use a
41:26
dot-net core ships with but use a third-party one like auto fact
41:28
third-party one like auto fact
41:28
third-party one like auto fact and what those support is modules you
41:31
and what those support is modules you
41:31
and what those support is modules you would put an auto fax module
41:32
would put an auto fax module
41:32
would put an auto fax module inside of infrastructure and then when
41:34
inside of infrastructure and then when
41:34
inside of infrastructure and then when you build your solution
41:36
you build your solution
41:36
you build your solution which again the web project would not
41:37
which again the web project would not
41:38
which again the web project would not even know about the infrastructure
41:39
even know about the infrastructure
41:39
even know about the infrastructure project
41:40
project
41:40
project when your solution builds and the
41:41
when your solution builds and the
41:41
when your solution builds and the infrastructure project's dll is in its
41:43
infrastructure project's dll is in its
41:43
infrastructure project's dll is in its bin folder
41:44
bin folder
41:44
bin folder you would add a post build event or a
41:47
you would add a post build event or a
41:47
you would add a post build event or a post-build action in visual studio
41:49
post-build action in visual studio
41:49
post-build action in visual studio and it would copy that dll to the web
41:51
and it would copy that dll to the web
41:51
and it would copy that dll to the web bin folder
41:52
bin folder
41:52
bin folder right and then when your web project
41:53
right and then when your web project
41:54
right and then when your web project starts up in startup autofact will load
41:56
starts up in startup autofact will load
41:56
starts up in startup autofact will load and you'll say hey go look for a dll
41:58
and you'll say hey go look for a dll
41:58
and you'll say hey go look for a dll that has this this name or has this you
42:00
that has this this name or has this you
42:00
that has this this name or has this you know
42:00
know
42:00
know pattern and it would find the
42:02
pattern and it would find the
42:02
pattern and it would find the infrastructure dll it would load it
42:03
infrastructure dll it would load it
42:03
infrastructure dll it would load it and it would call that module and it
42:05
and it would call that module and it
42:05
and it would call that module and it would say wire up all the things
42:07
would say wire up all the things
42:07
would say wire up all the things and then your web project will be able
42:08
and then your web project will be able
42:08
and then your web project will be able to use that and provides a literally a
42:10
to use that and provides a literally a
42:10
to use that and provides a literally a plug-in
42:10
plug-in
42:10
plug-in architecture where you can just drop in
42:12
architecture where you can just drop in
42:12
architecture where you can just drop in an infrastructure project as a dll
42:15
an infrastructure project as a dll
42:15
an infrastructure project as a dll and the web project will pick it up and
42:16
and the web project will pick it up and
42:16
and the web project will pick it up and wire everything up but at compile time
42:18
wire everything up but at compile time
42:18
wire everything up but at compile time when the developers are writing their
42:19
when the developers are writing their
42:19
when the developers are writing their code
42:20
code
42:20
code it cannot get to the db context it
42:22
it cannot get to the db context it
42:22
it cannot get to the db context it cannot get to any of the implementation
42:24
cannot get to any of the implementation
42:24
cannot get to any of the implementation details
42:25
details
42:25
details in that project now in practice i don't
42:27
in that project now in practice i don't
42:27
in that project now in practice i don't set things up like that in my template
42:29
set things up like that in my template
42:29
set things up like that in my template because it is really nice and handy to
42:31
because it is really nice and handy to
42:31
because it is really nice and handy to be able to just step through and debug
42:33
be able to just step through and debug
42:33
be able to just step through and debug and see
42:34
and see
42:34
and see everything with that project reference
42:35
everything with that project reference
42:35
everything with that project reference so i don't recommend that you
42:36
so i don't recommend that you
42:36
so i don't recommend that you necessarily do that
42:38
necessarily do that
42:38
necessarily do that i'm just saying you can do that you can
42:40
i'm just saying you can do that you can
42:40
i'm just saying you can do that you can make it impossible if you need to
42:42
make it impossible if you need to
42:42
make it impossible if you need to but if you trust your team to do what
42:43
but if you trust your team to do what
42:43
but if you trust your team to do what they're supposed to do um
42:45
they're supposed to do um
42:45
they're supposed to do um then in the web project the only place
42:47
then in the web project the only place
42:47
then in the web project the only place you should see
42:48
you should see
42:48
you should see infrastructure uh thanks for sharing the
42:50
infrastructure uh thanks for sharing the
42:50
infrastructure uh thanks for sharing the screen again um the only place you
42:51
screen again um the only place you
42:51
screen again um the only place you should see infrastructure show up
42:53
should see infrastructure show up
42:53
should see infrastructure show up in your using statements is in
42:55
in your using statements is in
42:55
in your using statements is in startup.cs because that's where you're
42:57
startup.cs because that's where you're
42:57
startup.cs because that's where you're to wire up those dependencies yeah wow
43:00
to wire up those dependencies yeah wow
43:00
to wire up those dependencies yeah wow i you know we're not going to get to all
43:02
i you know we're not going to get to all
43:02
i you know we're not going to get to all the questions everybody but i apologize
43:04
the questions everybody but i apologize
43:04
the questions everybody but i apologize for that but we're going to get to as
43:05
for that but we're going to get to as
43:05
for that but we're going to get to as much as much as we can
43:07
much as much as we can
43:07
much as much as we can um i'll try and get shorter answers yeah
43:09
um i'll try and get shorter answers yeah
43:09
um i'll try and get shorter answers yeah uh
43:10
uh
43:10
uh no it's okay it's uh if we if we use a
43:12
no it's okay it's uh if we if we use a
43:12
no it's okay it's uh if we if we use a repository pattern
43:14
repository pattern
43:14
repository pattern is it where's basically where's the
43:16
is it where's basically where's the
43:16
is it where's basically where's the right place to put the update method
43:18
right place to put the update method
43:18
right place to put the update method um it depends if you need a unit of work
43:21
um it depends if you need a unit of work
43:21
um it depends if you need a unit of work you have to roll your own and wrap it
43:22
you have to roll your own and wrap it
43:22
you have to roll your own and wrap it around and it's it's not terribly
43:23
around and it's it's not terribly
43:23
around and it's it's not terribly difficult to do so a lot of my clients
43:25
difficult to do so a lot of my clients
43:25
difficult to do so a lot of my clients do that just create another unit of work
43:28
do that just create another unit of work
43:28
do that just create another unit of work interface
43:29
interface
43:29
interface you might have to expose a save changes
43:31
you might have to expose a save changes
43:31
you might have to expose a save changes method on your repository
43:33
method on your repository
43:33
method on your repository the way mine is architected right now it
43:35
the way mine is architected right now it
43:35
the way mine is architected right now it has a save changes
43:37
has a save changes
43:37
has a save changes uh or no sorry it does not have a save
43:39
uh or no sorry it does not have a save
43:39
uh or no sorry it does not have a save changes method i
43:40
changes method i
43:40
changes method i think if i remember right and so when
43:43
think if i remember right and so when
43:43
think if i remember right and so when you do an add or an update or delete
43:44
you do an add or an update or delete
43:44
you do an add or an update or delete it's going to immediately save that and
43:47
it's going to immediately save that and
43:47
it's going to immediately save that and so it lets you have these sort of very
43:49
so it lets you have these sort of very
43:49
so it lets you have these sort of very atomic operations that are small grain
43:51
atomic operations that are small grain
43:51
atomic operations that are small grain but if you have a bigger thing that
43:53
but if you have a bigger thing that
43:53
but if you have a bigger thing that needs to all happen as part of one
43:54
needs to all happen as part of one
43:54
needs to all happen as part of one transaction maybe it spans multiple
43:56
transaction maybe it spans multiple
43:56
transaction maybe it spans multiple aggregates
43:56
aggregates
43:56
aggregates that's not what you want you're going to
43:57
that's not what you want you're going to
43:57
that's not what you want you're going to want that unit to work you're going to
43:58
want that unit to work you're going to
43:58
want that unit to work you're going to want that overall transaction so
44:01
want that overall transaction so
44:01
want that overall transaction so you just have to wrap that around and
44:03
you just have to wrap that around and
44:03
you just have to wrap that around and it's not difficult to do i just don't
44:04
it's not difficult to do i just don't
44:04
it's not difficult to do i just don't have it included out of the box because
44:05
have it included out of the box because
44:06
have it included out of the box because it's a little bit more complex
44:07
it's a little bit more complex
44:07
it's a little bit more complex yeah yeah uh the infrastructure project
44:10
yeah yeah uh the infrastructure project
44:10
yeah yeah uh the infrastructure project should not be referenced by other layers
44:12
should not be referenced by other layers
44:12
should not be referenced by other layers so am i not seeing a case for leaky
44:14
so am i not seeing a case for leaky
44:14
so am i not seeing a case for leaky abstraction
44:15
abstraction
44:15
abstraction yep um right yeah i think we covered
44:17
yep um right yeah i think we covered
44:17
yep um right yeah i think we covered that already yeah
44:18
that already yeah
44:18
that already yeah it shouldn't leak if you follow the
44:19
it shouldn't leak if you follow the
44:19
it shouldn't leak if you follow the practices you're supposed to and if your
44:21
practices you're supposed to and if your
44:21
practices you're supposed to and if your team isn't following those practices you
44:22
team isn't following those practices you
44:22
team isn't following those practices you can enforce them
44:23
can enforce them
44:23
can enforce them by dropping that reference entirely and
44:25
by dropping that reference entirely and
44:25
by dropping that reference entirely and using reflection to pull it in at
44:26
using reflection to pull it in at
44:26
using reflection to pull it in at runtime
44:28
runtime
44:28
runtime uh see uh we got one can we use this
44:31
uh see uh we got one can we use this
44:31
uh see uh we got one can we use this test to drive uh
44:32
test to drive uh
44:32
test to drive uh selenium ui testing can we use this to
44:35
selenium ui testing can we use this to
44:35
selenium ui testing can we use this to data drive selenium
44:37
data drive selenium
44:37
data drive selenium yeah i don't know i've used selenium but
44:40
yeah i don't know i've used selenium but
44:40
yeah i don't know i've used selenium but i don't see how
44:41
i don't see how
44:41
i don't see how this would work with that i don't get
44:42
this would work with that i don't get
44:42
this would work with that i don't get the connection so i don't know
44:44
the connection so i don't know
44:44
the connection so i don't know i'd like to know how simon knows which
44:46
i'd like to know how simon knows which
44:46
i'd like to know how simon knows which question i'm about to ask
44:48
question i'm about to ask
44:48
question i'm about to ask because i didn't go in order simon's a
44:51
because i didn't go in order simon's a
44:51
because i didn't go in order simon's a genius
44:52
genius
44:52
genius i mean it does let's see
44:55
i mean it does let's see
44:55
i mean it does let's see let's get let's get away from leaky uh
44:57
let's get let's get away from leaky uh
44:58
let's get let's get away from leaky uh uh
44:58
uh
44:58
uh any clutches should be totally pure it
45:01
any clutches should be totally pure it
45:01
any clutches should be totally pure it should not depend on ef you should
45:03
should not depend on ef you should
45:03
should not depend on ef you should use fluent api
45:07
use fluent api
45:07
use fluent api i'm not sure i'm not sure how to answer
45:09
i'm not sure i'm not sure how to answer
45:09
i'm not sure i'm not sure how to answer that simon didn't
45:10
that simon didn't
45:10
that simon didn't bring that one up so i can't read it
45:11
bring that one up so i can't read it
45:11
bring that one up so i can't read it yeah yeah that's okay uh you can read it
45:13
yeah yeah that's okay uh you can read it
45:13
yeah yeah that's okay uh you can read it if you go to comments if i go to
45:15
if you go to comments if i go to
45:15
if you go to comments if i go to comments maybe i'll see it there all
45:16
comments maybe i'll see it there all
45:16
comments maybe i'll see it there all right
45:16
right
45:16
right fair enough um
45:22
yeah uh here's a question our clean
45:24
yeah uh here's a question our clean
45:24
yeah uh here's a question our clean architecture and onion architecture the
45:25
architecture and onion architecture the
45:25
architecture and onion architecture the same yes
45:26
same yes
45:26
same yes basically uh how how can clean
45:28
basically uh how how can clean
45:28
basically uh how how can clean architecture be used in a microservice
45:30
architecture be used in a microservice
45:30
architecture be used in a microservice each microservice would typically be
45:32
each microservice would typically be
45:32
each microservice would typically be using this architecture right um and so
45:34
using this architecture right um and so
45:34
using this architecture right um and so you would
45:35
you would
45:35
you would you know have every microservice would
45:37
you know have every microservice would
45:37
you know have every microservice would would have these
45:38
would have these
45:38
would have these three projects or you know plus the
45:40
three projects or you know plus the
45:40
three projects or you know plus the shared kernel
45:43
[Music]
45:45
[Music]
45:45
[Music] drop your um uh
45:49
drop your um uh
45:49
drop your um uh there's a thanks but i think that's
45:50
there's a thanks but i think that's
45:50
there's a thanks but i think that's pretty much the questions and uh
45:53
pretty much the questions and uh
45:53
pretty much the questions and uh we're kind of running short on you know
45:55
we're kind of running short on you know
45:55
we're kind of running short on you know we only got to one subject
45:57
we only got to one subject
45:57
we only got to one subject that's okay let's get to the next one no
45:58
that's okay let's get to the next one no
45:58
that's okay let's get to the next one no no i'm gonna have to have you back this
46:00
no i'm gonna have to have you back this
46:00
no i'm gonna have to have you back this is what i'm saying
46:01
is what i'm saying
46:01
is what i'm saying you know we've got we got 15 minutes
46:03
you know we've got we got 15 minutes
46:03
you know we've got we got 15 minutes right
46:04
right
46:04
right oh well i've got to do new code rules so
46:06
oh well i've got to do new code rules so
46:06
oh well i've got to do new code rules so i've got to stop at least
46:08
i've got to stop at least
46:08
i've got to stop at least oh no okay well i can always come back
46:10
oh no okay well i can always come back
46:10
oh no okay well i can always come back that's not a problem five or ten minutes
46:12
that's not a problem five or ten minutes
46:12
that's not a problem five or ten minutes um any more questions everybody let me
46:15
um any more questions everybody let me
46:15
um any more questions everybody let me look at my uh
46:16
look at my uh
46:16
look at my uh what else do we have on there let me let
46:18
what else do we have on there let me let
46:18
what else do we have on there let me let me show you one thing that is
46:19
me show you one thing that is
46:19
me show you one thing that is part of this template um that i was
46:21
part of this template um that i was
46:21
part of this template um that i was going to save and then
46:23
going to save and then
46:23
going to save and then i'll just spend five minutes on that and
46:24
i'll just spend five minutes on that and
46:24
i'll just spend five minutes on that and then i'll okay all right so
46:26
then i'll okay all right so
46:26
then i'll okay all right so uh i talked about api endpoints a couple
46:28
uh i talked about api endpoints a couple
46:28
uh i talked about api endpoints a couple times it's another
46:29
times it's another
46:29
times it's another uh github repo so if you go out
46:32
uh github repo so if you go out
46:32
uh github repo so if you go out here no that's not it where's
46:35
here no that's not it where's
46:36
here no that's not it where's i don't know i lost my browser that i
46:37
i don't know i lost my browser that i
46:37
i don't know i lost my browser that i was showing but go to just github.com
46:39
was showing but go to just github.com
46:39
was showing but go to just github.com our dallas api endpoints um and what
46:42
our dallas api endpoints um and what
46:42
our dallas api endpoints um and what that lets you do is basically not have
46:44
that lets you do is basically not have
46:44
that lets you do is basically not have big controllers so if we look at the uh
46:47
big controllers so if we look at the uh
46:47
big controllers so if we look at the uh api controller for projects controller
46:49
api controller for projects controller
46:49
api controller for projects controller um it has all the stuff to to work with
46:52
um it has all the stuff to to work with
46:52
um it has all the stuff to to work with projects
46:52
projects
46:52
projects and we already noted that it has a
46:54
and we already noted that it has a
46:54
and we already noted that it has a couple problems i have to fix but i'll
46:55
couple problems i have to fix but i'll
46:55
couple problems i have to fix but i'll get that taken care of
46:56
get that taken care of
46:56
get that taken care of um but it's it's not a ton of code but
46:58
um but it's it's not a ton of code but
46:58
um but it's it's not a ton of code but you can see there's all this stuff in
46:59
you can see there's all this stuff in
46:59
you can see there's all this stuff in here
47:00
here
47:00
here and when you're working on an api
47:01
and when you're working on an api
47:01
and when you're working on an api endpoint you basically never care about
47:04
endpoint you basically never care about
47:04
endpoint you basically never care about any other endpoints except the one
47:05
any other endpoints except the one
47:05
any other endpoints except the one you're working on right so if i need to
47:06
you're working on right so if i need to
47:06
you're working on right so if i need to add
47:07
add
47:07
add some something that lets me create a new
47:09
some something that lets me create a new
47:09
some something that lets me create a new record with a with a post
47:12
record with a with a post
47:12
record with a with a post when i'm working on that i don't care at
47:14
when i'm working on that i don't care at
47:14
when i'm working on that i don't care at all about how get by id works right this
47:16
all about how get by id works right this
47:16
all about how get by id works right this is just clutter that i need to work
47:17
is just clutter that i need to work
47:17
is just clutter that i need to work around
47:18
around
47:18
around um and so your controllers a lot of
47:19
um and so your controllers a lot of
47:19
um and so your controllers a lot of times they get really big and they have
47:20
times they get really big and they have
47:20
times they get really big and they have too much stuff in them
47:22
too much stuff in them
47:22
too much stuff in them some people use mediator to kind of make
47:24
some people use mediator to kind of make
47:24
some people use mediator to kind of make that better so that you just have all
47:25
that better so that you just have all
47:25
that better so that you just have all these things throw commands and then you
47:26
these things throw commands and then you
47:26
these things throw commands and then you have mediator handlers
47:27
have mediator handlers
47:27
have mediator handlers but now your controllers are all just
47:29
but now your controllers are all just
47:29
but now your controllers are all just sitting there doing nothing but just
47:30
sitting there doing nothing but just
47:30
sitting there doing nothing but just routing
47:31
routing
47:31
routing uh and passing things to mediator so
47:33
uh and passing things to mediator so
47:33
uh and passing things to mediator so what what endpoints does
47:35
what what endpoints does
47:35
what what endpoints does is it lets you say well i'm just i'm not
47:37
is it lets you say well i'm just i'm not
47:37
is it lets you say well i'm just i'm not going to even need to use mediator for
47:38
going to even need to use mediator for
47:38
going to even need to use mediator for this
47:39
this
47:39
this you might need mediator for other things
47:40
you might need mediator for other things
47:40
you might need mediator for other things right mediator is still a useful tool
47:42
right mediator is still a useful tool
47:42
right mediator is still a useful tool but for specifically for this
47:44
but for specifically for this
47:44
but for specifically for this i can inherit from a base endpoint and
47:46
i can inherit from a base endpoint and
47:46
i can inherit from a base endpoint and have a handle method
47:47
have a handle method
47:47
have a handle method just like you would have a mediator
47:49
just like you would have a mediator
47:49
just like you would have a mediator handler but without the need for
47:50
handler but without the need for
47:50
handler but without the need for mediator because this base async
47:52
mediator because this base async
47:52
mediator because this base async endpoint really
47:53
endpoint really
47:53
endpoint really is a controller uh and so it has all the
47:56
is a controller uh and so it has all the
47:56
is a controller uh and so it has all the controller features
47:57
controller features
47:57
controller features um and so it can have the route right
47:59
um and so it can have the route right
48:00
um and so it can have the route right here on it
48:00
here on it
48:00
here on it uh if you need any metadata for swagger
48:02
uh if you need any metadata for swagger
48:02
uh if you need any metadata for swagger you can add all that in here that's
48:03
you can add all that in here that's
48:03
you can add all that in here that's optional
48:04
optional
48:04
optional um and then in here you just deal with
48:05
um and then in here you just deal with
48:06
um and then in here you just deal with the one end point you care about
48:07
the one end point you care about
48:07
the one end point you care about now the other thing it lets you do is
48:08
now the other thing it lets you do is
48:08
now the other thing it lets you do is it's generic and it uses a fluent
48:11
it's generic and it uses a fluent
48:11
it's generic and it uses a fluent generic pattern
48:12
generic pattern
48:12
generic pattern so you can say dot with this request
48:15
so you can say dot with this request
48:15
so you can say dot with this request and that's the request that's going to
48:16
and that's the request that's going to
48:16
and that's the request that's going to come into your handle method and say dot
48:18
come into your handle method and say dot
48:18
come into your handle method and say dot with response
48:20
with response
48:20
with response and that's what you're going to return
48:21
and that's what you're going to return
48:21
and that's what you're going to return from your task of action result
48:23
from your task of action result
48:23
from your task of action result uh and so for each one of these you can
48:25
uh and so for each one of these you can
48:26
uh and so for each one of these you can specify those things you can even
48:27
specify those things you can even
48:27
specify those things you can even specify without a response or without a
48:29
specify without a response or without a
48:29
specify without a response or without a request
48:30
request
48:30
request um so that's that's where the fluid
48:31
um so that's that's where the fluid
48:31
um so that's that's where the fluid interface becomes handy because
48:33
interface becomes handy because
48:33
interface becomes handy because if it was just a an endpoint of you know
48:36
if it was just a an endpoint of you know
48:36
if it was just a an endpoint of you know t1 comma t2
48:38
t1 comma t2
48:38
t1 comma t2 it wouldn't let you do that um you know
48:40
it wouldn't let you do that um you know
48:40
it wouldn't let you do that um you know because specifically the problem is when
48:42
because specifically the problem is when
48:42
because specifically the problem is when you only have one of them
48:43
you only have one of them
48:43
you only have one of them if you only have one you have to decide
48:45
if you only have one you have to decide
48:45
if you only have one you have to decide if it's going to handle something that
48:46
if it's going to handle something that
48:46
if it's going to handle something that has just a request or something that is
48:48
has just a request or something that is
48:48
has just a request or something that is just a response
48:49
just a response
48:49
just a response and you actually need both of those in
48:50
and you actually need both of those in
48:50
and you actually need both of those in different cases um and so this lets you
48:52
different cases um and so this lets you
48:52
different cases um and so this lets you do that
48:53
do that
48:53
do that now where are those types well they're
48:55
now where are those types well they're
48:55
now where are those types well they're right here with it right so when i'm
48:56
right here with it right so when i'm
48:56
right here with it right so when i'm working on create
48:57
working on create
48:57
working on create and i want to see well where's the api
48:59
and i want to see well where's the api
48:59
and i want to see well where's the api or where's the the dto for this api um
49:02
or where's the the dto for this api um
49:02
or where's the the dto for this api um well it's it's attached to it it's right
49:03
well it's it's attached to it it's right
49:03
well it's it's attached to it it's right here
49:04
here
49:04
here uh and so is the response so everything
49:06
uh and so is the response so everything
49:06
uh and so is the response so everything is in one place you don't have to scroll
49:07
is in one place you don't have to scroll
49:08
is in one place you don't have to scroll around
49:08
around
49:08
around you don't have a separate api models
49:09
you don't have a separate api models
49:09
you don't have a separate api models folder it's it's a much nicer way to
49:11
folder it's it's a much nicer way to
49:11
folder it's it's a much nicer way to work in my opinion
49:13
work in my opinion
49:13
work in my opinion yeah yeah and so i guess i missed it so
49:16
yeah yeah and so i guess i missed it so
49:16
yeah yeah and so i guess i missed it so you
49:17
you
49:17
you you create a different uh endpoint at
49:20
you create a different uh endpoint at
49:20
you create a different uh endpoint at least
49:20
least
49:20
least what you're showing for every kind of
49:22
what you're showing for every kind of
49:22
what you're showing for every kind of action right yeah for each
49:24
action right yeah for each
49:24
action right yeah for each api endpoint that shows up in swagger
49:26
api endpoint that shows up in swagger
49:26
api endpoint that shows up in swagger that you expose um there's one class
49:28
that you expose um there's one class
49:28
that you expose um there's one class with one method
49:29
with one method
49:29
with one method right and that's it right so when you're
49:31
right and that's it right so when you're
49:31
right and that's it right so when you're working on it you just have one thing to
49:32
working on it you just have one thing to
49:32
working on it you just have one thing to focus on
49:33
focus on
49:33
focus on um you only have whatever dependencies
49:35
um you only have whatever dependencies
49:35
um you only have whatever dependencies that one method needs like a lot of
49:37
that one method needs like a lot of
49:37
that one method needs like a lot of times your controller ends up with like
49:38
times your controller ends up with like
49:38
times your controller ends up with like 12 front dependencies injected
49:40
12 front dependencies injected
49:40
12 front dependencies injected but no one entity no one sorry no one
49:42
but no one entity no one sorry no one
49:42
but no one entity no one sorry no one action
49:43
action
49:43
action needs all those dependencies um they
49:45
needs all those dependencies um they
49:45
needs all those dependencies um they just kind of accrue over time as a form
49:46
just kind of accrue over time as a form
49:46
just kind of accrue over time as a form of technical debt
49:47
of technical debt
49:47
of technical debt uh so here you only have the
49:49
uh so here you only have the
49:49
uh so here you only have the dependencies that you need for this
49:50
dependencies that you need for this
49:50
dependencies that you need for this exact endpoint
49:51
exact endpoint
49:52
exact endpoint yeah yeah oh that's this this looks
49:54
yeah yeah oh that's this this looks
49:54
yeah yeah oh that's this this looks awesome i uh
49:55
awesome i uh
49:55
awesome i uh you know well you've been talking you
49:57
you know well you've been talking you
49:57
you know well you've been talking you know i've been thinking you know just
49:59
know i've been thinking you know just
49:59
know i've been thinking you know just you know just the importance of proper
50:02
you know just the importance of proper
50:02
you know just the importance of proper architecture
50:03
architecture
50:04
architecture right you know because you know doing
50:06
right you know because you know doing
50:06
right you know because you know doing what you're saying
50:07
what you're saying
50:07
what you're saying i mean you i know you have a template
50:09
i mean you i know you have a template
50:09
i mean you i know you have a template and everything but that takes a lot more
50:10
and everything but that takes a lot more
50:10
and everything but that takes a lot more work and not a lot more work but it
50:12
work and not a lot more work but it
50:12
work and not a lot more work but it takes more work than just saying
50:13
takes more work than just saying
50:13
takes more work than just saying hey i'm going to create a repository get
50:15
hey i'm going to create a repository get
50:15
hey i'm going to create a repository get some data and throw it up on a web page
50:17
some data and throw it up on a web page
50:17
some data and throw it up on a web page right
50:17
right
50:17
right right and unfortunately that's the way
50:19
right and unfortunately that's the way
50:19
right and unfortunately that's the way most code goes these days right it's
50:21
most code goes these days right it's
50:21
most code goes these days right it's sure
50:21
sure
50:21
sure it's it's very fast we got to get it
50:23
it's it's very fast we got to get it
50:23
it's it's very fast we got to get it done you know let's just slap it in
50:24
done you know let's just slap it in
50:24
done you know let's just slap it in there and get it done
50:25
there and get it done
50:26
there and get it done you know and the one thing i preach
50:27
you know and the one thing i preach
50:27
you know and the one thing i preach about all the time is
50:29
about all the time is
50:29
about all the time is you're you're basically creating a
50:32
you're you're basically creating a
50:32
you're you're basically creating a disaster later
50:33
disaster later
50:33
disaster later right and and it's going to be so bad
50:36
right and and it's going to be so bad
50:36
right and and it's going to be so bad that you won't be able to change things
50:38
that you won't be able to change things
50:38
that you won't be able to change things right or make it so difficult to change
50:40
right or make it so difficult to change
50:40
right or make it so difficult to change things and that's why i preach over and
50:42
things and that's why i preach over and
50:42
things and that's why i preach over and over again that
50:43
over again that
50:43
over again that you have to up front you have to spend
50:46
you have to up front you have to spend
50:46
you have to up front you have to spend time
50:47
time
50:47
time doing architecture right because
50:49
doing architecture right because
50:50
doing architecture right because otherwise
50:50
otherwise
50:50
otherwise and like using an architecture template
50:52
and like using an architecture template
50:52
and like using an architecture template like you have
50:53
like you have
50:53
like you have you know because you know for to save
50:56
you know because you know for to save
50:56
you know because you know for to save yourself later
50:57
yourself later
50:57
yourself later right yeah it's like it's like building
50:59
right yeah it's like it's like building
50:59
right yeah it's like it's like building a house but not spending a lot of time
51:00
a house but not spending a lot of time
51:00
a house but not spending a lot of time on a foundation so right now we don't
51:02
on a foundation so right now we don't
51:02
on a foundation so right now we don't have time to pour a foundation we just
51:03
have time to pour a foundation we just
51:03
have time to pour a foundation we just need to get this house up right and you
51:04
need to get this house up right and you
51:04
need to get this house up right and you build the thing and then the next
51:05
build the thing and then the next
51:05
build the thing and then the next thunderstorm comes along and the house
51:06
thunderstorm comes along and the house
51:06
thunderstorm comes along and the house goes
51:07
goes
51:07
goes yeah yeah yeah exactly it's not really
51:09
yeah yeah yeah exactly it's not really
51:09
yeah yeah yeah exactly it's not really saving you time in the long run
51:11
saving you time in the long run
51:11
saving you time in the long run yeah yeah yeah and you know i i've yet
51:13
yeah yeah yeah and you know i i've yet
51:13
yeah yeah yeah and you know i i've yet to
51:15
to
51:15
to i've yet to find a good way to explain
51:17
i've yet to find a good way to explain
51:17
i've yet to find a good way to explain this to bean counters
51:19
this to bean counters
51:19
this to bean counters right because they're the problem to me
51:21
right because they're the problem to me
51:22
right because they're the problem to me most of the time is that
51:23
most of the time is that
51:23
most of the time is that they only see what's in their excel
51:25
they only see what's in their excel
51:25
they only see what's in their excel spreadsheet right and so
51:26
spreadsheet right and so
51:26
spreadsheet right and so you know if you spend you know let's say
51:29
you know if you spend you know let's say
51:29
you know if you spend you know let's say let's say 500 hours setting this up for
51:32
let's say 500 hours setting this up for
51:32
let's say 500 hours setting this up for a new project let's say you know they're
51:34
a new project let's say you know they're
51:34
a new project let's say you know they're going to say well what did you do
51:36
going to say well what did you do
51:36
going to say well what did you do because you didn't produce anything
51:37
because you didn't produce anything
51:38
because you didn't produce anything really you just architected something
51:39
really you just architected something
51:40
really you just architected something and
51:40
and
51:40
and this is where that money is invaluable
51:42
this is where that money is invaluable
51:42
this is where that money is invaluable to me is when you do spend that 500
51:45
to me is when you do spend that 500
51:45
to me is when you do spend that 500 hours doing proper architecture
51:47
hours doing proper architecture
51:47
hours doing proper architecture because later and this is what they
51:49
because later and this is what they
51:49
because later and this is what they don't see is later
51:50
don't see is later
51:50
don't see is later it's going to be so easy to make changes
51:53
it's going to be so easy to make changes
51:53
it's going to be so easy to make changes and and to add new features and things
51:55
and and to add new features and things
51:55
and and to add new features and things like that
51:56
like that
51:56
like that that it what it pays for itself the
51:58
that it what it pays for itself the
51:58
that it what it pays for itself the first time
51:59
first time
51:59
first time right right to me and the the foundation
52:01
right right to me and the the foundation
52:01
right right to me and the the foundation is the metaphor i use a lot of times not
52:03
is the metaphor i use a lot of times not
52:03
is the metaphor i use a lot of times not the only one
52:04
the only one
52:04
the only one you know financial metaphors like
52:05
you know financial metaphors like
52:05
you know financial metaphors like technical debt work really well also
52:07
technical debt work really well also
52:07
technical debt work really well also um but if you if you want to and you
52:09
um but if you if you want to and you
52:09
um but if you if you want to and you have the
52:10
have the
52:10
have the benefit of actually working with the
52:11
benefit of actually working with the
52:11
benefit of actually working with the person in the same building you say hey
52:13
person in the same building you say hey
52:13
person in the same building you say hey come come with me for a walk
52:14
come come with me for a walk
52:14
come come with me for a walk take them outside turn around look at
52:15
take them outside turn around look at
52:15
take them outside turn around look at the building and say see this building
52:16
the building and say see this building
52:16
the building and say see this building what do you see i see
52:17
what do you see i see
52:18
what do you see i see the floor i see the thing i see the
52:19
the floor i see the thing i see the
52:19
the floor i see the thing i see the windows okay what you don't see is that
52:21
windows okay what you don't see is that
52:21
windows okay what you don't see is that underneath that there's a whole lot of
52:22
underneath that there's a whole lot of
52:22
underneath that there's a whole lot of work and a whole lot of concrete
52:24
work and a whole lot of concrete
52:24
work and a whole lot of concrete that's keeping that building from
52:25
that's keeping that building from
52:25
that's keeping that building from falling down right and that's the part
52:27
falling down right and that's the part
52:27
falling down right and that's the part that i did for the last 500 hours
52:29
that i did for the last 500 hours
52:29
that i did for the last 500 hours is the thing that we're going to build
52:30
is the thing that we're going to build
52:30
is the thing that we're going to build on top of and if we don't have that
52:32
on top of and if we don't have that
52:32
on top of and if we don't have that we might still be able to deliver
52:33
we might still be able to deliver
52:33
we might still be able to deliver something but it's going to fall down
52:35
something but it's going to fall down
52:35
something but it's going to fall down you know shortly thereafter just like
52:37
you know shortly thereafter just like
52:37
you know shortly thereafter just like the building in florida on thursday
52:38
the building in florida on thursday
52:38
the building in florida on thursday right yeah oh my gosh
52:39
right yeah oh my gosh
52:39
right yeah oh my gosh you know it's crazy i mean but you know
52:41
you know it's crazy i mean but you know
52:41
you know it's crazy i mean but you know that's and i'm glad you brought up the
52:43
that's and i'm glad you brought up the
52:43
that's and i'm glad you brought up the architecture i mean that you know the
52:44
architecture i mean that you know the
52:44
architecture i mean that you know the building
52:45
building
52:45
building thing because i i talk i talk about that
52:48
thing because i i talk i talk about that
52:48
thing because i i talk i talk about that a lot too is
52:49
a lot too is
52:49
a lot too is you know how many buildings are built
52:51
you know how many buildings are built
52:51
you know how many buildings are built the way we build software
52:52
the way we build software
52:52
the way we build software can you imagine if buildings were built
52:55
can you imagine if buildings were built
52:55
can you imagine if buildings were built the way we built software
52:56
the way we built software
52:56
the way we built software you know they it a a small wind would
52:59
you know they it a a small wind would
52:59
you know they it a a small wind would blow it down
53:00
blow it down
53:00
blow it down right right yeah
53:04
right right yeah
53:04
right right yeah or or build a house or build a building
53:06
or or build a house or build a building
53:06
or or build a house or build a building an agile fashion
53:07
an agile fashion
53:07
an agile fashion yeah here's a building but we haven't
53:09
yeah here's a building but we haven't
53:09
yeah here's a building but we haven't got done we haven't got the stairwells
53:10
got done we haven't got the stairwells
53:10
got done we haven't got the stairwells done yet so good luck with that
53:12
done yet so good luck with that
53:12
done yet so good luck with that you know but you know how many times
53:14
you know but you know how many times
53:14
you know but you know how many times i've tried to refactor my house and it's
53:16
i've tried to refactor my house and it's
53:16
i've tried to refactor my house and it's like oh if only i could just refactor
53:17
like oh if only i could just refactor
53:17
like oh if only i could just refactor it's like i need that wall to move two
53:19
it's like i need that wall to move two
53:19
it's like i need that wall to move two feet that way like yeah
53:20
feet that way like yeah
53:20
feet that way like yeah it doesn't work that way yeah yeah well
53:22
it doesn't work that way yeah yeah well
53:22
it doesn't work that way yeah yeah well we gotta wrap up so
53:23
we gotta wrap up so
53:23
we gotta wrap up so you know the last i i really i'm
53:25
you know the last i i really i'm
53:25
you know the last i i really i'm definitely gonna
53:27
definitely gonna
53:27
definitely gonna show this whole template thing do you
53:28
show this whole template thing do you
53:28
show this whole template thing do you talk about this in your pluralsight
53:30
talk about this in your pluralsight
53:30
talk about this in your pluralsight course
53:31
course
53:31
course uh it is covered um in the pluralsight
53:33
uh it is covered um in the pluralsight
53:33
uh it is covered um in the pluralsight domain driven design fundamentals course
53:34
domain driven design fundamentals course
53:34
domain driven design fundamentals course that uh julie lerman and i did together
53:36
that uh julie lerman and i did together
53:36
that uh julie lerman and i did together uh and we just shipped a brand new
53:38
uh and we just shipped a brand new
53:38
uh and we just shipped a brand new version that's there yeah i know
53:39
version that's there yeah i know
53:39
version that's there yeah i know everything's running.f5
53:40
everything's running.f5
53:40
everything's running.f5 um like last month oh i'm gonna check
53:44
um like last month oh i'm gonna check
53:44
um like last month oh i'm gonna check that out next week for sure
53:45
that out next week for sure
53:45
that out next week for sure and uh because i you know i get three mv
53:48
and uh because i you know i get three mv
53:48
and uh because i you know i get three mv i get
53:48
i get
53:48
i get free pluralsight you know because mvp
53:50
free pluralsight you know because mvp
53:50
free pluralsight you know because mvp stuff just like
53:52
stuff just like
53:52
stuff just like um but you get it because you're an
53:54
um but you get it because you're an
53:54
um but you get it because you're an author
53:56
author
53:56
author obviously so yeah yeah so i know you
53:59
obviously so yeah yeah so i know you
53:59
obviously so yeah yeah so i know you love coding it's obvious you love coding
54:01
love coding it's obvious you love coding
54:01
love coding it's obvious you love coding but what do you
54:02
but what do you
54:02
but what do you love to do besides coding i like to play
54:05
love to do besides coding i like to play
54:05
love to do besides coding i like to play board games
54:05
board games
54:05
board games i like to hike and bike and swim and
54:09
i like to hike and bike and swim and
54:09
i like to hike and bike and swim and you know we're getting ready to go on a
54:11
you know we're getting ready to go on a
54:11
you know we're getting ready to go on a camping trip next week
54:12
camping trip next week
54:12
camping trip next week uh with the family so for the poor
54:15
uh with the family so for the poor
54:15
uh with the family so for the poor uh no but just just you know somewhere
54:17
uh no but just just you know somewhere
54:17
uh no but just just you know somewhere to get away from people
54:19
to get away from people
54:19
to get away from people um we have two little kids that are just
54:20
um we have two little kids that are just
54:20
um we have two little kids that are just six and they're not vaccinated so we're
54:22
six and they're not vaccinated so we're
54:22
six and they're not vaccinated so we're not trying to get into any big crowds
54:23
not trying to get into any big crowds
54:24
not trying to get into any big crowds in the woods is the reasonable way to
54:25
in the woods is the reasonable way to
54:25
in the woods is the reasonable way to get away and not not be
54:27
get away and not not be
54:27
get away and not not be in crowds so well where are you going
54:30
in crowds so well where are you going
54:30
in crowds so well where are you going just going to southern ohio
54:31
just going to southern ohio
54:31
just going to southern ohio um there's a campground down there
54:34
um there's a campground down there
54:34
um there's a campground down there cool if you mention it though maybe some
54:36
cool if you mention it though maybe some
54:36
cool if you mention it though maybe some people come in and ask you
54:38
people come in and ask you
54:38
people come in and ask you coding questions so how keep it secret
54:41
coding questions so how keep it secret
54:41
coding questions so how keep it secret then
54:42
then
54:42
then and the last question of course i always
54:43
and the last question of course i always
54:43
and the last question of course i always ask is do you have anything to plug you
54:45
ask is do you have anything to plug you
54:45
ask is do you have anything to plug you know
54:45
know
54:45
know besides your website in pluralsight
54:47
besides your website in pluralsight
54:47
besides your website in pluralsight anything else
54:48
anything else
54:48
anything else um yeah the dev better coaching program
54:51
um yeah the dev better coaching program
54:51
um yeah the dev better coaching program that i mentioned
54:52
that i mentioned
54:52
that i mentioned um is is open to folks it's not free um
54:55
um is is open to folks it's not free um
54:55
um is is open to folks it's not free um but it is uh
54:56
but it is uh
54:56
but it is uh a good community of folks that are all
54:57
a good community of folks that are all
54:57
a good community of folks that are all trying to improve themselves and
54:59
trying to improve themselves and
54:59
trying to improve themselves and uh you know increase their their career
55:01
uh you know increase their their career
55:01
uh you know increase their their career so i would just plug that
55:02
so i would just plug that
55:02
so i would just plug that otherwise you can you know find all my
55:04
otherwise you can you know find all my
55:04
otherwise you can you know find all my free resources on ourdallas.com
55:06
free resources on ourdallas.com
55:06
free resources on ourdallas.com i have a newsletter i send out every
55:08
i have a newsletter i send out every
55:08
i have a newsletter i send out every week from there if you go to the tips
55:10
week from there if you go to the tips
55:10
week from there if you go to the tips link at the top and then i've got a ton
55:12
link at the top and then i've got a ton
55:12
link at the top and then i've got a ton of stuff on pluralsight if you have a
55:13
of stuff on pluralsight if you have a
55:14
of stuff on pluralsight if you have a subscription or if you don't you can get
55:15
subscription or if you don't you can get
55:15
subscription or if you don't you can get a trial and watch it for free
55:17
a trial and watch it for free
55:17
a trial and watch it for free and and that's that's probably about it
55:19
and and that's that's probably about it
55:19
and and that's that's probably about it i got a bunch of ebooks that are free
55:21
i got a bunch of ebooks that are free
55:21
i got a bunch of ebooks that are free from microsoft too so
55:22
from microsoft too so
55:22
from microsoft too so uh you'll find those on our dallas.com
55:24
uh you'll find those on our dallas.com
55:24
uh you'll find those on our dallas.com as well cool
55:25
as well cool
55:25
as well cool well you know i really appreciate you
55:27
well you know i really appreciate you
55:27
well you know i really appreciate you being on the show i and this has turned
55:29
being on the show i and this has turned
55:29
being on the show i and this has turned out to be an awesome show
55:30
out to be an awesome show
55:30
out to be an awesome show and uh it's also my shows are awesome
55:34
and uh it's also my shows are awesome
55:34
and uh it's also my shows are awesome when i have fun
55:35
when i have fun
55:35
when i have fun which i have fun in all my shows but
55:37
which i have fun in all my shows but
55:37
which i have fun in all my shows but when i get to learn something
55:39
when i get to learn something
55:39
when i get to learn something right and uh you know i love learning
55:41
right and uh you know i love learning
55:41
right and uh you know i love learning and it's it's great to have guests on
55:43
and it's it's great to have guests on
55:43
and it's it's great to have guests on that you know i can
55:44
that you know i can
55:44
that you know i can i can learn something from because we
55:45
i can learn something from because we
55:45
i can learn something from because we all we all can learn right
55:47
all we all can learn right
55:47
all we all can learn right um no no one knows everything right and
55:49
um no no one knows everything right and
55:49
um no no one knows everything right and so uh keep learning out there everybody
55:51
so uh keep learning out there everybody
55:51
so uh keep learning out there everybody and and please check out steve's courses
55:53
and and please check out steve's courses
55:53
and and please check out steve's courses and
55:54
and
55:54
and and books and things like that and uh
55:56
and books and things like that and uh
55:56
and books and things like that and uh and uh you have a welcome open
55:58
and uh you have a welcome open
55:58
and uh you have a welcome open invitation anytime you want to come on
55:59
invitation anytime you want to come on
55:59
invitation anytime you want to come on the show because we only got to one
56:01
the show because we only got to one
56:01
the show because we only got to one subject then there's at least two more
56:02
subject then there's at least two more
56:02
subject then there's at least two more left so
56:03
left so
56:03
left so sure sure anytime you want to come on
56:05
sure sure anytime you want to come on
56:05
sure sure anytime you want to come on just let me know and uh we'll hook you
56:06
just let me know and uh we'll hook you
56:06
just let me know and uh we'll hook you up if you want to hang out afterwards we
56:08
up if you want to hang out afterwards we
56:08
up if you want to hang out afterwards we can tell you the numbers for mvp stuff
56:10
can tell you the numbers for mvp stuff
56:10
can tell you the numbers for mvp stuff um after the show but if you've got to
56:12
um after the show but if you've got to
56:12
um after the show but if you've got to go somewhere just email me i can email
56:14
go somewhere just email me i can email
56:14
go somewhere just email me i can email you the numbers yeah that's fine right
56:16
you the numbers yeah that's fine right
56:16
you the numbers yeah that's fine right well thank you very much i really
56:17
well thank you very much i really
56:17
well thank you very much i really appreciate it
56:18
appreciate it
56:18
appreciate it thank you it was a lot of fun yeah thank
56:19
thank you it was a lot of fun yeah thank
56:19
thank you it was a lot of fun yeah thank you everybody
56:21
you everybody
56:21
you everybody wow that was a uh that was an awesome
56:24
wow that was a uh that was an awesome
56:24
wow that was a uh that was an awesome that was an awesome uh a really great
56:28
that was an awesome uh a really great
56:28
that was an awesome uh a really great uh sorry i was looking at my powerpoint
56:30
uh sorry i was looking at my powerpoint
56:30
uh sorry i was looking at my powerpoint slides now
56:31
slides now
56:31
slides now i'm still reeling from that it's uh that
56:34
i'm still reeling from that it's uh that
56:34
i'm still reeling from that it's uh that was really uh
56:35
was really uh
56:35
was really uh fast paced and i learned a lot and i
56:37
fast paced and i learned a lot and i
56:37
fast paced and i learned a lot and i can't wait to go check out steve's uh
56:39
can't wait to go check out steve's uh
56:39
can't wait to go check out steve's uh uh courses and things like that um i
56:41
uh courses and things like that um i
56:41
uh courses and things like that um i definitely have already seen things that
56:43
definitely have already seen things that
56:43
definitely have already seen things that i want to use in the next project i work
56:44
i want to use in the next project i work
56:44
i want to use in the next project i work on for sure
56:45
on for sure
56:45
on for sure so um everybody wins a copy of code rush
56:49
so um everybody wins a copy of code rush
56:49
so um everybody wins a copy of code rush from devexpress as
56:50
from devexpress as
56:50
from devexpress as as i always say devexpress i mean code
56:52
as i always say devexpress i mean code
56:52
as i always say devexpress i mean code rush is my favorite refactoring tool
56:54
rush is my favorite refactoring tool
56:54
rush is my favorite refactoring tool it's the only one i've used for visual
56:55
it's the only one i've used for visual
56:55
it's the only one i've used for visual studio
56:56
studio
56:56
studio and so if you want to use the same
56:57
and so if you want to use the same
56:57
and so if you want to use the same refactoring tool that i do i just go to
57:01
refactoring tool that i do i just go to
57:01
refactoring tool that i do i just go to devexpress.com.dave
57:02
devexpress.com.dave
57:02
devexpress.com.dave and get a free license copy it's not
57:04
and get a free license copy it's not
57:04
and get a free license copy it's not fake or
57:05
fake or
57:05
fake or stripped down or anything and uh and if
57:07
stripped down or anything and uh and if
57:07
stripped down or anything and uh and if you do
57:08
you do
57:08
you do download it let me know how you like it
57:10
download it let me know how you like it
57:10
download it let me know how you like it you know i love it so let me know how
57:12
you know i love it so let me know how
57:12
you know i love it so let me know how you like it
57:14
you like it
57:14
you like it so i have some geek humor today i
57:15
so i have some geek humor today i
57:15
so i have some geek humor today i thought it was appropriate for
57:17
thought it was appropriate for
57:17
thought it was appropriate for um you know american america kind of
57:20
um you know american america kind of
57:20
um you know american america kind of opening up again
57:21
opening up again
57:21
opening up again and i kind of did a cartoon about this a
57:23
and i kind of did a cartoon about this a
57:23
and i kind of did a cartoon about this a month ago uh but i
57:25
month ago uh but i
57:25
month ago uh but i i think this one is better than the
57:26
i think this one is better than the
57:26
i think this one is better than the cartoon that i made and you know
57:28
cartoon that i made and you know
57:28
cartoon that i made and you know everybody should come back to the office
57:29
everybody should come back to the office
57:30
everybody should come back to the office i've had managers do this before
57:32
i've had managers do this before
57:32
i've had managers do this before literally and and uh and not be
57:35
literally and and uh and not be
57:35
literally and and uh and not be before covet of course and why
57:37
before covet of course and why
57:37
before covet of course and why productivity hasn't dipped
57:38
productivity hasn't dipped
57:38
productivity hasn't dipped saving commute time and actually
57:40
saving commute time and actually
57:40
saving commute time and actually microsoft has proven they've gotten more
57:42
microsoft has proven they've gotten more
57:42
microsoft has proven they've gotten more productivity out of it right and uh why
57:45
productivity out of it right and uh why
57:45
productivity out of it right and uh why do you want me to come back in the
57:46
do you want me to come back in the
57:46
do you want me to come back in the office
57:47
office
57:47
office so i can monitor you better
57:50
so i can monitor you better
57:50
so i can monitor you better well what have you been doing the last
57:52
well what have you been doing the last
57:52
well what have you been doing the last year
57:54
year
57:54
year i don't know i i really hope companies
57:57
i don't know i i really hope companies
57:57
i don't know i i really hope companies you know take on microsoft's uh guidance
58:00
you know take on microsoft's uh guidance
58:00
you know take on microsoft's uh guidance you know in what they're doing and uh
58:03
you know in what they're doing and uh
58:03
you know in what they're doing and uh doing a hybrid model
58:04
doing a hybrid model
58:04
doing a hybrid model and not making everybody come back into
58:06
and not making everybody come back into
58:06
and not making everybody come back into work um anymore
58:08
work um anymore
58:08
work um anymore you know and i know a lot of other
58:09
you know and i know a lot of other
58:09
you know and i know a lot of other companies are adopting that too
58:11
companies are adopting that too
58:11
companies are adopting that too and and uh i think it's a great idea
58:13
and and uh i think it's a great idea
58:13
and and uh i think it's a great idea because i work
58:14
because i work
58:14
because i work i love working at home but just because
58:16
i love working at home but just because
58:16
i love working at home but just because i'm more productive i don't mind going
58:18
i'm more productive i don't mind going
58:18
i'm more productive i don't mind going in
58:18
in
58:18
in and chatting with people once a while
58:20
and chatting with people once a while
58:20
and chatting with people once a while but you know i
58:21
but you know i
58:21
but you know i prefer to be at home because i just get
58:23
prefer to be at home because i just get
58:23
prefer to be at home because i just get more work done um
58:24
more work done um
58:24
more work done um and i live a mile from the beach you can
58:27
and i live a mile from the beach you can
58:27
and i live a mile from the beach you can see one of the pictures i've taken
58:28
see one of the pictures i've taken
58:28
see one of the pictures i've taken behind me
58:29
behind me
58:29
behind me that my chair's in the way sorry uh so
58:32
that my chair's in the way sorry uh so
58:32
that my chair's in the way sorry uh so i'd rather be here than a stuffy office
58:34
i'd rather be here than a stuffy office
58:34
i'd rather be here than a stuffy office and a big cube land
58:35
and a big cube land
58:36
and a big cube land and stuff like that right there um
58:39
and stuff like that right there um
58:39
and stuff like that right there um it's all right new code rules
58:42
it's all right new code rules
58:42
it's all right new code rules so today's new code rules is actually
58:44
so today's new code rules is actually
58:44
so today's new code rules is actually based on
58:46
based on
58:46
based on uh some the information that came back
58:48
uh some the information that came back
58:48
uh some the information that came back to me from the conference last week so
58:51
to me from the conference last week so
58:51
to me from the conference last week so most of you know
58:52
most of you know
58:52
most of you know i hosted along with c-sharp corner live
58:54
i hosted along with c-sharp corner live
58:54
i hosted along with c-sharp corner live uh
58:55
uh
58:55
uh what i built the world's first uh code
58:57
what i built the world's first uh code
58:57
what i built the world's first uh code quality
58:58
quality
58:58
quality and performance conference and um
59:01
and performance conference and um
59:01
and performance conference and um and uh even though simon and i were
59:03
and uh even though simon and i were
59:03
and uh even though simon and i were punch drunk at the end
59:05
punch drunk at the end
59:05
punch drunk at the end uh i had a great time and i had a lot of
59:07
uh i had a great time and i had a lot of
59:07
uh i had a great time and i had a lot of great
59:08
great
59:08
great um awesome speakers on it and uh it took
59:11
um awesome speakers on it and uh it took
59:11
um awesome speakers on it and uh it took me a few days to recover from the
59:12
me a few days to recover from the
59:12
me a few days to recover from the conference even though i was sitting in
59:13
conference even though i was sitting in
59:14
conference even though i was sitting in a chair most of the time
59:15
a chair most of the time
59:15
a chair most of the time but uh uh the conference kind of showed
59:18
but uh uh the conference kind of showed
59:18
but uh uh the conference kind of showed me
59:18
me
59:18
me what i already knew but i kind of want
59:20
what i already knew but i kind of want
59:20
what i already knew but i kind of want to share this and and kind of make a
59:22
to share this and and kind of make a
59:22
to share this and and kind of make a point with no code worlds today
59:23
point with no code worlds today
59:23
point with no code worlds today so
59:26
so new code rules um conference sessions
59:31
so new code rules um conference sessions
59:31
so new code rules um conference sessions must include what devs need to learn and
59:33
must include what devs need to learn and
59:33
must include what devs need to learn and i'll
59:34
i'll
59:34
i'll come back to this in the last slide um
59:37
come back to this in the last slide um
59:37
come back to this in the last slide um this has been a kind of a pet peeve of
59:39
this has been a kind of a pet peeve of
59:39
this has been a kind of a pet peeve of mine for a while now
59:41
mine for a while now
59:41
mine for a while now you know when you go to most well i'll
59:42
you know when you go to most well i'll
59:42
you know when you go to most well i'll talk about that when that slide comes up
59:45
talk about that when that slide comes up
59:45
talk about that when that slide comes up but but i believe you know this
59:47
but but i believe you know this
59:47
but but i believe you know this conference you know
59:49
conference you know
59:49
conference you know showed uh you know kind of gives me data
59:51
showed uh you know kind of gives me data
59:52
showed uh you know kind of gives me data to
59:52
to
59:52
to to to know this is true right um
59:56
to to know this is true right um
59:56
to to know this is true right um because most of the great conference
59:58
because most of the great conference
59:58
because most of the great conference sessions i've been to
59:59
sessions i've been to
59:59
sessions i've been to had nothing to do with the newfangled
1:00:01
had nothing to do with the newfangled
1:00:01
had nothing to do with the newfangled thing that came out right it had to do
1:00:03
thing that came out right it had to do
1:00:03
thing that came out right it had to do with more of like what steve was talking
1:00:05
with more of like what steve was talking
1:00:05
with more of like what steve was talking about
1:00:05
about
1:00:05
about um and uh so i i think conferences need
1:00:09
um and uh so i i think conferences need
1:00:09
um and uh so i i think conferences need to
1:00:10
to
1:00:10
to purposely you know do things like this
1:00:12
purposely you know do things like this
1:00:12
purposely you know do things like this so
1:00:13
so
1:00:13
so let me share some data from last week so
1:00:16
let me share some data from last week so
1:00:16
let me share some data from last week so um last week you know we we had nine
1:00:18
um last week you know we we had nine
1:00:18
um last week you know we we had nine speakers including myself
1:00:20
speakers including myself
1:00:20
speakers including myself we had over 65 000 viewers
1:00:24
we had over 65 000 viewers
1:00:24
we had over 65 000 viewers yeah i don't even believe that number
1:00:26
yeah i don't even believe that number
1:00:26
yeah i don't even believe that number when
1:00:27
when
1:00:27
when when simon told me this number i was
1:00:28
when simon told me this number i was
1:00:28
when simon told me this number i was going you're kidding me right
1:00:30
going you're kidding me right
1:00:30
going you're kidding me right there's no way but we had over 65 000
1:00:34
there's no way but we had over 65 000
1:00:34
there's no way but we had over 65 000 viewers
1:00:35
viewers
1:00:35
viewers as of like monday or tuesday right with
1:00:37
as of like monday or tuesday right with
1:00:37
as of like monday or tuesday right with over 500 comments like we got so many
1:00:40
over 500 comments like we got so many
1:00:40
over 500 comments like we got so many great comments i was really happy about
1:00:41
great comments i was really happy about
1:00:41
great comments i was really happy about that
1:00:43
that
1:00:43
that and the age group um i was 18 to 45
1:00:48
and the age group um i was 18 to 45
1:00:48
and the age group um i was 18 to 45 i'm not going to share the other
1:00:49
i'm not going to share the other
1:00:49
i'm not going to share the other demographics because it's kind of boring
1:00:51
demographics because it's kind of boring
1:00:51
demographics because it's kind of boring for you but um i thought the conference
1:00:55
for you but um i thought the conference
1:00:55
for you but um i thought the conference went great i don't know if you've uh
1:00:57
went great i don't know if you've uh
1:00:57
went great i don't know if you've uh you know uh uh saw the conference last
1:01:00
you know uh uh saw the conference last
1:01:00
you know uh uh saw the conference last week and
1:01:00
week and
1:01:00
week and and uh watched some of the sessions but
1:01:02
and uh watched some of the sessions but
1:01:02
and uh watched some of the sessions but um
1:01:03
um
1:01:03
um i really i you know during the
1:01:05
i really i you know during the
1:01:05
i really i you know during the conference last week i was going we're
1:01:07
conference last week i was going we're
1:01:07
conference last week i was going we're going to do this again next year
1:01:08
going to do this again next year
1:01:08
going to do this again next year because it was going so well even
1:01:10
because it was going so well even
1:01:10
because it was going so well even halfway through and um
1:01:12
halfway through and um
1:01:12
halfway through and um and these numbers prove it that it went
1:01:14
and these numbers prove it that it went
1:01:14
and these numbers prove it that it went so well
1:01:18
so so i did a little research this week
1:01:20
so so i did a little research this week
1:01:20
so so i did a little research this week and i looked at all the major
1:01:22
and i looked at all the major
1:01:22
and i looked at all the major conferences that have been announced in
1:01:24
conferences that have been announced in
1:01:24
conferences that have been announced in the united states and for 2021 and i
1:01:27
the united states and for 2021 and i
1:01:27
the united states and for 2021 and i looked at
1:01:28
looked at
1:01:28
looked at all their sessions and most conferences
1:01:31
all their sessions and most conferences
1:01:31
all their sessions and most conferences had no
1:01:31
had no
1:01:31
had no sessions wrapped around what we were
1:01:33
sessions wrapped around what we were
1:01:33
sessions wrapped around what we were talking about last week
1:01:36
talking about last week
1:01:36
talking about last week a couple had one one had two and that's
1:01:39
a couple had one one had two and that's
1:01:39
a couple had one one had two and that's about it
1:01:40
about it
1:01:40
about it you know and uh that
1:01:43
you know and uh that
1:01:43
you know and uh that does not to me that's not good right um
1:01:46
does not to me that's not good right um
1:01:46
does not to me that's not good right um because we're not teaching these kind of
1:01:48
because we're not teaching these kind of
1:01:48
because we're not teaching these kind of skills
1:01:49
skills
1:01:49
skills that you will use through your entire
1:01:51
that you will use through your entire
1:01:51
that you will use through your entire career right
1:01:52
career right
1:01:52
career right because frameworks come and go languages
1:01:54
because frameworks come and go languages
1:01:54
because frameworks come and go languages come and go but skills
1:01:56
come and go but skills
1:01:56
come and go but skills like architecture you know things like
1:01:58
like architecture you know things like
1:01:58
like architecture you know things like that will stay with you your entire
1:02:00
that will stay with you your entire
1:02:00
that will stay with you your entire career
1:02:01
career
1:02:01
career and i think this needs to be better at
1:02:04
and i think this needs to be better at
1:02:04
and i think this needs to be better at conferences
1:02:07
conferences
1:02:07
conferences and so much so back in 2016 i wrote this
1:02:10
and so much so back in 2016 i wrote this
1:02:10
and so much so back in 2016 i wrote this article
1:02:11
article
1:02:11
article basically saying this that conferences
1:02:14
basically saying this that conferences
1:02:14
basically saying this that conferences because i was frustrated
1:02:16
because i was frustrated
1:02:16
because i was frustrated because conferences were picking up my
1:02:18
because conferences were picking up my
1:02:18
because conferences were picking up my sessions around this topic
1:02:20
sessions around this topic
1:02:20
sessions around this topic and the only thing i could think of is
1:02:22
and the only thing i could think of is
1:02:22
and the only thing i could think of is they really don't care
1:02:23
they really don't care
1:02:24
they really don't care and they don't you know and when i mean
1:02:26
and they don't you know and when i mean
1:02:26
and they don't you know and when i mean the big conference is america i mean the
1:02:28
the big conference is america i mean the
1:02:28
the big conference is america i mean the big paid conferences
1:02:29
big paid conferences
1:02:29
big paid conferences right where you pay you know up to three
1:02:32
right where you pay you know up to three
1:02:32
right where you pay you know up to three thousand dollars now they're asking to
1:02:33
thousand dollars now they're asking to
1:02:33
thousand dollars now they're asking to go to a conference in america now
1:02:36
go to a conference in america now
1:02:36
go to a conference in america now and um so you know i wrote about this
1:02:39
and um so you know i wrote about this
1:02:39
and um so you know i wrote about this five years ago
1:02:40
five years ago
1:02:40
five years ago and uh so i'm really happy with the
1:02:43
and uh so i'm really happy with the
1:02:43
and uh so i'm really happy with the numbers
1:02:43
numbers
1:02:44
numbers we got so and because yeah big
1:02:47
we got so and because yeah big
1:02:47
we got so and because yeah big conferences won't accept my sessions
1:02:48
conferences won't accept my sessions
1:02:48
conferences won't accept my sessions and uh maybe it's me it could be
1:02:52
and uh maybe it's me it could be
1:02:52
and uh maybe it's me it could be uh but yeah i'm not talking about
1:02:54
uh but yeah i'm not talking about
1:02:54
uh but yeah i'm not talking about something that's sexy and
1:02:55
something that's sexy and
1:02:55
something that's sexy and and new and fun i'm talking about you
1:02:57
and new and fun i'm talking about you
1:02:57
and new and fun i'm talking about you know
1:02:58
know
1:02:58
know quality and uh and uh
1:03:01
quality and uh and uh
1:03:01
quality and uh and uh why this is such a big passion with me
1:03:03
why this is such a big passion with me
1:03:03
why this is such a big passion with me is because i'm tired of dealing with
1:03:05
is because i'm tired of dealing with
1:03:05
is because i'm tired of dealing with crappy applications
1:03:07
crappy applications
1:03:07
crappy applications like you know i i have a problem with
1:03:09
like you know i i have a problem with
1:03:09
like you know i i have a problem with onedrive right now where
1:03:11
onedrive right now where
1:03:11
onedrive right now where it won't download files unless i reboot
1:03:15
it won't download files unless i reboot
1:03:15
it won't download files unless i reboot on my mac too same problem on mac so
1:03:17
on my mac too same problem on mac so
1:03:18
on my mac too same problem on mac so it's not my machine
1:03:19
it's not my machine
1:03:19
it's not my machine it's it's one drive right and
1:03:22
it's it's one drive right and
1:03:22
it's it's one drive right and and i know people hire me to fix their
1:03:25
and i know people hire me to fix their
1:03:25
and i know people hire me to fix their crappy code
1:03:26
crappy code
1:03:26
crappy code but i'd rather go into a company where
1:03:28
but i'd rather go into a company where
1:03:28
but i'd rather go into a company where the code is not so crappy
1:03:31
the code is not so crappy
1:03:31
the code is not so crappy so i can work on other fun things but um
1:03:35
so you know conferences must offer
1:03:38
so you know conferences must offer
1:03:38
so you know conferences must offer sessions not only
1:03:39
sessions not only
1:03:39
sessions not only for what we want to learn but what we
1:03:42
for what we want to learn but what we
1:03:42
for what we want to learn but what we need to learn
1:03:43
need to learn
1:03:43
need to learn what we need to learn is important to me
1:03:46
what we need to learn is important to me
1:03:46
what we need to learn is important to me right because like i said
1:03:47
right because like i said
1:03:47
right because like i said these are the things you're going to
1:03:48
these are the things you're going to
1:03:48
these are the things you're going to keep with you your entire career
1:03:54
so call to action for this new code
1:03:56
so call to action for this new code
1:03:56
so call to action for this new code rules is
1:03:57
rules is
1:03:57
rules is email conferences and demand sessions
1:04:00
email conferences and demand sessions
1:04:00
email conferences and demand sessions like this
1:04:01
like this
1:04:01
like this all of them have email addresses or
1:04:02
all of them have email addresses or
1:04:02
all of them have email addresses or tweet them or facebook them or whatever
1:04:06
tweet them or facebook them or whatever
1:04:06
tweet them or facebook them or whatever whatever you want to do but you guys
1:04:07
whatever you want to do but you guys
1:04:07
whatever you want to do but you guys need to start making noise
1:04:09
need to start making noise
1:04:09
need to start making noise if you want to have sessions like this
1:04:11
if you want to have sessions like this
1:04:11
if you want to have sessions like this at conferences
1:04:12
at conferences
1:04:12
at conferences you have to make noise because me making
1:04:14
you have to make noise because me making
1:04:14
you have to make noise because me making noise
1:04:15
noise
1:04:15
noise doesn't help you need to make noise
1:04:18
doesn't help you need to make noise
1:04:18
doesn't help you need to make noise because you're the ones going to pay
1:04:19
because you're the ones going to pay
1:04:19
because you're the ones going to pay three thousand dollars to go to a
1:04:20
three thousand dollars to go to a
1:04:20
three thousand dollars to go to a conference
1:04:22
conference
1:04:22
conference i i'm not gonna pay three thousand
1:04:24
i i'm not gonna pay three thousand
1:04:24
i i'm not gonna pay three thousand dollars to go to a conference in the us
1:04:26
dollars to go to a conference in the us
1:04:26
dollars to go to a conference in the us um so you need to email them
1:04:29
um so you need to email them
1:04:29
um so you need to email them and uh so i hope you do um
1:04:33
and uh so i hope you do um
1:04:33
and uh so i hope you do um and uh and because well i hope you do
1:04:36
and uh and because well i hope you do
1:04:36
and uh and because well i hope you do because this is important to you
1:04:38
because this is important to you
1:04:38
because this is important to you maybe right now maybe not right now but
1:04:41
maybe right now maybe not right now but
1:04:41
maybe right now maybe not right now but later your career will be
1:04:44
later your career will be
1:04:44
later your career will be so the only current solution i can come
1:04:46
so the only current solution i can come
1:04:46
so the only current solution i can come up with
1:04:47
up with
1:04:47
up with because you know trying to get these big
1:04:49
because you know trying to get these big
1:04:49
because you know trying to get these big paid conferences to do this is going to
1:04:51
paid conferences to do this is going to
1:04:51
paid conferences to do this is going to be really hard
1:04:52
be really hard
1:04:52
be really hard so my biggest you know um suggestion to
1:04:55
so my biggest you know um suggestion to
1:04:55
so my biggest you know um suggestion to anybody and i've been making this
1:04:56
anybody and i've been making this
1:04:56
anybody and i've been making this suggestion for many many years
1:04:58
suggestion for many many years
1:04:58
suggestion for many many years is go to a community run conference like
1:05:01
is go to a community run conference like
1:05:01
is go to a community run conference like a code camp
1:05:02
a code camp
1:05:02
a code camp or something like that you know
1:05:04
or something like that you know
1:05:04
or something like that you know conference run by developers just like
1:05:07
conference run by developers just like
1:05:07
conference run by developers just like you and me
1:05:08
you and me
1:05:08
you and me right the largest community conference i
1:05:11
right the largest community conference i
1:05:11
right the largest community conference i think
1:05:12
think
1:05:12
think in the world used to be the silicon
1:05:14
in the world used to be the silicon
1:05:14
in the world used to be the silicon valley code camp where you they used to
1:05:16
valley code camp where you they used to
1:05:16
valley code camp where you they used to get 2 000 people a day
1:05:18
get 2 000 people a day
1:05:18
get 2 000 people a day at this code camp right and and the last
1:05:21
at this code camp right and and the last
1:05:21
at this code camp right and and the last time i looked at the sessions
1:05:23
time i looked at the sessions
1:05:23
time i looked at the sessions when i was like writing that article
1:05:24
when i was like writing that article
1:05:24
when i was like writing that article back in 2016
1:05:27
back in 2016
1:05:27
back in 2016 um the silicon valley code camp that
1:05:29
um the silicon valley code camp that
1:05:29
um the silicon valley code camp that year had
1:05:30
year had
1:05:30
year had 20 of sessions that were like this
1:05:34
20 of sessions that were like this
1:05:34
20 of sessions that were like this for code quality architecture you know
1:05:36
for code quality architecture you know
1:05:36
for code quality architecture you know the important things that we need to
1:05:37
the important things that we need to
1:05:37
the important things that we need to learn besides the new fangled framework
1:05:39
learn besides the new fangled framework
1:05:39
learn besides the new fangled framework that came out
1:05:40
that came out
1:05:40
that came out so if you can't make it to a big paid
1:05:43
so if you can't make it to a big paid
1:05:43
so if you can't make it to a big paid conference or you don't want to go
1:05:44
conference or you don't want to go
1:05:44
conference or you don't want to go because they don't offer sessions like
1:05:46
because they don't offer sessions like
1:05:46
because they don't offer sessions like this
1:05:46
this
1:05:46
this go to your local community conferences i
1:05:49
go to your local community conferences i
1:05:49
go to your local community conferences i know some are being announced but i
1:05:50
know some are being announced but i
1:05:50
know some are being announced but i think a lot of those will already pick
1:05:51
think a lot of those will already pick
1:05:52
think a lot of those will already pick up next year
1:05:53
up next year
1:05:53
up next year or just go to your local user group i
1:05:54
or just go to your local user group i
1:05:54
or just go to your local user group i know they have sessions like this too
1:05:56
know they have sessions like this too
1:05:56
know they have sessions like this too because you know those conferences and
1:05:58
because you know those conferences and
1:05:58
because you know those conferences and those groups are run by people just like
1:06:00
those groups are run by people just like
1:06:00
those groups are run by people just like you
1:06:00
you
1:06:00
you you and me they're not run by a business
1:06:03
you and me they're not run by a business
1:06:03
you and me they're not run by a business so there's my new code rules for today
1:06:07
all right well thanks everybody for uh
1:06:09
all right well thanks everybody for uh
1:06:10
all right well thanks everybody for uh you know
1:06:10
you know
1:06:10
you know hanging out for this uh great show we
1:06:12
hanging out for this uh great show we
1:06:12
hanging out for this uh great show we had today um next week uh
1:06:14
had today um next week uh
1:06:14
had today um next week uh we're gonna have uh actually one of the
1:06:16
we're gonna have uh actually one of the
1:06:16
we're gonna have uh actually one of the speakers from the code quality
1:06:17
speakers from the code quality
1:06:17
speakers from the code quality conference last week
1:06:19
conference last week
1:06:19
conference last week uh i pronounced this right tj's cobra
1:06:22
uh i pronounced this right tj's cobra
1:06:22
uh i pronounced this right tj's cobra um i'm sorry if i mispronounce your name
1:06:25
um i'm sorry if i mispronounce your name
1:06:25
um i'm sorry if i mispronounce your name um
1:06:25
um
1:06:25
um and so he's going to be on next week i
1:06:27
and so he's going to be on next week i
1:06:27
and so he's going to be on next week i know it's a holiday in
1:06:29
know it's a holiday in
1:06:29
know it's a holiday in the united states but i usually don't do
1:06:30
the united states but i usually don't do
1:06:30
the united states but i usually don't do anything for july 4th anyway so
1:06:32
anything for july 4th anyway so
1:06:32
anything for july 4th anyway so um please be safe again
1:06:36
um please be safe again
1:06:36
um please be safe again uh from covid we're not over it we're
1:06:38
uh from covid we're not over it we're
1:06:38
uh from covid we're not over it we're only 40
1:06:39
only 40
1:06:39
only 40 46 in america so please be safe
1:06:42
46 in america so please be safe
1:06:42
46 in america so please be safe safe please get your freaking vaccine
1:06:45
safe please get your freaking vaccine
1:06:45
safe please get your freaking vaccine and
1:06:45
and
1:06:45
and and please go donate blood to help
1:06:48
and please go donate blood to help
1:06:48
and please go donate blood to help because
1:06:48
because
1:06:48
because you know the blood bank is in dire
1:06:50
you know the blood bank is in dire
1:06:50
you know the blood bank is in dire shortage right now
1:06:51
shortage right now
1:06:51
shortage right now i talked to them last week on the phone
1:06:53
i talked to them last week on the phone
1:06:53
i talked to them last week on the phone and uh they're really into
1:06:56
and uh they're really into
1:06:56
and uh they're really into trouble and i'm sure they're in trouble
1:06:57
trouble and i'm sure they're in trouble
1:06:57
trouble and i'm sure they're in trouble throughout the country and the world
1:06:59
throughout the country and the world
1:06:59
throughout the country and the world so please go donate blood and it doesn't
1:07:02
so please go donate blood and it doesn't
1:07:02
so please go donate blood and it doesn't take much time
1:07:04
take much time
1:07:04
take much time it's free you might get a free t-shirt
1:07:06
it's free you might get a free t-shirt
1:07:06
it's free you might get a free t-shirt or something out of it
1:07:07
or something out of it
1:07:07
or something out of it and and but best of all it makes you
1:07:09
and and but best of all it makes you
1:07:09
and and but best of all it makes you feel good because you get to help
1:07:11
feel good because you get to help
1:07:11
feel good because you get to help somebody else
1:07:13
somebody else
1:07:13
somebody else all right so uh thanks again please
1:07:15
all right so uh thanks again please
1:07:16
all right so uh thanks again please email
1:07:16
email
1:07:16
email me your suggestions to rock in the code
1:07:18
me your suggestions to rock in the code
1:07:18
me your suggestions to rock in the code world at csharpcorner.com
1:07:20
world at csharpcorner.com
1:07:20
world at csharpcorner.com uh what guests you want to see what
1:07:21
uh what guests you want to see what
1:07:21
uh what guests you want to see what topics you want to see uh things like
1:07:23
topics you want to see uh things like
1:07:24
topics you want to see uh things like that if you have a suggestion for a new
1:07:25
that if you have a suggestion for a new
1:07:26
that if you have a suggestion for a new code rule
1:07:26
code rule
1:07:26
code rule uh rules i can do that uh please leave
1:07:29
uh rules i can do that uh please leave
1:07:29
uh rules i can do that uh please leave my email
1:07:31
my email
1:07:31
my email please email me and i'll see you next
1:07:35
[Applause]
1:07:40
week
1:07:43
week
1:07:43
week [Music]
1:07:43
[Music]
1:07:43
[Music] [Applause]
1:07:52
[Music]
1:08:02
[Applause]
1:08:04
[Applause]
1:08:04
[Applause] [Music]
1:08:14
[Music]
1:08:28
[Music]
1:08:28
[Music] [Applause]
1:08:29
[Applause]
1:08:29
[Applause] [Music]
1:08:38
[Music]
1:08:47
[Applause]
1:08:48
[Applause]
1:08:48
[Applause] [Music]
1:09:03
[Music]
1:09:06
[Music]
1:09:06
[Music] [Applause]
1:09:08
[Applause]
1:09:08
[Applause] [Music]
1:09:16
[Music]
1:09:16
[Music] you
#Arts & Entertainment


