All Projects → dykyi-roman → crossword

dykyi-roman / crossword

Licence: MIT license
The game is implemented as an example of scalable and high load architecture combined with modern software development practices

Programming Languages

PHP
23972 projects - #3 most used programming language
Twig
543 projects
HTML
75241 projects

Projects that are alternatives of or similar to crossword

Php Ddd Example
🐘🎯 Hexagonal Architecture + DDD + CQRS in PHP using Symfony 5
Stars: ✭ 1,960 (+3400%)
Mutual labels:  ddd, php8
Contexture
Wizard for the Bounded-Context-Canvas
Stars: ✭ 92 (+64.29%)
Mutual labels:  ddd, bounded-contexts
crypto
Aplus Framework Crypto Library
Stars: ✭ 20 (-64.29%)
Mutual labels:  php8
springboot-framework
springboot领域驱动开发
Stars: ✭ 84 (+50%)
Mutual labels:  ddd
repository
[PHP 7] Implementation and definition of a base Repository in Domain land.
Stars: ✭ 26 (-53.57%)
Mutual labels:  ddd
http-range
A PHP library for parsing and handling HTTP range requests.
Stars: ✭ 30 (-46.43%)
Mutual labels:  php8
business
Based on the Domain-Driven-Design approach, the business framework will help you structure and implement your business code cleanly and efficiently.
Stars: ✭ 23 (-58.93%)
Mutual labels:  ddd
log
Aplus Framework Log Library
Stars: ✭ 14 (-75%)
Mutual labels:  php8
silex-ddd-skeleton
A simple skeleton of silex application using ddd arquitecture
Stars: ✭ 19 (-66.07%)
Mutual labels:  ddd
CleanArchitecture
Clean Architecture Solution for .NET 5
Stars: ✭ 18 (-67.86%)
Mutual labels:  ddd
clean architecture typescript example
This repository provides an implementation (or at least an attempt) of Uncle Bob's Clean Architecture with Typescript.
Stars: ✭ 78 (+39.29%)
Mutual labels:  ddd
clean-architecture
Package for isolate your domain code from framework dependency using DDD concepts.
Stars: ✭ 93 (+66.07%)
Mutual labels:  ddd
adr
Architecture Decision Record (ADR)
Stars: ✭ 21 (-62.5%)
Mutual labels:  adr
repair
ระบบบันทึกข้อมูลงานซ่อม
Stars: ✭ 24 (-57.14%)
Mutual labels:  php8
kanban core extension
DDD on Rails Example
Stars: ✭ 29 (-48.21%)
Mutual labels:  ddd
cache
Aplus Framework Cache Library
Stars: ✭ 18 (-67.86%)
Mutual labels:  php8
microservice workshop
Microservices Architecture Workshop focuses on helping the developers / architects to understand the key Architecture paradigms with hands on section. The course helps the developers from Monolithic App mindset to a Microservices based App development. It also helps the developers with hands on development experience with key Microservices infra…
Stars: ✭ 69 (+23.21%)
Mutual labels:  ddd
dnmp
docker-compose部署LNMP环境 Nginx/Openresty、MySQL(5.7、8.0、8.1)、PHP7.4(8.0、5.6)、Redis5.0、PHPMyAdmin、Xdebug、RabbitMQ、Nacos
Stars: ✭ 138 (+146.43%)
Mutual labels:  php8
resiliency
A modern PHP library that allows you to make resilient calls to external services 🔁
Stars: ✭ 79 (+41.07%)
Mutual labels:  php8
ITL
Sample Web API implementation with .NET Core and DDD using Clean Architecture.
Stars: ✭ 29 (-48.21%)
Mutual labels:  ddd

Crossword game

Build Status Scrutinizer Code Quality Code Intelligence Status Code Coverage License Minimum PHP Version

The game is implemented as an example of scalable and high load architecture combined with modern software development practices

Examples

image

Project structure

Packaging approach Branch HEAD
By features feature/package-by-feature master
By layers feature/package-by-layer

Architecture

RabbitMQ - need for handling commands and events asynchronous via the Symfony Messenger component.

Elasticsearch - used as storage for dictionary with 10,000 english and 10,000 russian words from the box.

Redis - used as a cache for generated crosswords.

SQLite - used as the main storage for player data and his game history.

image

Microservices

To simplify the development and sharing of code, the Monorepository code storage approach was chosen. Each module of the system is independents, and they can be separated like an independent microservice and communicate by API.

Port and Adapters

To integrate existing, or a new modules applied solutions like the Port and Adapters pattern.

Ports are represented by Interfaces - {modue}\Domain\Port

These implementations will be the adapter - {modue}\Infrastructure\Adapter:

  • ApiAdapter - used to API communicate with another module
  • DirectAdapter - used to direct communicate with another module
  • InMemoryAdapter - used to mock module in teh tests

Layered

To make the code organised each module uses Layered Architecture and each functional area is divided on four layers:

  • Application
  • Doman
  • Infrastructure
  • UI

Switch to check it feature/package-by-layer

👍 Checked by Deptrac

ADR

Action Domain Responder organizes a single user interface interaction between an HTTP client and a HTTP server-side application into three distinct roles.

DDD

Domain-driven design is not a technology or a methodology. It is a way of thinking and a set of priorities, aimed at accelerating software projects that have to deal with complicated domains.

On a macro level using DDD concepts like Ubiquitous Language and Bounded Contexts can solve complex perspectives on data in to smaller models and clear data ownership. Follow practices splitting the source code based on bounded contexts we define a next context:

For reducing duplication of code we use a SharedKernel, it helps share a common code between context.

Docker

The docker-compose up command aggregates and run each container.

docker network create game

make start

Open in browser

https://app.test:1001/game/play

image

Swagger

Swagger help to describe the structure of APIs for better understand how is it works.

👍 URL: /swagger

Postman

Сollections with queries can be found: cd /postman

👍 Checked by Newman

CI

Stack

  • PHP 8.0
  • Symfony 5.2
  • Elasticsearch
  • RabbitMQ
  • Redis
  • SQLite

Clean code support packages

  • phpunit
  • phpcs
  • psalm
  • rector
  • phpcs-calisthenics-rules
  • newman
  • deptrac

Resources

Author

Dykyi Roman, e-mail: [email protected]

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].