Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dependency Tracking with Deptrac
Search
Jan Schädlich
October 13, 2020
Programming
1
470
Dependency Tracking with Deptrac
Jan Schädlich
October 13, 2020
Tweet
Share
More Decks by Jan Schädlich
See All by Jan Schädlich
Demystifying Bundles
jschaedl
1
180
Symfony Notifier Demystified
jschaedl
3
130
Symfony Notifier Demystified
jschaedl
4
350
Symfony Notifier Component
jschaedl
0
290
What's new in Symfony 4.4/5.0
jschaedl
0
220
What's new in Symfony 4.3
jschaedl
0
250
Other Decks in Programming
See All in Programming
LPIXEL×CADDi_kaerururu
kaerururu
3
270
TDDと今まで
kanayannet
0
110
ADRを一年運用してみた/our_story_about_adr
hanhan1978
3
1.1k
before_rails_girls_after_rails_girls
maimux2x
0
300
Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
850
上手な探索的テストとその上達方法について
matsu802
1
430
phpunit/php-code-coverageって何をしてるんだ #phperkaigi
o0h
PRO
2
190
Deep Dive into the Symfony Security Component
hhamon
1
180
まっちすいっち戦争 / match vs switch
takuyakatsusa
1
630
「Hono遍歴」と「HonoXでブログ作成」
yasu551
0
170
一休.comレストランのRustバックエンド開発の様子
kymmt90
13
7.9k
とにかくHTTP3をライトニングに話す / Anyway, I'll talk to Lightning about HTTP3.
seike460
PRO
0
110
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
67
38k
Producing Creativity
orderedlist
PRO
335
39k
Agile that works and the tools we love
rasmusluckow
323
20k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
225
51k
The Pragmatic Product Professional
lauravandoore
24
5.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
350
18k
Scaling GitHub
holman
456
140k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Optimizing for Happiness
mojombo
369
69k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
Transcript
Dependency Tracking with Deptrac Jan Schädlich @jschaedl SensioLabs 2020-10-13 |
Symfony User Group Hamburg An Introduction with Examples
Software Architecture
–Ralph Johnson „Architecture is about the important stuff. Whatever that
is.“
Core Admin Customer Driven Driving Hexagonal Architecture Onion Architecture Separation
of Concerns ‣ Separation is achieved by dividing the software into layers ‣ At least one layer for business rules and another for interfaces
None
How to ensure that our code follows the defined architecture?
https://github.com/sensiolabs-de/deptrac Deptrac
Installation
✓ PHAR | https://github.com/sensiolabs-de/deptrac/releases ✓ phive install -g sensiolabs-de/deptrac ✓
composer require --dev sensiolabs-de/deptrac-shim X composer require --dev sensiolabs-de/deptrac
The depfile.yaml
# depfile.yaml paths: - ./src exclude_files: - .*Tests.* - .*Resources.*
- .*DependencyInjection.*
# ... layers: - name: Entity collectors: - type: className
regex: .*\\App\\Entity\\.* ‣ There are also other collector types available.
# ... layers: # ... - name: UseCase collectors: -
type: className regex: .*\\App\\UseCase\\.*
# ... layers: # ... - name: Controller collectors: -
type: className regex: .*\\App\\Controller\\.*
# ... ruleset: Entity: ~ UseCase: - Entity Controller: -
Entity - UseCase The Entity layer must not depend on other layers. The UseCase layer only depends on the Entity layer. The Controller layer can depend on the Entity and the UseCase layer.
Collectors
# directory - name: Controller collectors: - type: directory regex:
./App/Controller/.*
# className - name: Controller collectors: - type: className regex:
.*App\\.*Controller.*
# classNameRegex - name: Controller collectors: - type: classNameRegex regex:
'#.*App\\.*Controller.*#'
# bool - name: Admin collectors: - type: bool must:
- type: className regex: .*\\Admin\\.* must_not: - type: className regex: .*\\AdminBundle\\.*
# method - name: Foo services collectors: - type: method
name: .*foo
# implements - name: Foo collectors: - type: implements name:
'App\SomeInterface'
# extends - name: Foo collectors: - type: extends name:
'App\SomeClass'
# uses - name: Foo collectors: - type: uses name:
'App\SomeTrait'
# inherits - name: Foo collectors: - type: inherits name:
'App\{Interface|Class|Trait}'
Formatters
Console ‣ This is the default formatter.
None
Github Actions ‣ Default formatter in Github Actions environment.
Github Actions
$ deptrac analyze examples/ControllerServiceRepository1.depfile.yml \ -—formatter-graphviz=1 \ --formatter-graphviz-display=1 \ --formatter-graphviz-dump-image=path/to/file.png
\ --formatter-graphviz-dump-dot=path/to/file.dot \ —-formatter-graphviz-dump-html=path/to/file.html Graphviz
$ deptrac analyze examples/ControllerServiceRepository1.depfile.yml \ -—formatter-junit=1 \ —-formatter-junit-dump-xml=./junit-report.xml JUnit
$ deptrac analyze examples/ControllerServiceRepository1.depfile.yml \ -—formatter-xml=1 \ —-formatter-xml-dump-xml=./deptrac-report.xml XML
https://github.com/jschaedl/sfughh-deptrac Demo
More
None
None
# skip_violations skip_violations: App\SomeClass: - App\SomeDependency
None
Thank you! https://speakerdeck.com/jschaedl