Programovanie zamerané na Beerway vo F # [2]

úvod

V tomto blogu pokračujeme tam, kde sme prestali z predchádzajúceho blogu. Naším cieľom je:

  1. Konfigurácia literálov tak, aby nepretrvávala žiadna z nadmerne napísaných mumbo-jumbo. Uložíme naše konfigurácie, ktoré sa načítajú pri spustení procesu z MongoDb cez MLab. Jedinou pevne zakódovanou hodnotou bude hodnota pripojovacieho reťazca, ktorý sa má pripojiť k serveru Mongo.
  2. Zovšeobecnenie plánovača na spustenie plynovodu pre viac pivovarov.
  3. Časový rozvrh procesu.
  4. Perzistujúce šroty prostredníctvom MongoDb.

Prejdeme na testovanie pomocou programu Expecto a pridáme protokolovanie prostredníctvom Logary na 3. blogový príspevok v tejto sérii.

predkola

Od Atle Rudshauga som dostal skvelý ukazovateľ, ktorý sa zaoberal prípadom NoDifference; mali by sme považovať prípad NoDifference za úspech, t. j. ak sa nezistí žiadny rozdiel, neodošlite text.

Náš zmenený chybový modul teraz vyzerá takto:

Porovnať Funkcia, ktorá teraz jednoducho rozdieľuje rozdiel medzi súčasným a predchádzajúcim škrabaním.

Funkcia Alert Function má teraz povinnosť rozoznať, či sa má alebo nemá poslať text na základe mohutnosti sady rozdielov.

Navyše do nášho záznamu pridáme nového člena typového reťazca s názvom „Meno“, aby sme sa posunuli smerom k zovšeobecneniu plynovodu, ktorý bude zvýraznený neskôr.

Naše BeerInfo.fs s aktualizovaným typom záznamu a statickými členmi súvisiacimi so spoločnosťou Chiron teraz vyzerajú takto:

Konfigurácia a zovšeobecnenie

Zbavme sa všetkých pevne napísaných literálov a zovšeobecnímme potrubie nad zoznamom pivovarov, nielen iba pre Unavené ruky. Doteraz sme odviedli dobrú prácu oddelením spoločných komponentov; môžeme urobiť lepšie! Presuňte všetky konfigurácie do cloudu a zovšeobecnite piktogram.

konfigurácia

Na udržanie všetkých podrobností o konfigurácii budeme používať bezplatnú vrstvu MLab. Začneme vytvorením databázy s názvom „beerwayorientedprogramming“ a pridaním zbierky konfigurácií; toto by mal byť celkom priamy proces. UI MLab je úžasné! Ak máte nejaké problémy, neváhajte ma osloviť.

Zbierka konfigurácie by zatiaľ mala obsahovať dokument s našimi podrobnosťami o Twilio. Neskôr sa môžeme rozhodnúť, či chceme pridať ďalšie polia.

Zostávajúca konfiguračná kolekcia bude podobná nasledovnému:

{
    "_id": {
        "$ oid": "5976bcc1734d1d6202aa1556"
    },
    „MyPhoneNumber“: „vaše telefónne číslo“,
    „AccountSID“: „váš twilio účet sid“,
    „AuthToken“: „váš token twilio auth“,
    „SendingPhoneNumber“: „vaše telefónne číslo na odosielanie twilio“
}

Komunikácia s databázou

Ďalej pridáme referenciu mongocsharpdriver a MongoDB.FSharp cez PAKET. Ak si nie ste istí, ako to urobiť, prečítajte si predchádzajúci príspevok, ktorý obsahuje informácie o tom, ako používať PAKET, a dvakrát skontrolujte, či boli na závislé položky úspešne uvedené odkazy.

Pred súborom Error vytvoríme nový modul s názvom Db v súbore Common.fs, ktorý bude obsahovať všetky funkcie týkajúce sa našej databázy. Ďalej poskytneme všetok kód na deserializáciu / serializáciu súboru JSON, na ktorom sme predtým pracovali v module Porovnanie.

Jediným doslovným písmom, ktorý sa má pevne zakódovať, je spojovací reťazec [ak chcete byť kreatívni, môžete to ponechať v konfiguračnom súbore pomocou knižnice FSharp.Configuration].

