{"id":229029,"date":"2022-11-10T17:56:00","date_gmt":"2022-11-10T14:56:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229029"},"modified":"2022-11-09T05:15:06","modified_gmt":"2022-11-09T02:15:06","slug":"vad-aer-foer-mycket-foer-att-skicka-data-via-beroendeinjektion","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/vad-aer-foer-mycket-foer-att-skicka-data-via-beroendeinjektion\/","title":{"rendered":"Vad \u00e4r f\u00f6r mycket f\u00f6r att skicka data via beroendeinjektion?"},"content":{"rendered":"\n<p>\u00c4mnet med <a href=\"https:\/\/en.wikipedia.org\/wiki\/Dependency_injection\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">beroendeinjektion<\/a> \u00e4r ett \u00e4mne som har funnits ett tag i objektorienterade programmeringskretsar. Ibland ser vi det i WordPress; ibland g\u00f6r vi inte det.<\/p>\n<p>Jag \u00e4r ett fan av det, men \u00e4rligt talat \u00e4r jag inte alltid s\u00e4ker p\u00e5 hur mycket information som ska injiceras i en klass. Jag menar, l\u00e5t oss s\u00e4ga att vi f\u00e5r tv\u00e5 klasser, och en inneh\u00e5ller information som den andra beh\u00f6ver.<\/p>\n<ul>\n<li>Injicerar vi ingen klass i en annan klass?<\/li>\n<li>Injicerar vi bara en bit information (vare sig det \u00e4r en str\u00e4ng, heltal, datastruktur eller vad som helst) i den andra klassen?<\/li>\n<\/ul>\n<p>Jag tror inte att det finns en h\u00e5rd och snabb regel f\u00f6r detta, men det \u00e4r nog s\u00e4kert att s\u00e4ga att det \u00e4r b\u00e4ttre att injicera just den data du beh\u00f6ver. Men d\u00e5 v\u00e4cker detta en fr\u00e5ga om hur man f\u00f6rbereder data f\u00f6r att injicera i en given klass?<\/p>\n<ul>\n<li>Skapar du en metod i en klass och \u00f6verf\u00f6r den till en annan?<\/li>\n<li>Skickar du en del <strong>privat<\/strong> eller <strong>skyddad<\/strong> information till den?<\/li>\n<\/ul>\n<p>\u00c5terigen, jag tror att det beror p\u00e5 om n\u00e5got m\u00e5ste h\u00e4nda med informationen innan den skickas till en klass.<\/p>\n<p>Hur som helst, jag skulle kunna g\u00e5 fram och tillbaka p\u00e5 detta under resten av inl\u00e4gget och aldrig komma till en slutsats s\u00e5 varf\u00f6r inte arbeta igenom lite k\u00e4llkod tills det finns n\u00e5got rimligt.<\/p>\n<p>L\u00e5t oss b\u00f6rja med att s\u00e4ga att vi har en huvudpluginklassfil och den h\u00e4r klassen ansvarar f\u00f6r att uppr\u00e4tth\u00e5lla information som:<\/p>\n<ul>\n<li>v\u00e4gen till plugin,<\/li>\n<li>URL:en till plugin-programmet,<\/li>\n<li>om plugin-programmet \u00e4r laddat eller inte,<\/li>\n<li>sk\u00e4rmen som f\u00f6r n\u00e4rvarande visas,<\/li>\n<li>och de klasser som den beh\u00f6ver f\u00f6r att s\u00e4nda (t\u00e4nk <a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pub\/sub<\/a>) viss information.<\/li>\n<\/ul>\n<p>Kanske ett skelett eller en stubb fr\u00e5n klassen kan se <a href=\"https:\/\/gist.github.com\/tommcfarlin\/993fea0174dcd5abcea45ce3f1598813#file-00-generic-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ut s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\nclass Plugin\n{\n    protected $plugin_path;\n\n    protected $plugin_url;\n\n    private $loaded;\n\n    public function __construct($file)\n    {\n        $this-&gt;loaded         = false;\n        $this-&gt;plugin_path    = plugin_dir_path($file);\n        $this-&gt;plugin_url     = plugin_dir_url($file);\n    }\n\n    public function isLoaded()\n    {\n        return $this-&gt;loaded;\n    }\n\n    public function load()\n    {\n      \/\/ ...\n    }\n\n    private function isCurrentAdminStatus()\n    {\n      \/\/ ...\n    }\n\n    public function getSubscribers()\n    {\n        return [\n          new OtherPluginClass(...)\n        ];\n    }\n}\n<\/code><\/pre>\n<p>L\u00e5t oss sedan b\u00f6rja riktigt brett. S\u00e4g att vi vill ta hela klassen och skicka den till en av klasserna som den s\u00e4nder information till.<\/p>\n<p>Om s\u00e5 var fallet kan det se <a href=\"https:\/\/gist.github.com\/tommcfarlin\/993fea0174dcd5abcea45ce3f1598813#file-01-generic-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ut s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\nclass Plugin\n{\n    protected $plugin_path;\n\n    protected $plugin_url;\n\n    private $loaded;\n\n    public function __construct($file)\n    {\n        $this-&gt;loaded         = false;\n        $this-&gt;plugin_path    = plugin_dir_path($file);\n        $this-&gt;plugin_url     = plugin_dir_url($file);\n    }\n\n    public function isLoaded()\n    {\n        return $this-&gt;loaded;\n    }\n\n    public function load()\n    {\n      \/\/ ...\n    }\n\n    private function isCurrentAdminStatus()\n    {\n      \/\/ ...\n    }\n\n    public function getSubscribers()\n    {\n        return [\n          new OtherPluginClass($this)\n        ];\n    }\n}\n<\/code><\/pre>\n<p>Men en av utmaningarna med detta \u00e4r att det skickar mycket mer information \u00e4n n\u00f6dv\u00e4ndigt till en annan klass. Dessutom skickar den information som inkluderar information om klassen till vilken informationen skickas.<\/p>\n<p>S\u00e5 l\u00e5t oss s\u00e4ga att vi vill ta ett steg tillbaka och bara skicka en av de privata uppgifterna. Det h\u00e4r \u00e4r enkelt, eller hur? Det slutar med att det ser ut ungef\u00e4r <a href=\"https:\/\/gist.github.com\/tommcfarlin\/993fea0174dcd5abcea45ce3f1598813#file-02-generic-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\nclass Plugin\n{\n    protected $plugin_path;\n\n    protected $plugin_url;\n\n    private $loaded;\n\n    public function __construct($file)\n    {\n        $this-&gt;loaded         = false;\n        $this-&gt;plugin_path    = plugin_dir_path($file);\n        $this-&gt;plugin_url     = plugin_dir_url($file);\n    }\n\n    public function isLoaded()\n    {\n        return $this-&gt;loaded;\n    }\n\n    public function load()\n    {\n      \/\/ ...\n    }\n\n    private function isCurrentAdminStatus()\n    {\n      \/\/ ...\n    }\n\n    public function getSubscribers()\n    {\n        return [\n          new OtherPluginClass($this-&gt;plugin_path)\n        ];\n    }\n}\n<\/code><\/pre>\n<p>Och detta kan vara helt tillr\u00e4ckligt f\u00f6r vissa fall. Men, som tidigare n\u00e4mnts, finns det ocks\u00e5 tillf\u00e4llen d\u00e5 vi vill ta informationen, bearbeta den och sedan skicka den till en klass.<\/p>\n<p>F\u00f6r att g\u00f6ra detta skulle vi bara definiera en metod, l\u00e5ta den behandla information och sedan skicka returv\u00e4rdet till klassen som beh\u00f6ver <a href=\"https:\/\/gist.github.com\/tommcfarlin\/993fea0174dcd5abcea45ce3f1598813#file-03-generic-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">informationen<\/a> :<\/p>\n<pre><code>&lt;?php\n\nclass Plugin\n{\n    protected $plugin_path;\n\n    protected $plugin_url;\n\n    private $loaded;\n\n    public function __construct($file)\n    {\n        $this-&gt;loaded         = false;\n        $this-&gt;plugin_path    = plugin_dir_path($file);\n        $this-&gt;plugin_url     = plugin_dir_url($file);\n    }\n\n    public function isLoaded()\n    {\n        return $this-&gt;loaded;\n    }\n\n    public function load()\n    {\n      \/\/ ...\n    }\n\n    private function isCurrentAdminStatus()\n    {\n      \/\/ ...\n    }\n\n    public function getSubscribers()\n    {\n        return [\n          new OtherPluginClass($this-&gt;isCurrentAdminStatus())\n        ];\n    }\n}\n<\/code><\/pre>\n<p>Id\u00e9n bakom den h\u00e4r diskussionen kom upp n\u00e4r man arbetade med en kodgranskning f\u00f6r ett nyligen genomf\u00f6rt projekt och pratade igenom de olika alternativen d\u00e4r information kunde skickas till en klass.<\/p>\n<p>S\u00e5 jag b\u00f6rjade brett (trots vad som \u00e4r n\u00f6dv\u00e4ndigt \u00e4ven med tanke p\u00e5 tankeprocessen ovan) och minskade det sedan till det som bara \u00e4r n\u00f6dv\u00e4ndigt.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I objektorienterad programmering \u00e4r beroendeinjektion bra och allt men hur mycket anses vara f\u00f6r mycket n\u00e4r data \u00f6verf\u00f6rs via beroendeinjektion?<\/p>\n","protected":false},"author":1,"featured_media":166138,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[1022,724],"tags":[1173],"class_list":["post-229029","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-anvandbara-webbplatser","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229029","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=229029"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229029\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/166138"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229029"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229029"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229029"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}