F # -де Beerway-бағытталған бағдарламалау [2]

Кіріспе

Осы блог жазбасында біз алдыңғы блогтан кеткен жерімізді жалғастырамыз. Біз келесі әрекеттерді орындағымыз келеді:

  1. Өте қатты кодталған мумбо джумбаларының ешқайсысы тоқтамайтындай литералдарды теңшеңіз. Біз MongoDb-дан MLab арқылы жүктелген конфигурацияларды процесс басталған кезде сақтаймыз. Mongo серверіне қосылу үшін пайдаланылатын байланыс жолының мәні - бұл тек кодталған код.
  2. Бірнеше сыра қайнату зауытына арналған құбырдың орындалу кестесін жалпылау.
  3. Процесті уақытында іске қосуды жоспарлаңыз.
  4. MongoDb үстінен тұрақты сызаттар.

Біз Expecto-ны қолдануды тексереміз және осы сериядағы үшінші блогта Logary арқылы журнал жүргізуді қосамыз.

Дайындық

Мен Atle Rudshaug-дан NoDifference ісін емдеу туралы керемет кеңес алдым. Біз NoDifference жағдайын сәттілік ретінде қарастыруымыз керек. Егер ешқандай айырмашылық табылмаса, мәтін жібермеңіз.

Біздің модификацияланған қате модулі келесідей көрінеді:

Салыстыру функциясы, қазір жай және алдыңғы сызаттар арасындағы айырмашылықты есептейді.

Енді хабарландыру функциясы мәтіннің жіберілген-жіберілмегенін анықталған айырмашылықтың кардиналдығына негізделуі керек.

Сондай-ақ, «Жол» типті жаңа элементті біздің деректер жиынына «Аты» деп аталады, құбырды жалпылау бағытын анықтау үшін, кейінірек бөлектелетін болады.

Chiron үшін статикалық элементтер мен жаңартылған жазба түрі бар BeerInfo.fs файлымыз келесідей көрінеді:

Конфигурация және жалпылау

Барлық қатты кодталған әріптерден арылып, құбырды жай шаршаған қолдардың орнына сыра қайнату зауыттарының тізіміне жинақтайық. Осы уақытқа дейін біз ортақ компоненттерді бөлу бойынша жақсы жұмыс жасадық. біз жақсырақ жасай аламыз! Барлық конфигурацияларды бұлтқа көшіріп, құбырды жалпылайық.

Құрылыс

Конфигурацияның барлық мәліметтерін сақтау үшін біз MLab-тың бос деңгейін пайдаланамыз. Алдымен біз «сырттай бағдарланған бағдарламалау» деп аталатын дерекқор құрамыз және конфигурация жинағын қосамыз. Бұл өте қарапайым процесс болуы керек. MLab интерфейсі керемет! Егер сізде қандай да бір проблемалар болса, маған хабарласыңыз.

Конфигурациялар жиынтығында біздің Twilio мәліметтері бар құжат болуы керек. Мұнда көбірек өрістер қосқымыз келетін-келмейтінін кейінірек шеше аламыз.

Жөндеуден кейін конфигурация жинағы келесідей көрінеді:

{«_I would»: {$ oid: 5976bcc1734d1d6202aa1556}, «MyPhoneNumber»: «Сіздің телефон нөміріңіз», «AccountSID»: «Сіздің тіркелгіңіздің егжей-тегжейі», «AuthToken»: «Сіздің қосымшаларыңыздың түпнұсқалық растамасы», «SendingPhoneNumber»: «Сіздікі twilio телефон нөмірін жіберу «}

Деректер базасымен байланыс

Содан кейін біз mongocsharpdriver және MongoDB.FSharp сілтемесін PACKAGE арқылы қосамыз. Егер мұны қалай жасау керектігін білмесеңіз, PACKAGE пайдалану туралы ақпаратты қамтитын алдыңғы жазбаны оқып шығыңыз және тәуелділіктер сәтті берілгендігін тексеріңіз.

Қате модулінің алдында біз «Common.fs» файлында «Db» деп аталатын жаңа модуль жасаймыз, оның құрамында барлық мәліметтер базасына қатысты функциялар бар. Сонымен қатар, біз бұрын Салыстыру модулінде жұмыс жасаған JSON файлын десерализация / сериализациялаудың барлық коды жойылды.

