<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Der Magento Experte</title>
	<atom:link href="https://www.der-mage-experte.de/tag/objectmanager/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.der-mage-experte.de</link>
	<description>Ihr Magento Experte &#38; Entwickler</description>
	<lastBuildDate>Sat, 17 Oct 2026 20:09:46 +0000</lastBuildDate>
	<language>de-DE</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8.6</generator>
	<item>
		<title>Direkte ObjectManager Nutzung im Code finden</title>
		<link>https://www.der-mage-experte.de/3240/magento2-direkte-objectmanager-nutzung-im-code-finden/</link>
		<comments>https://www.der-mage-experte.de/3240/magento2-direkte-objectmanager-nutzung-im-code-finden/#comments</comments>
		<pubDate>Sat, 17 Oct 2026 20:07:01 +0000</pubDate>
		<dc:creator><![CDATA[Mex]]></dc:creator>
				<category><![CDATA[Magento Lösungen]]></category>
		<category><![CDATA[Magento 2]]></category>
		<category><![CDATA[ObjectManager]]></category>

		<guid isPermaLink="false">https://www.der-mage-experte.de/?p=3240</guid>
		<description><![CDATA[In älteren Extensions oder übernommenem Magento Code findet man immer wieder direkte Zugriffe auf den ObjectManager. Für einen schnellen Code Check lässt sich danach sehr einfach per regulärem Ausdruck suchen. [crayon-6ad3f8b0b2a2f/] Gefunden werden damit beispielsweise Stellen wie: [crayon-6ad3f8b0b2a72/] Der reguläre&#8230;]]></description>
				<content:encoded><![CDATA[<p>In älteren Extensions oder übernommenem Magento Code findet man immer wieder direkte Zugriffe auf den <strong>ObjectManager</strong>. Für einen schnellen Code Check lässt sich danach sehr einfach per regulärem Ausdruck suchen.</p><pre class="crayon-plain-tag">grep -RInP 'ObjectManager\s*::\s*getInstance\s*\(' app/code</pre><p>Gefunden werden damit beispielsweise Stellen wie:</p><pre class="crayon-plain-tag">$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$productRepository = $objectManager-&gt;get(
    \Magento\Catalog\Api\ProductRepositoryInterface::class
);</pre><p>Der reguläre Ausdruck berücksichtigt auch unterschiedliche Leerzeichen rund um <strong>::</strong> und vor der öffnenden Klammer. Mit <strong>-R</strong> wird rekursiv gesucht, <strong>-n</strong> gibt die Zeilennummer aus und <strong>-P</strong> aktiviert die Perl kompatiblen regulären Ausdrücke von grep.</p>
<p>Auch typische anschließende Aufrufe über eine Variable namens <strong>$objectManager</strong> lassen sich suchen:</p><pre class="crayon-plain-tag">grep -RInP '\$objectManager\s*-&gt;\s*(get|create)\s*\(' app/code</pre><p>Direkte ObjectManager Nutzung gilt im eigenen Magento Code in der Regel als <strong>Bad Practice</strong>. Der wichtigste Grund ist, dass die tatsächlichen Abhängigkeiten einer Klasse dadurch versteckt werden. Am Konstruktor ist nicht mehr erkennbar, welche Services die Klasse benötigt, weil diese erst irgendwo innerhalb einer Methode aus dem ObjectManager geholt werden.</p>
<p>Das macht den Code schwerer verständlich und vor allem schwerer testbar. Bei sauberer Dependency Injection kann eine benötigte Abhängigkeit in einem Unit Test einfach durch ein Mock Objekt ersetzt werden. Holt sich die Klasse ihren Service dagegen selbst über den globalen ObjectManager, muss der Test zusätzlich diesen versteckten Zugriff berücksichtigen.</p>
<p>Auch z.B. Änderungen werden unnötig schwieriger. Benötigt eine Klasse fünf Services über den Konstruktor, ist dies sofort sichtbar. Werden dieselben fünf Services über verschiedene Methoden verteilt aus dem ObjectManager geladen, erkennt man diese Abhängigkeiten erst beim Lesen des gesamten Codes.</p>
<p>Sauberer ist deshalb die direkte Übergabe über den Konstruktor:</p><pre class="crayon-plain-tag">use Magento\Catalog\Api\ProductRepositoryInterface;

public function __construct(
    private ProductRepositoryInterface $productRepository
) {
}</pre><p>Magento kann die konkrete Implementierung anschließend selbst über seine Dependency Injection Konfiguration auflösen. Preferences, Proxies, Plugins und andere Mechanismen des Object Managers funktionieren dabei weiterhin, nur die Klasse selbst muss nicht wissen, wie ihre Abhängigkeit erzeugt wird.</p>
<p>Der ObjectManager ist also nicht grundsätzlich etwas Schlechtes, Magento selbst basiert schließlich darauf. Problematisch ist normalerweise der direkte Zugriff aus dem eigenen Anwendungscode, weil damit aus Dependency Injection praktisch ein versteckter Service Locator wird.</p>]]></content:encoded>
			<wfw:commentRss>https://www.der-mage-experte.de/3240/magento2-direkte-objectmanager-nutzung-im-code-finden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
