{"id":230372,"date":"2022-12-08T17:08:00","date_gmt":"2022-12-08T14:08:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230372"},"modified":"2022-12-07T11:56:29","modified_gmt":"2022-12-07T08:56:29","slug":"eesmaerk-on-jagada-programmid-vaeiksemateks-komponentideks","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/eesmaerk-on-jagada-programmid-vaeiksemateks-komponentideks\/","title":{"rendered":"Eesm\u00e4rk on jagada programmid v\u00e4iksemateks komponentideks"},"content":{"rendered":"\n<p>\u00dcks asi, millest programmeerijad sageli r\u00e4\u00e4givad, on soov jagada programmid v\u00e4iksemateks komponentideks v\u00f5i funktsioonideks, et neid oleks lihtsam j\u00e4lgida, kergem lugeda ja siluda.<\/p>\n<p>Kuid pole sugugi haruldane n\u00e4ha monoliitseid funktsioone, millel on palju koodikommentaare, mis aitavad programmis toimuvat selgitada.<\/p>\n<p>Ma ei t\u00f5rju seda, sest ma ei tea, milliste piirangute all programmeerija t\u00f6\u00f6tas. See on:<\/p>\n<ul>\n<li>Kui suur oli tema eelarve programmi koostamisel?<\/li>\n<li>Kui palju aega projekti l\u00f5puleviimiseks anti?<\/li>\n<li>Kas projekti kallal t\u00f6\u00f6tas palju inimesi?<\/li>\n<li>Kas programmeerijale anti aega koodi kirjutamiseks, et nad saaksid seda testida, \u00fcmber kujundada v\u00f5i lihtsalt lugeda lihtsamaks?<\/li>\n<\/ul>\n<p>L\u00fchidalt \u00f6eldes on palju p\u00f5hjust \u2013 ma usun \u2013, et me saame lugeda &quot;halba koodi&quot; ja see ei pea alati olema programmeerija s\u00fc\u00fc (see on lihtsalt k\u00f5ige loomulikum asi, mille peame lugemisel v\u00e4lja viskama midagi, mis meile ei meeldi).<\/p>\n<p>Kas see aga t\u00e4hendab, et me ei peaks p\u00fc\u00fcdma koodi \u00fcmber kujundada v\u00f5i kirjutada sellisel viisil, et seda oleks lihtsam m\u00f5ista? Muidugi mitte. Eeldades, et meil on selleks aega, kuidas saaksime seda teha?<\/p>\n<h2>Jagage programmid v\u00e4iksemateks komponentideks<\/h2>\n<p>Kui r\u00e4\u00e4kida sellisest teemast, eriti majanduses, mis on sama aktiivne kui e-kaubandus WordPressis, v\u00f5ib see olla v\u00e4ljakutse.<\/p>\n<h3>&quot;L\u00e4hme konkreetseks, Bob.&quot;<\/h3>\n<div class=\"sds-iframe-wrapper fitvidsignore\" style=\"position:relative;padding-top:56.25%;max-width:100%;\"><iframe allowfullscreen style=\"position:absolute;top:0;left:0;width:100%;height:100%;\" src=\"\/\/www.youtube.com\/embed\/4M2kEiLHKhs\" frameborder=\"0\"><\/iframe><\/div>\n<p>See t\u00e4hendab, et ma saan kirjutada sellest v\u00e4ga \u00fcksikasjalikult, kasutades pluginate komplekti, vaadates andmeid, lahkades p\u00e4ringuid ja n\u00e4idates, kuidas seda teha. V\u00f5i v\u00f5in sellest kirjutada veidi k\u00f5rgemal tasemel, mille l\u00f5ppeesm\u00e4rk on n\u00e4idata, kuidas programme v\u00e4iksemateks komponentideks jagada.<\/p>\n<p>Kuna esimest on v\u00f5imalik saavutada nii paljudel viisidel, valin ma viimase. See t\u00e4hendab, et see ei pruugi tingimata kasutada konkreetseid pistikprogramme, mis on otsesed p\u00e4ringud. Siiski kasutatakse k\u00f5rgetasemelisi n\u00e4iteid, mis aitavad teil l\u00e4bi vaadata p\u00e4ringute ja ts\u00fcklite jada ning jagada need v\u00e4iksemateks funktsioonideks.<\/p>\n<h3>\u00dcldine n\u00e4ide<\/h3>\n<p>Oletame n\u00e4iteks, et t\u00f6\u00f6tan WordPressi pistikprogrammi funktsiooni kallal, mille l\u00f5ppeesm\u00e4rk on hankida k\u00f5ik erinevad makseviisid, mille kasutaja on talletanud ja mis on seotud tema kontoga.<\/p>\n<p>V\u00e4ljakutse seisneb selles, et see teave on hajutatud mitme andmebaasi tabeli vahel (erinevate kasutatavate pistikprogrammide t\u00f5ttu), nii et m\u00f5ned p\u00e4ringud tuleb t\u00e4ita ja seej\u00e4rel hankida.<\/p>\n<p>Selliste p\u00e4ringute tegemise sammud v\u00f5ivad olla umbes sellised:<\/p>\n<ol>\n<li>saada praeguse kasutaja kliendi ID,<\/li>\n<li>hankige k\u00f5ik kliendi tellimuse ID-numbrid<\/li>\n<li>m\u00e4\u00e4rata, milliseid makseviise iga tellimuse puhul kasutati<\/li>\n<li>hankige nimetatud makseviisid ja seej\u00e4rel saatke kliendile andmed mark<\/li>\n<\/ol>\n<p>Olenevalt sellest, kuidas andmebaas on seadistatud, olenevalt teie SQL-i oskuste tasemest ja sellest, kuidas erinevad pluginad k\u00f5igi \u00fclaltoodud andmete t\u00f6\u00f6tlemiseks koos t\u00f6\u00f6tavad, v\u00f5ib selle teabe hankimiseks olla lihtne kirjutada \u00fcks suur p\u00e4ring.<\/p>\n<p>Kuid kui olete WordPressis e-kaubanduse ja erinevate pistikprogrammidega t\u00f6\u00f6tanud, teate, et see pole alati nii lihtne.<\/p>\n<p>Selle asemel vaatate midagi sellist nagu:<\/p>\n<ol>\n<li>peame saama kasutaja metaandmetest kliendi profiili,<\/li>\n<li>peame leidma k\u00f5ik kasutaja tehtud tellimused ja seda v\u00f5ib sageli seostada postituse v\u00f5i postituse metaandmete tabeliga,<\/li>\n<li>makseviise saab suure t\u00f5en\u00e4osusega salvestada nende tabelisse, mis on kasutajaga seotud teatud t\u00fc\u00fcpi m\u00e4rgi kaudu,<\/li>\n<li>\u00fclaltoodud m\u00e4rk asub tabelis ja on seotud antud teabega teises tabelis, millest peate seej\u00e4rel tuletama, vaadates kogu andmebaasis olemasolevaid andmeid.<\/li>\n<\/ol>\n<p>L\u00f5ppkokkuv\u00f5ttes peate looma p\u00e4ringute komplekti ainult siis, kui m\u00f5istate k\u00f5igepealt, kuidas otsida andmeid, mida otsite. See on piisavalt keeruline, nagu see on. Kuid kui saate seda teha, oletame, et kirjutate p\u00e4ringud j\u00e4rjestikku ja kasutate seej\u00e4rel soovitud v\u00e4ljundi saavutamiseks iga\u00fche tulemusi.<\/p>\n<p>Selle tulemuseks v\u00f5ib olla <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/7c0c8b50cd361f22b5f777544adc2204#file-00-monolithic-queries-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">midagi sellist<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ First, read the user ID and meta value to get authorization information\nglobal $wpdb;\n$results = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\n        SELECT\n            user_id, meta_value\n        FROM $wpdb-&gt;usermeta\n        WHERE meta_key LIKE %s\n        AND user_id = %d\n        \",\n        '%customer_profile_id%',\n        filter_input(INPUT_GET, 'customer_id')\n    ),\n    ARRAY_A\n);\n\n$result = isset($results[0])? array_column($results[0], 'meta_value'): [];\nif (empty($result)) {\n    return $result;\n}\n\n\/\/ Get the ID of the current customer.\n$customers = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\", \/\/ Your custom query goes here.\n        filter_input(INPUT_GET, 'customer_id')\n    ),\n    ARRAY_A\n);\n\n$customer = isset($customers[0])? array_column($customers[0], 'customer_id'): [];\nif (empty($customer)) {\n    return $customer;\n}\n\n\/\/ Get all of the order IDs from the set of orders returned from the previous query.\n$orderIds = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\", \/\/ Your custom query goes here.\n        $customer\n    ),\n    ARRAY_A\n);\n\nreturn $orderIds;\n\n\/\/ Finally, get all of the payment methods for the orders based on their Ids.\n$orders = [];\nforeach ($orderIds as $orderId) {\n    $results = $wpdb-&gt;get_results(\n        $wpdb-&gt;prepare(\n            \"\" \/\/ The query for retrieving various payment method information based on the $orderId\n        ),\n        ARRAY_A\n    );\n\n    if (empty($results)) {\n        continue;\n    }\n\n    $orders[$orderId] = $results;\n}\n\n\/\/ Now send the information back to the user.\nwp_send_json_success($orders);\n<\/code><\/pre>\n<p>Kuid see ei pea nii olema.<\/p>\n<p>Esiteks on need k\u00f5ik s\u00f5ltumatud p\u00e4ringud s\u00f5ltumatute tulemuste komplektidega, kuigi neid tuleb kasutada paralleelselt. See t\u00e4hendab, et saame need osadeks lahutada ja hinnata iga\u00fche tulemusi, enne kui j\u00e4rgmise sammuga edasi liigume.<\/p>\n<p>Lisaks v\u00f5imaldab see meil kirjutada v\u00e4iksemaid sidusamaid funktsioone. Kuigi need v\u00f5ivad \u00fcksteisest s\u00f5ltuda, saame seadistada iga funktsiooni aktsepteerima argumenti (v\u00f5i argumentide komplekti, millest saame kogu teabe hankida.<\/p>\n<p>V\u00f5ib-olla n\u00e4eb l\u00f5pptulemus v\u00e4lja umbes <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/7c0c8b50cd361f22b5f777544adc2204#file-01-breaking-apart-the-queries-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\npublic function getPaymentMethods()\n{\n  $authInfo = $this-&gt;getAuthorizationInformation();\n  $currentCustomerId = $this-&gt;getCurrentCustomerId($authInfo);\n  $orders = $this-&gt;getCustomerOrders($currentCustomerId);\n  $paymentMethods = $this-&gt;getPaymentMethodsFromOrders($orders);\n  wp_send_json_success($orders);\n}\n\nprivate function getAuthorizationInformation()\n{\n  global $wpdb;\n  $authInfo = $wpdb-&gt;get_results(\n      $wpdb-&gt;prepare(\n          \"\n          SELECT\n              user_id, meta_value\n          FROM $wpdb-&gt;usermeta\n          WHERE meta_key LIKE %s\n          AND user_id = %d\n          \",\n          '%customer_profile_id%',\n          filter_input(INPUT_GET, 'customer_id')\n      ),\n      ARRAY_A\n  );\n\n  return isset($authInfo[0])? array_column($authInfo[0], 'meta_value'): [];\n}\n\nprivate function getCurrentCustomerIdFromAuthInfo($authInfo)\n{\n  global $wpdb;\n  $customers = $wpdb-&gt;get_results(\n      $wpdb-&gt;prepare(\n          \"\", \/\/ Your custom query goes here.\n          $authInfo;\n      ),\n      ARRAY_A\n  );\n\n  return isset($customerId[0])? array_column($customerId[0], 'meta_value'): [];\n}\n\nprivate function getCustomerOrders($customerId)\n{\n  global $wpdb;\n  $orderIds = $wpdb-&gt;get_results(\n      $wpdb-&gt;prepare(\n          \"\", \/\/ Your custom query goes here.\n          $customerId\n      ),\n      ARRAY_A\n  );\n\n  return empty($orderIds)? []: $orderIds;\n}\n\nprivate function getPaymentMethodsFromOrders($orderIds)\n{\n  $paymentMethods = [];\n  foreach ($orderIds as $orderId) {\n      $results = $wpdb-&gt;get_results(\n          $wpdb-&gt;prepare(\n              \"\" \/\/ The query for retrieving various payment method information based on the $orderId\n          ),\n          ARRAY_A\n      );\n\n      if (empty($results)) {\n          continue;\n      }\n\n      $paymentMethods[$orderId] = $results;\n  }\n\n  return $paymentMethods;\n}\n<\/code><\/pre>\n<p>Muidugi ei saa ma n\u00e4idata tegelikku SQL-i \u2013 noh, v\u00e4hemalt mitte igal pool \u2013, sest ma ei tea \u00fcldist seadistust ega ka t\u00e4pselt, milliste pistikprogrammide v\u00f5i skeemidega te t\u00f6\u00f6tate.<\/p>\n<p>Kuid see pole kunagi olnud selle postituse m\u00f5te.<\/p>\n<p>Selle asemel p\u00fc\u00fcan \u00f6elda j\u00e4rgmist: kuigi me t\u00f6\u00f6tame v\u00e4ga piiratud piirangute all, saame siiski jagada programmid v\u00e4iksemateks komponentideks, mis aitavad meil toimuvat kirjeldada, m\u00f5ista, kuidas seda tehakse ja seej\u00e4rel andmeid saata. edasi-tagasi erinevate funktsioonide vahel ning kasutajale ja tagasi.<\/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>\u00dcks asi, millest programmeerijad sageli r\u00e4\u00e4givad, on soov jagada programmid v\u00e4iksemateks komponentideks v\u00f5i funktsioonideks, et neid oleks lihtsam j\u00e4lgida, kergem lugeda ja siluda.<\/p>\n","protected":false},"author":1,"featured_media":236233,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,802],"tags":[1165],"class_list":["post-230372","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-php-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230372","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=230372"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230372\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/236233"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}