Want to improve your front-end and back-end skills as a .NET developer? This course is for you! In Part 2 of the "Become a Full-stack .NET Developer" series, you'll cover advanced topics like CRUD operations, object-oriented design, and more.
If you're a .NET developer who wants to increase your confidence in converting more complex requirements into working software with elegant design and implementation, end to end, this course is for you. This course, Become a Full-stack .NET Developer - Advanced Topics, is the second part in "Become a Full-stack .NET Developer" series. In the first part, you built the core uses for your mini social networking application, GigHub. In this next part, first you'll implement the CRUD operations and a notification system that is similar to Facebook notifications. You'll also learn a lot about object-oriented design, building APIs, and using Bootstrap components to build modern applications on both the front end and back end. Finally, you'll cover topics such as handling Bootstrap events and implementing searches. By the end of this course, you'll have a handle on even the most complex aspects of .NET development so that you can make software that's fantastic on both the front-end and back-end.
Course Overview Hi, everyone! My name is Mosh Hamedani, and welcome to the second part of my course, Become a Full-stack. NET Developer. I'm a software engineer and author with 15 years of professional experience. The demand for full-stack developers who are comfortable with both front-end and back-end development is increasing constantly. And in fact, some companies only hire full-stack developers. In the first part of the course, we explored the core front-end and back-end skills that every full-stack. NET developer must know. In this part, we're going to expand our social networking application and implement a few advanced use cases like a notification system similar to what you see on facebook. Some of the major topics that we'll cover include building modern user-interfaces with bootstrap, building back-end APIs and object-oriented programming. By the end of this part, you're going to go from a junior level developer to an intermediate level developer and get prepared for the next part where we explore clean architecture and automated testing. Before beginning this course ideally you should have watched the first part because there I have covered a lot of concepts and techniques. So if you're new to this series, you may wonder why I have done things in a certain way or you may think I'm coding too fast. If that's the case, then you really need to go back and watch the first part. Also, you should be familiar with ASP. NET, MVC 5, and Entity Framework 6. I hope you will join me on this journey to learn full-stack development with: Become a Full-stack. NET Developer course at Pluralsight.
Basic CRUD: Implementing the Read Alright, welcome to Become a Full-Stack. NET Developer part two. my name is Mosh Hamedani and I'm going to be your instructor in this course. In the last part, we explored the fundamentals of full-stack development and implemented the core use cases of our social network and web application called Gighub. In this part, we're going to focus on object-oriented design, building API's, and more useful bootstrap components that make your applications look modern and sophisticated. As part of this iteration, you're going to implement a notification system similar to what you see on Facebook. So when an artist updates or cancels a gig, we send a notification to all users going to that gig. When a user logs in, they will see all these new notifications in the navigation bar. Now, before you get started, ideally, you should have watched the first part because there, I covered a lot of concepts and techniques. So if you're new to this series, you may wonder why I have done things in a certain way or you may think I'm coding too fast. If that's the case, you really need to go back and watch the series from the beginning. This part is packed with advanced concepts and techniques and I believe, if you watch all the videos and do the exercises, you're going to go from a junior level developer to an intermediate level developer. So next, let's plan the second iteration.
Basic CRUD: Implementing the Update Okay, in this module, we're going to refactor our existing form for adding a gig, and reuse it for updating an existing gig. This is going to be fairly straightforward, but there are a few techniques I want you to learn, like replacing magic strings with expressions, which helps you write more reliable code. So, let's get started.
Basic CRUD: Implementing the Delete In this module, we're going to finish up the CRUD operation around Gigs by implementing the delete operation, but the delete operation I'm going to show you is what we call logical delete. So, we don't physically delete records from the database. We flag them as deleted. You're also going to learn how to display a Bootstrap confirmation dial up box when the user tries to delete a Gig. So let's get started. (upbeat music)
Avoiding Pitfalls in Domain Models One of the challenges of software development is the constant changes in the requirements, and I thought to include this as part of this course. So in our original requirements document we had use cases like edit and update a gig, and we have fully implemented them. But let's imagine we talk to our imaginary client and they told us when a gig is updated or cancelled, we need to notify those users who are going to that gig. This was not in the original requirements document. So from this module throughout the rest of the course, we'll be working on this new feature. Now when implementing a new feature, you should always start with a domain model. So in this module, I'm going to show you a few different designs for the domain of notifications and explain the pros and cons of each design. So let's get started. (upbeat music)
Refactoring Towards an Object-oriented Design One of the common issues I've seen in many ASP. NET projects is what we call anaemic domain model. That's a domain model with no behavior, no methods, no logic. So domain classes are a bunch of property bags, getters and setters. Now as your application grows, the logic around the domain model will end up somewhere else, mostly in controllers or services. And guess what? This makes your controllers or services FAT, unmaintainable, and hard to unit test. So in this module we'll refactor one of our FAT controllers by extracting the domain logic and pushing it into our domain model which will result in a behavior-rich domain model. You will see how this will result in better separation of concerns and improved maintainability and testability. So let's get started.
Mapping Domain Objects to DTOs Okay, in this module, we're going to build an API, which will be called to get the notifications for the currently logged-in user. Now, as you build APIs, you'll tend to use data transfer objects, or DTOs, more often. So, in this module, we're going to revisit DTOs in more detail. I'm going to show you a couple of different ways to map domain objects to DTOs. So, let's get started.
Working with Bootstrap Icons, Badges, and Popovers All right, so in the last module, we built the API to get the notifications for the currently logged-in user. In this module, we'll be focusing purely on the user interface. So, more specifically, we're going to add this Bootstrap icon on the navigation bar, and when we click it, we can see this popover displaying the notifications. As part of this module, you will also learn some additional techniques, like animating content with CSS and rendering views on the client, which is pretty common in modern web applications. So, let's get started.
Handling Bootstrap Events Okay, our notification popover is almost ready. There is just something missing. When we click this notification popover, we want to hide the number of new notifications. To achieve this, we need to handle events raised from BootStrap components. And that's the topic for this module. Let's get started.
Implementing Searching And we got to the last module in this course. In this module, we're going to implement searching for gigs and finish the second iteration, so let's get started.