Celkovo vzaté, modul Db vyzerá takto:

Viac informácií o operáciách Mongo + F # CRUD nájdete v mojom predchádzajúcom blogovom príspevku, ktorý nájdete tu. A zmenený výstražný modul s konfiguráciou teraz vyzerá takto:

zovšeobecnenie

Jediný kód špecifický pre pivovar bude existovať v syntaktickom analyzátore špecifickom pre pivovar a v súbore, ktorý obsahuje hlavnú funkciu, ktorá bude obsahovať plynovod pre pivovar. Aby sme vytvorili súbor Json na základe názvu pivovaru, budeme musieť zmeniť modul Porovnanie.

Zmenený modul BeerwayOrientedProgramming teraz vyzerá takto:

A zmenená funkcia porovnávania v module Porovnanie teraz vyzerá takto:

Scheduler

Ďalším krokom je nastavenie plánovača na spustenie pivovarských potrubí na časovači. Za týmto účelom stiahneme Quartz.NET pre plánovanie cez PAKET.

Po tomto útržku F # sme schopní ľahko nastaviť naplánovaný proces prechodu všetkými pivovarmi a analyzovať podrobnosti každé 2 sekundy navždy.

S akvizíciou piva sa nebudeme zaoberať, robíme z procesu pivo na podnikovej úrovni, aby sme získali bazooku.

Pretrvávajúce odreniny

Nakoniec pridajme schopnosť vytrvať v našich šrotoch do rovnakej databázy MongoDb „beerwayorientedprogramming“.

S rovnakým duchom zovšeobecnenia nášho procesu na jednoduché pridanie ďalších analyzátorov pivovaru pomenujeme zbierky databázy na základe názvu pivovaru po vytrhnutí zo sériového spracovania a deserializácie JSON do súboru a zo súboru.

Začneme tým, že vypustíme všetky staré komponenty na serializáciu a deserializáciu od JSON, a to tak, že po odstránení statických členov založených na Chirone prehodnotíme náš typ záznamu BeerInfo a pridáme ID MongoDb typu BsonObjectId.

Nový modul BeerInfo vyzerá takto:

Ak si všimnete, zmenili sme typ „piva“ zo zoznamu FSharp na systém System.Generic.Collections, aby sme vyhoveli ovládaču C # MongoDb, nad ktorým bol postavený model F #.

Odkaz na Chiron teraz odstránime, pretože ho už nepotrebujeme. Toto sa dosiahne otvorením príkazovej palety [Cmd + Shift + P] a navigáciou do referencie na odstránenie PAKET po otvorení súboru fsproj nasledujúcim spôsobom:

Po odstránení odkazu na Chiron pridáme do nášho Db modulu niekoľko metód týkajúcich sa vytvárania nových ID a získania predchádzajúceho zoškrabania.

Ak existuje výnimka pri pokuse získať zbierku podľa názvu pivovaru, pokúsime sa ju znovu vytvoriť v bloku with.

Odstránili sme zložitosť pretrvávania škrabancov z modulu Porovnať do modulu Db, kde schmatávame posledný škrabanec. Skontrolujeme, či je posledný zápis nulový [po jeho naliatí do objektu skontrolujeme nullovateľnosť, pretože používame FirstOrDefault ()].

Naša aktualizovaná funkcia TiredHandsScraper.scrape bude teraz vyzerať takto:

s funkciou getBeerNamesFromTiredHands vyzerá takto:

Náš modul Porovnať sa navyše výrazne zjednoduší:

Je úžasné, že naše odkazy budú pretrvávať, čo sa dá potvrdiť kontrolou našich dokumentov v kolekcii TiredHands:

záver

Určite sme zašli ďaleko pridaním konfigurácie, zovšeobecnením, plánovaním a pretrvávaním. Ako už bolo spomenuté, nasledujúci a posledný príspevok v tejto sérii bude obsahovať určité testovanie a protokolovanie, aby sa táto jednoduchá aplikácia úplne posilnila do úplne vyvinutej aplikácie.

Ako vždy oceňujem vašu spätnú väzbu!