Uz Beerway orientēta programmēšana F # [2]

Ievads

Šajā emuārā mēs turpinām tur, kur mēs atteicāmies no iepriekšējās emuāra ziņas. Mūsu mērķis ir rīkoties šādi:

  1. Literals konfigurēšana tā, lai netiktu turpināts neviens no pārmērīgi cietiem kodiem. Mēs ietaupīsim savas konfigurācijas, kuras tiks ielādētas procesa sākšanas laikā no MongoDb caur MLab. Vienīgā cietā kodētā vērtība būs savienojuma virknes vērtība, lai izveidotu savienojumu ar Mongo serveri.
  2. Plānotāja vispārināšana, lai palaistu cauruļvadu vairākām alus darītavām.
  3. Plānojiet procesu savlaicīgi.
  4. Noturīgas skrambas, izmantojot MongoDb.

Mēs pārbaudīsim, izmantojot Expecto, un pievienosim reģistrēšanu caur Logary šīs sērijas 3. emuārā.

Ievads

Es saņēmu lielisku norādi par NoDifference lietas izskatīšanu no Atle Rudshaug; NoDifference lieta ir jāuzskata par veiksmi, t.i., ja netiek atrasta atšķirība, nesūtiet tekstu.

Mūsu mainītais kļūdu modulis tagad izskatās šādi:

Salīdziniet funkciju, kas tagad vienkārši novērš atšķirību starp pašreizējo un iepriekšējo skrāpējumu.

Brīdināšanas funkcijai tagad ir pienākums noteikt, vai nosūtīt tekstu, pamatojoties uz iestatītās atšķirības kardinalitāti.

Turklāt mēs savam ierakstam pievienosim jaunu tipa virknes locekli ar nosaukumu “Vārds”, lai virzītos uz cauruļvada vispārināšanas virzienu, kas vēlāk tiks izcelts.

Mūsu BeerInfo.fs ar atjaunināto ieraksta veidu un ar Chiron saistītajiem statiskajiem dalībniekiem tagad izskatās šādi:

Konfigurācija un vispārināšana

Atbrīvosimies no visiem kodētajiem burtiem un vispārināsim visu alus darītavu sarakstu, nevis tikai apnikušo roku sarakstu. Līdz šim mēs esam paveikuši labu darbu, atdalot kopējās sastāvdaļas; mēs varam darīt labāk! Pārvietosim visas konfigurācijas uz mākoni un vispārināsim cauruļvada līniju.

Konfigurācija

Mēs izmantosim MLab bezmaksas līmeni, lai saglabātu visu konfigurācijas informāciju. Sākumā izveidojam datu bāzi ar nosaukumu “beerwayorientedprogramming” un pievienojam konfigurāciju kolekciju; šim procesam vajadzētu būt diezgan taisnīgam. MLab lietotāja saskarne ir satriecoša! Ja jums ir kādas problēmas, sazinieties ar mani.

Pagaidām konfigurācijas kolekcijā vajadzētu būt dokumentam ar mūsu Twilio informāciju. Mēs vēlāk varēsim izlemt, vai mēs vēlamies šeit pievienot citus laukus.

Pēc konfigurācijas kolekcijas saglabāšanās līdzīga būs:

{
    "_id": {
        "$ oid": "5976bcc1734d1d6202aa1556"
    },
    "MyPhoneNumber": "jūsu tālruņa numurs",
    "AccountSID": "jūsu twilio konta sid",
    "AuthToken": "jūsu twilio auth marķieris",
    "SendingPhoneNumber": "jūsu Twilio sūtīšanas tālruņa numurs"
}

Saziņa ar datu bāzi

Tālāk mēs pievienosim mongocsharpdriver un MongoDB.FSharp atsauci, izmantojot PAKET. Ja neesat pārliecināts, kā to izdarīt, lūdzu, skatiet iepriekšējo ierakstu, kurā ir informācija par PAKET lietošanu un vēlreiz pārbaudiet, vai ir veiksmīgi izmantotas atkarības.

Pirms kļūdas moduļa mēs izveidosim jaunu moduli ar nosaukumu Db failā Common.fs, kurā būs visas ar datu bāzēm saistītās funkcijas. Turklāt mēs izdalīsim visu kodu, lai pamatotu / serializētu JSON failu, ar kuru iepriekš strādājām modulī Salīdzināt.

Vienīgais burtiski kodējamais ir savienojuma virkne [ja vēlaties būt radošs, varat to saglabāt konfigurācijas failā, izmantojot bibliotēku FSharp.Configuration].

