Implementation of DDD key concepts for Yii2.
Yii2 Domain is a Domain Driven Design patterns implementation for Yii2.
Includes realization of a following patterns:
- Specification (very rough implementation through ActiveQuery)
PHP >= 7.1 is required.
Run the following command to add Yii2 Domain to your project's
composer.json. See Packagist for specific versions.
composer require php-kitchen/yii2-domain
Or you can copy this library from:
For additional information and guides go to the project documentation
Goal of this library is to introduce Domain Driven Design(DDD) principles to Yii2 projects and to fix ActiveRecord problem of domain layer in applications with medium and large domain area.
Each model represented as a standalone directory that contains repository, entity, record and query classes. All of these classes represent a domain model.
user/ contains all of the classes that represents domain model UserRepository model repository UserEntity model entity(represents domain entity - not the DB table that containd entity information) UserRecord DB record that contains entity information ProfileRecord DB record with additional information thta also a part of the UserEntity. UserQuery query class of model e.g. - specification of the entity
Simple search and store:
$repository = new UserRepository(); $entity = $repository->findOneWithPk(1); // do some manipulations with entity $repository->validateAndSave($entity);
Complex criteria search and deleting:
$repository = new UserRepository(); $entity = $repository->find() ->active() ->withoutEmail() ->one(); // do some manipulations with entity $repository->delete($entity);
this library is designed to solve ActiveRecord problem of Yii 2. Don't use this library if you are starting a new project and looking for a solution that would allow you to build a decent architecture - you need a good framework that would allow you do build high-quality solution and Yii 2 is not a framework that would allow you to build high quality architecture and implement rich domain layer.
"Yii2Domain" library is a crutch designed to solve issues of domain layer caused by ActiveRecord in existing projects. There are few decent solutions to build domain layer in a new project:
- Spot ORM
- Symfony + Doctrine (preferable solution)
- Eloquent ORM (if you like Laravel and you are not working with enterprise applications)
If you want to ask any questions, suggest improvements or just to talk with community and developers, join our server at Discord