mj-zana / contracts
Framework-wide abstractions shared between Zana packages
v1.0.0
2026-08-09 10:42 UTC
Requires
- php: ^8.1
- psr/container: ^2.0
- zana/ddd: ^1.0
Requires (Dev)
- phpunit/phpunit: ^10.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Framework-wide abstractions shared between Zana packages.
Purpose
mj-zana/contracts is the public API surface of the framework. It contains the
interfaces, enums, and lightweight immutable value types that appear in the
signatures of public contracts. Packages depend on this common, dependency-free
foundation rather than on each other's concrete classes.
mj-zana/contracts ← public API surface (interfaces, enums, value types)
▲ ▲
│ │
http/routing middleware/container/...
Content
| Namespace | Contracts |
|---|---|
Zana\Contracts\Http |
RequestInterface, ResponseInterface, KernelInterface, MiddlewareInterface |
Zana\Contracts\Routing |
RouterInterface, RouteInterface |
Zana\Contracts\Pipeline |
PipelineInterface, MiddlewareInterface |
Zana\Contracts\Container |
ContainerInterface, ServiceProviderInterface, ServiceScopeInterface, ScopeMetadataInterface, ScopeType, ServiceLifetime, DisposableInterface |
Zana\Contracts\Configuration |
ConfigurationInterface |
Zana\Contracts\Events |
EventDispatcherInterface |
Rules
- Public API surface — anytime a type appears in the signature of a public
contract (interface, enum, or value object), it belongs in
mj-zana/contracts. Implementations stay in their respective packages. - Representation interfaces are complete — if a concrete type represents a
framework object that may cross package boundaries (
RequestInterface,ResponseInterface,RouteInterface,ScopeMetadataInterface, ...), its interface fully describes its public behavior. Consumers never need to cast back to a concrete class. - Capability interfaces are minimal — capability interfaces expose only the
behavior required to perform the capability (
DisposableInterface,CacheInterface,LoggerInterface, ...). They stay as small as possible. - Enums in contracts — any enum appearing in a public contract
(
ScopeType,RouteMethod,CacheStrategy, ...) belongs inmj-zana/contracts. - Only promote what's shared — if an interface has one implementation and nobody outside its package needs it, keep it in that package.
- Exceptions are implementation details — they stay in their packages unless they are part of the public API consumed across packages.
Install
composer require mj-zana/contracts