3.75 (2 reviews)
☑ RestAPI implementation with best practices with idempotent requests and relevant http methods
☑ Domain Driven Design elements with encapsulating all domain logic inside higher level while being flexible in low level implementations inside infrastructure layer.
☑ Using Doctrine as ORM without coupling tightly.
☑ PHP8 and latest language features
☑ Symfony 5 and core components
This course is going to try to create a base for a scalable backend with using Symfony Framework version 5. We will separate the app to 3 main parts Application, Domain and Infrastructure. And going to try not to stay tightly coupled to the framework itself but still going to use the all features Symfony is providing us.
Application layer will be a transition between the outside world to our Domain and going to isolate everything domain related inside our DDD.
Also will be taking care of authentication with JWT and going to use Symfony Security bundle to maintain the user access definitions to resources.
Will be writing Unit tests and use a framework for mocking/stubbing the test doubles.
In Infrastructure layer we are going to use Doctrine as ORM and try to not to stay tightly coupled to the library but stay as flexible as possible so we can use the same domain logic easily whenever we want with some other library or even with plain SQL queries.
Since we are going to implement a rest api, we are also going to use an api provider to get the data for our game. To access the api provider we will implement some commands with using Symfony Command component.
Who am I and why you should take this course
Essential tools should be installed before starting to the course
Project details and API Provider
Why do we need to use an ORM and Doctrine setup
Docker setup for local development
Preparing development environment
Domain Driven Architecture and Folder Structure
Doctrine schema definitions
Domain Layer and Doctrine ORM
Running Doctrine schema update and creating some fixtures
More Abstraction on DDD
Security and JWT
Setup for JWT
Changing the namespace and installing logger
Getting the token and authenticating first user
Application and Infrastructure Layer
Fetch Leagues from Rapid API
More into AWS S3
Fetch Teams from Rapid API
Fetch Games Command
Fetch Scores Command
More Domain Logic
Complete the game
Give points to the player
Make a guess
Unit Testing with PHPUnit and Prophecy
Unit tests for guess handler
Prophecy and using test dammies/stubs/mocks
Deployment and version control
Github setup and CD/CI with Github actions
AWS Code Deploy and Github actions scenario
PHP 8 Constructor Property Promotion and Code Coverage
Closing and thanks for watching
This course gives a good example on how to apply Domain-Driven Design in PHP. However, if you do not have any theoretical knowledge about PHP, AWS, Symfony or DDD the course might be a little to hard. Some technical details were not properly explained, e.g. how to setup an AWS account or how to connect to the RapidAPI service. While the final result is very beautiful code, it takes a few videos to fully grasp the concept. It would have been helpful to have the full final code repository available. Since I was typing along and repeating all the steps, there sometimes were errors that took unnecessarily long to fix. Nevertheless, I enjoyed this course very much and think that this is a good first course by this instructor.