Қатаң кодталған жалғыз әріп - бұл байланыс жолы. [Егер сіз креативті болғыңыз келсе, оны FSharp.Configuration кітапханасының көмегімен конфигурация файлында сақтай аласыз.]

Жалпы, Db модулі келесідей:

Mongo + F # CRUD туралы толығырақ ақпаратты алдыңғы блогымнан таба аласыз, оны осы жерден таба аласыз. Конфигурациясы бар модификацияланған дабыл модулі келесідей көрінеді:

Жалпылау

Сыра қайнату өндірісіне арналған жалғыз код - бұл сыра қайнату зауытына арналған анализде және қайнату зауыты үшін құбыры бар негізгі функция файлында. Сыра қайнатушының атына негізделген Json файлын жасау үшін Салыстыру модулін өзгерту керек.

Енді өзгертілген BeerwayOrientedProgramming модулі келесідей көрінеді:

Салыстыру модуліндегі салыстырмалы өзгертілген функция енді келесідей:

Жоспарлаушы

Келесі қадам - ​​қайнату құбырларын таймерде іске қосу үшін жоспарлағышты орнату. Бұл үшін біз PACKAGE арқылы жоспарлау үшін Quartz.NET бағдарламасын жүктейміз.

Осы F # үзіндіден кейін біз барлық сыра қайнату зауыттарын аралап, әр 2 секунд сайын егжей-тегжейлі талдауға болады.

Біз өзіміздің сыраны сатып алумен айналыспаймыз, бірақ компания сырасында базуканы алатын процесті жасаймыз.

Тұрақты сызаттар

Ақыр соңында, MongoDb дерекқорында «сыра жолына бағытталған бағдарламалау» арқылы біздің сынықтарымызды сақтау мүмкіндігін қосайық.

Өз процедурамызды басқа сыра қайнатушыларын оңай қосуға болатындай етіп жалпыламаған себебіміз, JSON сериялауды және десериализацияны файлдан шығарып, шығарып тастағаннан кейін, сыра қайнатушының атына негізделген дерекқор жиынтығын атаймыз. бар.

Алдымен, барлық ескі JSON сериялау және десерализация компоненттерін BeerInfo жазба түрін тексеріп, Chiron негізіндегі статикалық элементтерді алып тастағаннан кейін BsonObjectId MongoDb идентификаторын қосыңыз.

BeerInfo жаңа модулі келесідей:

Егер сіз байқасаңыз, біз F-One жасалған C # MongoDb драйверіне сәйкестендіру үшін FSharp тізімінен «Бірге» -ді «System.Generic.Collections» -ке өзгерттік.

Біз енді Чиронға сілтемені алып тастаймыз, өйткені ол енді қажет емес. Мұны істеу үшін [Cmd + Shift + P] пәрмендер палитрасын ашып, fsproj файлын ашқаннан кейін PAKET-ті жою сілтемесіне келесідей өтіңіз:

Хиронға сілтеме жойылғаннан кейін біз жаңа жеке куәліктерді жасауға және алдыңғы сынықтарды алуға қатысты Db модулімізге бірнеше әдістер қосамыз.

Егер сыра қайнату зауытының атауымен коллекция алу кезінде ерекше жағдай орын алса, оны блокта қайта жасауға әрекет жасалады.

Біз қиындыларды Салыстыру модулінен Db модуліне дейін сақтаудың күрделілігін азайттық. Соңғы сынықтың бос екендігін тексереміз [FirstOrDefault ()] функциясын қолданғанымыз үшін оның өзгермейтіндігін тексереміз.

Біздің жаңартылған TiredHandsScraper.scrape функциясы келесідей көрінеді:

GetBeerNamesFromTiredHands функциясы келесідей:

Сонымен қатар, біздің Compare модулі айтарлықтай жеңілдетілген:

Біздің сынықтарымыздың сақталғаны өте жақсы, оны TiredHands коллекциясындағы құжаттарымызбен тексеру арқылы растауға болады:

Қорытынды

Біз конфигурацияны қосу, жалпылау, жоспарлау және жүргізу арқылы ұзақ жолдан өттік. Жоғарыда айтылғандай, осы сериядағы келесі және соңғы хабарламада қарапайым сынақтан өткен бағдарламаны толықтай өңдеуге ауыстыру үшін бірнеше сынақтар мен журналдар бар.

Мен сіздің пікіріңізді қабылдауға әрқашан қуаныштымын!