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
660
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
260
Symfony Notifier Demystified
jschaedl
3
210
Symfony Notifier Demystified
jschaedl
4
450
Symfony Notifier Component
jschaedl
0
430
What's new in Symfony 4.4/5.0
jschaedl
0
350
What's new in Symfony 4.3
jschaedl
0
410
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
320
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
13
7.8k
AI時代のソフトウェア開発でも「人が仕様を書く」から始めよう-医療IT現場での実践とこれから
koukimiura
0
140
PJのドキュメントを全部Git管理にしたら、一番喜んだのはAIだった
nanaism
0
240
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
250
エラーログのマスキングの仕組みづくりに役立ったASTの話
kumoichi
0
120
atmaCup #23でAIコーディングを活用した話
ml_bear
4
750
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
170
CSC307 Lecture 15
javiergs
PRO
0
230
AI主導でFastAPIのWebサービスを作るときに 人間が構造化すべき境界線
okajun35
0
630
あなたはユーザーではない #PdENight
kajitack
4
340
15年目のiOSアプリを1から作り直す技術
teakun
1
610
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
220
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
Paper Plane (Part 1)
katiecoart
PRO
0
5.3k
RailsConf 2023
tenderlove
30
1.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
210
The Mindset for Success: Future Career Progression
greggifford
PRO
0
270
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
210
HDC tutorial
michielstock
1
510
Building the Perfect Custom Keyboard
takai
2
710
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
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