{"id":229233,"date":"2022-11-10T17:29:00","date_gmt":"2022-11-10T14:29:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229233"},"modified":"2022-11-09T06:04:57","modified_gmt":"2022-11-09T03:04:57","slug":"mida-on-liiga-palju-soltuvuse-suestimise-kaudu-andmete-edastamiseks","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/mida-on-liiga-palju-soltuvuse-suestimise-kaudu-andmete-edastamiseks\/","title":{"rendered":"Mida on liiga palju s\u00f5ltuvuse s\u00fcstimise kaudu andmete edastamiseks?"},"content":{"rendered":"\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Dependency_injection\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">S\u00f5ltuvuss\u00fcsti<\/a> teema on objektorienteeritud programmeerimise ringkondades olnud juba m\u00f5nda aega. M\u00f5nikord n\u00e4eme seda WordPressis; m\u00f5nikord me ei tee seda.<\/p>\n<p>Olen selle f\u00e4nn, kuid ausalt \u00f6eldes pole ma alati kindel, kui palju teavet klassi s\u00fcstida. \u00dctleme nii, et meile antakse kaks klassi ja \u00fches on teave, mida teine \u200b\u200bvajab.<\/p>\n<ul>\n<li>Kas me ei sisesta \u00fchtegi klassi teise klassi?<\/li>\n<li>Kas sisestame teise klassi ainult osa informatsioonist (olgu see siis string, t\u00e4isarv, andmestruktuur v\u00f5i mis iganes)?<\/li>\n<\/ul>\n<p>Ma arvan, et selleks ei ole ranget reeglit, kuid ilmselt v\u00f5ib kindlalt v\u00e4ita, et parem on sisestada just need andmed, mida vajate. Kuid siis tekib k\u00fcsimus, kuidas valmistada andmeid ette antud klassi sisestamiseks?<\/p>\n<ul>\n<li>Kas loote meetodi \u00fches klassis ja edastate selle teise?<\/li>\n<li>Kas edastate sellesse <strong>privaatset<\/strong> v\u00f5i <strong>kaitstud<\/strong> teavet?<\/li>\n<\/ul>\n<p>J\u00e4llegi, ma arvan, et see s\u00f5ltub sellest, kas teabega peab midagi juhtuma enne, kui see klassi antakse.<\/p>\n<p>Igatahes v\u00f5iksin selle postituse l\u00f5puni edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi edasi-tagasi k\u00e4ia kogu \u00fclej\u00e4\u00e4nud postituse jooksul ega j\u00f5ua kunagi j\u00e4reldusele, nii et miks mitte l\u00e4bi t\u00f6\u00f6tada l\u00e4htekoodi enne, kui on midagi m\u00f5istlikku.<\/p>\n<p>Alustame sellega, et meil on peamine pluginaklassi fail ja see klass vastutab sellise teabe s\u00e4ilitamise eest nagu:<\/p>\n<ul>\n<li>tee pistikprogrammini,<\/li>\n<li>pistikprogrammi URL,<\/li>\n<li>kas pistikprogramm on laaditud v\u00f5i mitte,<\/li>\n<li>ekraan, mida praegu vaadatakse,<\/li>\n<li>ja klassid, kellele ta peab teatud teavet edastama (m\u00f5tle <a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pub\/sub<\/a> ).<\/li>\n<\/ul>\n<p>V\u00f5ib-olla v\u00f5ib klassi luustik v\u00f5i t\u00fcnn v\u00e4lja n\u00e4ha <a href=\"https:\/\/gist.github.com\/tommcfarlin\/993fea0174dcd5abcea45ce3f1598813#file-00-generic-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline<\/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>Alustame siis v\u00e4ga laialt. \u00dctleme, et tahame v\u00f5tta kogu klassi ja suunata selle \u00fchte klassi, kellele see teavet edastab.<\/p>\n<p>Kui see nii oleks, v\u00f5ib see v\u00e4lja n\u00e4ha <a href=\"https:\/\/gist.github.com\/tommcfarlin\/993fea0174dcd5abcea45ce3f1598813#file-01-generic-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">j\u00e4rgmine<\/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>Kuid \u00fcks selle v\u00e4ljakutsetest on see, et see edastab teise klassi palju rohkem teavet kui vaja. Lisaks edastab see teavet, mis sisaldab teavet selle klassi kohta, kuhu see teave edastab.<\/p>\n<p>Oletame, et tahame astuda sammu tagasi ja edastada lihtsalt \u00fche privaatse teabe. See on lihtne, eks? See n\u00e4eb l\u00f5puks v\u00e4lja umbes <a href=\"https:\/\/gist.github.com\/tommcfarlin\/993fea0174dcd5abcea45ce3f1598813#file-02-generic-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline<\/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>Ja see v\u00f5ib m\u00f5nel juhul olla t\u00e4iesti piisav. Kuid nagu varem mainitud, on ka aegu, mil tahame teavet v\u00f5tta, seda t\u00f6\u00f6delda ja seej\u00e4rel klassi edastada.<\/p>\n<p>Selleks m\u00e4\u00e4ratleme lihtsalt meetodi, laseme sellel teavet t\u00f6\u00f6delda, seej\u00e4rel edastame tagastatava v\u00e4\u00e4rtuse klassi, mis <a href=\"https:\/\/gist.github.com\/tommcfarlin\/993fea0174dcd5abcea45ce3f1598813#file-03-generic-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seda teavet<\/a> vajab :<\/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>Selle arutelu idee tekkis hiljutise projekti koodi\u00fclevaatuse kallal ja r\u00e4\u00e4kides erinevatest v\u00f5imalustest, kuidas teavet klassile edastada.<\/p>\n<p>Nii et alustasin laiap\u00f5hjalisest (hoolimata sellest, mis on vajalik isegi \u00fclaltoodud m\u00f5ttek\u00e4iku arvestades) ja siis kitsendasin selle ainult vajalikuks.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Objektorienteeritud programmeerimises on s\u00f5ltuvuse s\u00fcstimine suurep\u00e4rane ja kui palju peetakse andmete edastamisel s\u00f5ltuvuss\u00fcsti kaudu liiga paljuks?<\/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":[718,1017],"tags":[1165],"class_list":["post-229233","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kasulikud-saidid","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=229233"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229233\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/166138"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=229233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=229233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=229233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}