Seite 6 - Monthly Archives: March 2025
-
Maxim Mironjuk
-
März 25, 2025
Tests, die von der aktuellen Uhrzeit, zufällig generierten UUIDs oder Pseudozufallswerten abhängen, sind flaky: Sie schlagen manchmal fehl, manchmal nicht, und die Ursache ist schwer zu reproduzieren. Clock-Interfaces, UUID-Factories und kontrollierter Zufall lösen dieses Problem grundlegend – ohne den Produktionscode zu komplizieren.
-
Maxim Mironjuk
-
März 25, 2025
Jahrelang mussten Mengenoperationen in JavaScript mühsam mit filter() und has() zusammengebaut werden. Die neuen JavaScript Set Methods lösen dieses Problem mit einer sauberen, lesbaren API – direkt auf dem Set-Objekt, ohne externe Bibliotheken und ohne Workarounds.
-
Maxim Mironjuk
-
März 25, 2025
Warum kann ein Product-Objekt nicht direkt per Constructor injiziert werden — aber ein ProductRepository schon? Die Unterscheidung zwischen Injectable und Non-Injectable Objects ist fundamental für Magento 2 DI. Virtual Types lösen dazu ein häufiges di.xml-Problem elegant.
-
Maxim Mironjuk
-
März 24, 2025
Ein Trait kopiert echte Methodenrümpfe in eine Klasse hinein, ein Interface verspricht nur, dass diese Methoden existieren, ohne eine einzige Zeile Implementierung mitzuliefern. Wer Traits und Interfaces vermischt oder gegeneinander austauscht, verliert genau die Trennschärfe, die objektorientiertes Design erst robust macht: horizontale Wiederverwendung von Verhalten auf der einen Seite, verbindliche Verträge für Polymorphismus und Testbarkeit auf der anderen.
-
Maxim Mironjuk
-
März 24, 2025
Phil Karlton wird das Zitat zugeschrieben, es gebe nur zwei schwere Dinge in der Informatik: Cache-Invalidierung und die Benennung von Dingen. In verteilten Systemen mit mehreren Cache-Layern, CDN, Anwendungs-Cache und Datenbank-Cache, wird dieses Problem noch einmal deutlich komplexer, weil jede Schicht ihre eigene Invalidierungslogik und ihre eigene zeitliche Verzögerung mitbringt. Wer Time-based und Event-based Invalidierung sowie Cache-Tagging gezielt kombiniert, kann das Problem beherrschbar machen, auch wenn es sich nie vollständig auflösen lässt.
-
Maxim Mironjuk
-
März 24, 2025
Flatpickr bringt Kilobytes jQuery-Erbe und eine externe Abhängigkeit mit. Ein eigener Alpine.js-Datepicker entsteht aus weniger als 80 Zeilen reaktivem JavaScript – mit Monatsnavigation, Keyboard-Support, Min/Max-Grenzen und vollständiger ARIA-Semantik, ohne eine einzige externe Abhängigkeit.
-
Maxim Mironjuk
-
März 24, 2025
PHPStan Level max deckt Fehlerklassen auf, die Unit-Tests oft übersehen: falsche Argumenttypen, riskante Null-Zugriffe, unerreichbaren Code. Ein wachsendes Projekt erreicht dieses Level jedoch nicht über Nacht, sondern über Level-Ratcheting, eine gepflegte Baseline-Datei, sauber typisierte Generics und eigene Regeln für projektspezifische Konventionen.
-
Maxim Mironjuk
-
März 24, 2025
Sobald ein GraphQL-Schema von mehreren Teams parallel weiterentwickelt wird, stößt eine einzelne monolithische API an ihre Grenzen. Apollo Federation, GraphQL Mesh und Cosmo lösen dieses Problem auf grundverschiedene Weise: durch Subgraph-Komposition, durch ein Gateway vor beliebigen Bestandssystemen oder durch eine offene Router-Implementierung ohne Vendor-Lock-in.
-
Maxim Mironjuk
-
März 23, 2025
nice und ionice senken nur die Prioritaet von Hintergrundjobs, verhindern aber nicht, dass sie kurzzeitig ganze Kerne belegen. CPU-Pinning geht einen Schritt weiter: Es reserviert bestimmte Kerne exklusiv fuer PHP-FPM-Worker, waehrend Reindexierung und Cron ausschliesslich auf anderen Kernen laufen duerfen.
-
Maxim Mironjuk
-
März 23, 2025
HTTP-Statuscodes und globale Response-Zeiten sagen über GraphQL-APIs wenig aus. Resolver-Latenz, Fehlerklassen, Field-Usage und N+1-Erkennung sind die Metriken, die echte Probleme in Produktion sichtbar machen.
-