Clean Architecture, Onion, Layered, Frameworkless, Hexagonal... Lot of names for a similar concept: (say which concept)
Everithing for reach (List targets)
Decoupling from framework (say why is good)
Testability (nothing to say about it)
<?php
$me = [
'name' => 'Damiano',
'surname' => 'Petrungaro',
'job' => 'Software Engineer',
'company' => [
'name' => 'HelloFresh',
'url' => 'https://hellofresh.com/'
],
'maintainers' => ['conventional commit', 'laravel italia'],
'github' => 'https://github.com/damianopetrungaro',
'twitter' => '@damiano_dev',
'buzzwords' => [
'food', 'php', 'golang', 'perfectionist', 'DDD', 'never stop learning'
]
];
<?php
$me = [
"name" => "Christian",
"surname" => "Nastasi",
"company" => null,
"job" => [
"Software Craftman",
"Technical Coach",
"Agile Coach"
],
"github" => "https://github.com/cnastasi",
"twitter" => "@c_nastasi",
"buzzwords" => [
"quality is not an optional",
"php",
"agile",
"ddd", "bdd", "tdd",
"framework-less",
"nerd"
]
];
return \spl_autoload_register([$this, 'loadClass'], true, $prepend);
...
"scripts": {
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
]
},
...
app
bootstrap
config
database
public
resources
routes
storage
tests
vendor
Broadcasting
Console
Events
Exceptions
Http
Jobs
Listeners
Notifications
Policies
Providers
Rules
Fork and clone the repo
Make it run
Set up Travis & Coverall
Registration number
(ACC-{10 random numbers}-DZZ)
First name
Last name
Birth date
Major
Registration date
Publish an article
Review an article
Reject an article giving feedback
Receive an email to review an article
See the list of articles to review
Registration number (REV-{10 random numbers}-SYY)
First name
Last name
Birth date
Major
Registration date
Can be listed by users
Can be read
Title
Body
Creation date
Last update date
Publish date
Author
Reviewer
Article created
Article published
Article rejected
Choose your group name
15 minutes
Groups composed by 5 people
___________________________________________________________
Choose a person from the group to explain how would you create the project
It's an immutable object representing a value in a domain.
It's comparable to other value objects by its own values.
It's a mutable object with an identity, it can be represented in different ways.
It's comparable to other entities by its ID.
It's an abstraction layer to provide access to all the entities and the value objects related to an aggregate.
It's an object to use to manipulate entities and value objects when the logic doesn't fit or distort their integrity.
Not to be confused with the application or infrastructure services.
It's an immutable object used to represent something important that occurred in the domain.
As a User I want to list all articles
Let's focus on this story:
Article
Entity
Value Objects
ListArticle
Use Case
Article
Repository
ListArticle Controller
Mob Programming
Let's focus on this story:
As an Academic I want to write an Article
Article
Entity
Value Objects
WriteArticle
Use Case
Academic
Repository
WriteArticle Controller
Academic
Entity
Value Objects
Mob Programming
Let's focus on this story:
As an User I want to read an Article
Let's discuss together the architecture
Implement it by yourself.
Discuss with your team.
Create a Product Backlog and sort the stories
Put everything in a Kanban board
(TODO - WORK IN PROGRESS - DONE)
Starting from the head of the backlog, take a story and implement it by yourself
Then create a Pull Request.
Every PR should be reviewed at least by 2 person of your team.
christian.nastasi@gmail.com
damianopetrungaro@gmail.com