Kopumā Db modulis izskatās šādi:

Sīkāka informācija par Mongo + F # CRUD operācijām ir atrodama manā iepriekšējā emuārā, kas atrodams šeit. Tagad mainītais brīdinājuma modulis ar konfigurāciju izskatās šādi:

Vispārināšana

Vienīgais alus darītavas īpašais kods dzīvos alus darītavas konkrētajā parserī un failā, kurā ir galvenā funkcija, kurā būs alus darītavas cauruļvads. Mums būs jāmaina salīdzināšanas modulis, lai izveidotu Json failu, pamatojoties uz alus darītavas nosaukumu.

Mainītais modulis BeerwayOrientedProgramming tagad izskatās šādi:

Tagad mainītā salīdzināšanas funkcija salīdzināšanas modulī izskatās šādi:

Plānotājs

Nākamais solis ir iestatīt plānotāju, lai palaistu breweryPipelines taimerī. Šajā nolūkā plānošanai, izmantojot PAKET, mēs lejupielādēsim Quartz.NET.

Pēc šī F # fragmenta mēs varam viegli iestatīt ieplānoto procesu, kurā iet cauri visām alus darītavām, un uz visiem laikiem analizēt informāciju ik pēc 2 sekundēm.

Mēs nedomājam par alus iegādi, tāpēc dažu uzņēmumu līmenī alus iegūst bazuku.

Noturīgas skrambas

Visbeidzot, pievienosim iespēju saglabāt mūsu skrāpējumus tajā pašā MongoDb “beerwayorientedprogramming” datu bāzē.

Ar tādu pašu vispārināšanas garu, kā viegli pievienot citus alus darītavas analizētājus, mēs datu bāzes kolekcijas nosauksim, pamatojoties uz alus darītavas nosaukumu, pēc tam, kad JSON tiks sistematizēta un atbilstoši pārveidota failā un no tā.

Mēs sāksim ar visu veco JSON seriālizēšanas un pelnīšanas komponentu sakārtošanu, pārskatot mūsu BeerInfo ieraksta veidu un pievienojot MongoDb Id, kas ir BsonObjectId tipa, pēc mūsu Chiron balstīto statisko dalībnieku noņemšanas.

Jaunais BeerInfo modulis izskatās šādi:

Ja pamanāt, mēs mainījām “Alus” veidu no FSharp saraksta uz vienu uz System.Generic.Collections vienu, lai ievērotu C # MongoDb draiveri, kuram F # ir uzbūvēts virsū.

Tagad mēs noņemsim atsauci uz Chiron, jo mums tas vairs nav vajadzīgs. Tas tiek darīts, atverot komandu paliktni [Cmd + Shift + P] un pēc fsproj faila atvēršanas sekojot PAKET noņemšanas atsaucei:

Kad atsauce uz Chiron ir noņemta, mēs savam Db modulim pievienosim dažas metodes, kas piemērotas jaunu ID izveidošanai, kā arī iepriekšējās nokasīšanas iegūšanai.

Ja ir kāds izņēmums, mēģinot kolekciju iegūt pēc alus darītavas nosaukuma, mēs mēģināsim to izveidot no jauna ar bloku.

Mēs esam novērsuši sarežģījumu noturēt skrāpējumus no salīdzināšanas moduļa uz Db moduli, kurā mēs satveram pēdējo skrāpi. Mēs pārbaudām, vai pēdējais skrāpējums nav derīgs [pēc tam, kad tas tika ievietots objektā, lai pārbaudītu, vai tā ir neatgriezeniska, jo mēs izmantojam FirstOrDefault ()].

Mūsu atjauninātā funkcija TiredHandsScraper.scrape tagad izskatīsies šādi:

ar funkciju getBeerNamesFromTiredHands izskatās šādi:

Turklāt mūsu salīdzināšanas modulis tiks ievērojami vienkāršots:

Tas ir satriecoši, ja mūsu lūžņi saglabājas, un to var apstiprināt, pārbaudot mūsu dokumentus kolekcijā TiredHands:

Secinājums

Mēs noteikti esam nonākuši tālu, pievienojot konfigurāciju, vispārinot, plānojot un saglabājot. Kā jau minēts iepriekš, nākamais un pēdējais šīs sērijas ieraksts saturēs dažus testēšanas un reģistrēšanas darbus, lai pilnībā papildinātu šo vienreiz vienkāršo lietojumprogrammu pilnībā izveidotā versijā.

Kā vienmēr, es novērtēju jūsu atsauksmes!