Beerway-stilla forritun í F # [2]

Inngangur

Í þessari bloggfærslu höldum við áfram þar sem við hurðum frá fyrri bloggfærslu. Við viljum gera eftirfarandi:

  1. Stilla bókstafina þannig að enginn af of harðkóða mumbo jumbóunum haldi áfram. Við vistum stillingar okkar sem eru hlaðnar frá MongoDb í gegnum MLab þegar ferlið hefst. Eina harða kóðaða gildið er það af tengistrenginum sem er notaður til að tengjast Mongo netþjóninum.
  2. Alhæfing tímaáætlunar fyrir framkvæmd leiðslunnar fyrir nokkur brugghús.
  3. Skipuleggðu ferlið til að keyra á réttum tíma.
  4. Varanlegar rispur yfir MongoDb.

Við munum prófa notkun Expecto og bæta við skógarhöggi í gegnum Logary í þriðju bloggfærslunni í þessari röð.

Undirbúningur

Ég fékk frábært ábending frá Atle Rudshaug um meðferð NoDifference málsins. Við ættum að meðhöndla NoDifference málið sem árangur. Ef enginn munur finnst, ekki senda neinn texta.

Breytta villuleiningin okkar lítur nú svona út:

Bera saman aðgerð, sem reiknar nú einfaldlega muninn á núverandi og fyrri rispu.

Tilkynningaraðgerðin verður nú að ákvarða hvort senda eigi texta eða ekki á grundvelli hjartalínurits á mismuninum.

Við bætum einnig við nýjum „String“ gerðareiningum í gagnapakkann okkar sem heitir „Nafn“ til að ákvarða stefnu alhæfingar leiðslunnar, sem verður lögð áhersla á síðar.

BeerInfo.fs skráin okkar með uppfærðri gerð skrárinnar og truflanir fyrir Chiron lítur nú svona út:

Stillingar og alhæfing

Við skulum losa okkur við alla harða kóðaða bókmennta og alhæfa leiðsluna á lista yfir brugghús í staðinn fyrir bara þreyttar hendur. Hingað til höfum við unnið gott starf við að aðgreina sameiginlega íhlutina. við getum gert betur! Við skulum færa allar stillingar í skýið og alhæfa leiðsluna.

Framkvæmdir

Við munum nota ókeypis stig af MLab til að geyma allar upplýsingar um stillingar. Fyrst búum við til gagnagrunn sem kallast „beerwayoriented forritun“ og bætum við uppsetningarsafninu. Þetta ætti að vera nokkuð einfalt ferli. Notendaviðmót MLab er frábært! Hafðu samband við mig ef þú hefur einhver vandamál.

Uppsetningarsafnið ætti upphaflega að innihalda skjal með Twilio upplýsingum okkar. Við getum ákveðið síðar hvort við viljum bæta við fleiri reitum hér.

Þegar þeim hefur verið haldið úti lítur uppsetningarsafnið svona út:

{"_Ég myndi": {$ oid: 5976bcc1734d1d6202aa1556}, "MyPhoneNumber": "símanúmerið þitt", "AccountSID": "Your twilio account sid", "AuthToken": "Your twilio authentic token", "SendingPhoneNumber": "Kveðja twilio sendir símanúmer “}

Samskipti við gagnagrunninn

Næst bætum við við mongocsharpdriver og MongoDB.FSharp tilvísun í gegnum PAKKE. Ef þú ert ekki viss um hvernig á að gera þetta, vinsamlegast lestu fyrri færslu, sem hefur að geyma upplýsingar um notkun PAKKJA, og athugaðu hvort vísað hafi verið til ósjálfstæði.

Fyrir villuleininguna búum við til nýja einingu sem kallast "Db" í skránni "Common.fs" sem inniheldur allar aðgerðir gagnagrunnsins okkar. Að auki er allur kóði fyrir deserialization / serialization á JSON skránni, sem við unnum áður í samanburðar einingunni, fjarlægður.

Eini bókstafurinn sem er harður dulritaður er tengingastrengurinn. [Ef þú vilt vera skapandi geturðu geymt það í uppsetningarskrá með FSharp.Configuration bókasafninu.]

Allt í allt lítur Db einingin svona út:

Nánari upplýsingar um Mongo + F # CRUD má finna í fyrri bloggfærslu minni, sem þú getur fundið hér. Og breytt viðvörunareiningin með stillingarnar lítur nú svona út:

Alhæfing

Eini númerið sem er sértækt fyrir brugghúsið er í rétti fyrir brugghúsið og í aðalaðgerðarskránni sem inniheldur leiðsluna fyrir brugghúsið. Við verðum að breyta bera saman eininguna til að búa til Json skrána byggða á nafni bruggarans.

Breytti BeerwayOrientedProgramming einingin lítur nú svona út:

Og breytt samanburðaraðgerð í samanburðarhlutanum lítur nú svona út:

Skipuleggjandi

Næsta skref er að setja upp tímaáætlun til að keyra bryggjuleiðslur á tímamælir. Fyrir þetta sækjum við Quartz.NET fyrir áætlanagerð með PAKKE.

Eftir þennan F # bút, getum við auðveldlega sett upp skipulagt ferli til að fara í gegnum öll brugghús og greina smáatriðin á 2 sekúndna fresti að eilífu.

Við leggjum ekki áherslu á bjórinnkaupin okkar, heldur gerum það að bjórinn fær bazooka á vettvangi fyrirtækisins.

Viðvarandi rispur

Að lokum, við skulum bæta við möguleikanum á að vista rusl okkar í sama MongoDb gagnagrunni með „bjórleiðar forritun“.

Af sömu ástæðu og við alhæfum ferli okkar svo að auðveldlega sé hægt að bæta við öðrum þáttum í brugghúsum, munum við heita söfnum gagnagrunnsins á grundvelli nafns bruggarans eftir að JSON er búið að flokka og endurnýja í og ​​úr skrá hafa.

Fyrst skaltu fjarlægja alla gömlu JSON raðgreiningar- og afsölunarhlutana með því að athuga BeerInfo plötugerðina og bæta BsonObjectId MongoDb auðkenni eftir að hafa verið fjarlægður kyrrstæðu frumefnin í Chiron.

Nýi BeerInfo einingin lítur svona út:

Ef þú tekur eftir breyttum við tegundinni „Bjór“ úr FSharp lista í „Einn“ í „System.Generic.Collections“ til að passa við C # MongoDb bílstjórann sem F # One var búinn til.

Við munum nú fjarlægja tilvísunina til Chiron þar sem við þurfum ekki lengur á því að halda. Til að gera þetta skaltu opna skipanatöflu [Cmd + Shift + P] og, eftir að fsproj skráin hefur verið opnuð, farðu til fjarlægingar tilvísunar PAKET sem hér segir:

Þegar tilvísunin í Chiron er fjarlægð munum við bæta nokkrum aðferðum við Db mát okkar sem skipta máli fyrir að búa til ný auðkenni og fá fyrri rusl.

Ef undantekning á sér stað þegar reynt er að fá safnið með nafni brugghússins er reynt að endurskapa það í með reitnum.

Við höfum dregið úr margbreytileikanum við að halda ruslunum frá Bera saman einingunni yfir í Db eininguna með því að grípa síðustu skafa. Við athugum hvort síðasta skafið sé null [eftir að það hefur verið breytt í hlut til að athuga núllleysi þegar við notum FirstOrDefault ()].

Uppfærða TiredHandsScraper.scrape aðgerðin okkar lítur nú svona út:

GetBeerNamesFromTiredHands aðgerðin lítur svona út:

Að auki er samanburðar einingin okkar verulega einfölduð:

Það er frábært að rusl okkar haldist, sem er hægt að staðfesta með því að skoða skjölin okkar í TiredHands safninu:

Niðurstaða

Við höfum örugglega náð langt með því að bæta við, alhæfa, skipuleggja og viðhalda uppsetningunni. Eins og áður segir inniheldur næsta og síðasta innlegg í þessari röð nokkur próf og skógarhögg til að breyta þessu einu einfalda forriti í fullkomlega þróað.

Ég er alltaf ánægður með að fá athugasemdir þínar!