Бірвей-арыентаванае праграмаванне ў F # [2]

Уводзіны

У гэтым паведамленні блога мы працягваем там, дзе мы спыніліся ад папярэдняй публікацыі блога. Мы хочам зрабіць наступнае:

  1. Наладзьце літаралы так, каб ні адна з занадта моцна закадзіраваных мамбо джамбоў не працягвалася. Мы захоўваем нашы канфігурацыі, загружаныя з MongoDb праз MLab пры запуску працэсу. Адзінае цвёрда закадаванае значэнне - гэта радок злучэння, які выкарыстоўваецца для падлучэння да сервера Mongo.
  2. Абагульненне планавальніка па выкананні трубаправода для некалькіх бровараў.
  3. Плануйце працэс запускаць своечасова.
  4. Пастаянныя драпіны над MongoDb.

Мы будзем тэставаць выкарыстанне Expecto і дадаваць рэгістрацыю з дапамогай Logary у трэці пост блога гэтай серыі.

Падрыхтоўка

Я атрымаў выдатную падказку ад Атле Рудшоу наконт лячэння справы NoDifference. Мы павінны ставіцца да выпадку NoDifference як да поспеху. Калі розніцы не выяўлена, не адсылайце ніякага тэксту.

Наш мадыфікаваны модуль памылак цяпер выглядае так:

Параўнаем функцыю, якая зараз проста вылічвае розніцу паміж бягучай і папярэдняй драпінай.

Цяпер функцыя апавяшчэння павінна вызначаць, ці варта адпраўляць тэкст ці не, грунтуючыся на кардынальнасці заданай розніцы.

Мы таксама дадамо новы элемент тыпу "Радок" у наш набор дадзеных пад назвай "Імя", каб вызначыць кірунак абагульнення канвеера, які будзе выдзелены пазней.

Наш файл BeerInfo.fs з абноўленым тыпам запісу і статычнымі элементамі для Chiron цяпер выглядае так:

Канфігурацыя і абагульненне

Давайце пазбавімся ад усіх цвёрдых закодаў і абагульнім канвеер з спісам півавараў замест проста Стомленых рук. Пакуль мы правялі добрую працу па падзеле агульных кампанентаў. мы можам зрабіць лепш! Давайце перамесцім усе канфігурацыі ў воблака і абагульнім канвеер.

Будаўніцтва

Мы будзем выкарыстоўваць бясплатны ярус MLab, каб захаваць усе дэталі канфігурацыі. Спачатку мы ствараем базу дадзеных пад назвай "праграмаванне піва з арыентацыяй" і дадаём калекцыю канфігурацый. Гэта павінен быць даволі просты працэс. Карыстацкі інтэрфейс MLab проста фантастычны! Калі ў вас узніклі праблемы, калі ласка, звяжыцеся са мной.

Калекцыя канфігурацый павінна першапачаткова ўтрымліваць дакумент з нашымі падрабязнасцямі Twilio. Мы можам прыняць рашэнне пазней, калі мы хочам дадаць сюды яшчэ палі.

Пасля падтрымання калекцыя канфігурацыі выглядае прыблізна так:

{"_I would": {$ oid: 5976bcc1734d1d6202aa1556}, "MyPhoneNumber": "Ваш нумар тэлефона", "AccountSID": "Ваш рахунак twilio sid", "AuthToken": "Ваш знак twilio auth", "SendingPhoneNumber": "Ваш twilio адпраўкі нумара тэлефона "}

Сувязь з базай дадзеных

Далей мы дадаем спасылку mongocsharpdriver і MongoDB.FSharp з дапамогай PACKAGE. Калі вы не ўпэўненыя ў тым, як гэта зрабіць, прачытайце папярэдні пост, які змяшчае інфармацыю пра выкарыстанне PAKKAGE, і праверце, ці былі на спасылкі паспяхова спасылаюцца.

Перад модулем памылак мы ствараем новы модуль пад назвай "Db" у файле "Common.fs", які змяшчае ўсе нашы функцыі, звязаныя з базай дадзеных. Акрамя таго, увесь код для дэсерыялізацыі / серыялізацыі файла JSON, над якім мы працавалі ў модулі параўнання, выдаляецца.

Адзіны, які жорстка кадзіруецца, - гэта радок злучэння. [Калі вы хочаце быць творчым, вы можаце захаваць яго ў файле канфігурацыі, выкарыстоўваючы бібліятэку FSharp.Configuration.]

Увогуле, модуль Db выглядае так:

Больш падрабязна пра Mongo + F # CRUD можна даведацца ў маёй папярэдняй публікацыі ў блогу, якую вы можаце знайсці тут. І мадыфікаваны модуль сігналізацыі з канфігурацыяй цяпер выглядае так:

Абагульненне

Адзіны код, які тычыцца бровара, знаходзіцца ў аналізатары бровараў і ў файле асноўных функцый, які змяшчае трубаправод для піваварні. Мы павінны змяніць модуль параўнання, каб стварыць файл Json на аснове імя півавара.

Зменены модуль BeerwayOrientedProgramming зараз выглядае так:

І змененая функцыя параўнання ў модулі параўнання выглядае так:

Планіроўшчык

Наступным крокам будзе наладзіць планавальнік па запуску піваварных трубаправодаў па таймеры. Для гэтага мы загружаем Quartz.NET для планавання з дапамогай PACKAGE.

Пасля гэтага фрагмента F # мы зможам з лёгкасцю наладзіць запланаваны працэс для перапрацоўкі ўсіх піваварных заводаў і прааналізаваць падрабязнасці кожныя 2 секунды.

Мы не збіраемся з нашымі закупкамі піва, але робім працэс, калі піва атрымлівае базуку на ўзроўні кампаніі.

Устойлівыя драпіны

І нарэшце, дадамо магчымасць захаваць нашы фрагменты ў той жа базе дадзеных MongoDb з "праграмай, арыентаванай на піва".

Па той жа прычыне, што мы абагульняем наш працэс, каб лёгка было дадаваць іншыя аналізатары піваварных заводаў, мы назавем калекцыі базы дадзеных на аснове імя півавара пасля выдалення серыялізацыі і дэсерыялізацыі JSON у файле і з яго. ёсць.

Спачатку выдаліце ​​ўсе старыя кампаненты серыялізацыі і дэсерыялізацыі JSON, праверыўшы паўторную праверку тыпу запісу BeerInfo і дадайце ідэнтыфікатар BsonObjectId MongoDb пасля выдалення статычных элементаў на аснове Хірона.

Новы модуль BeerInfo выглядае так:

Калі вы заўважылі, мы змянілі тып Beers са спісу FSharp на Адзін на System.Generic.Collections, каб адпавядаць драйверу C # MongoDb, на якім быў створаны F # One.

Цяпер мы выдалім спасылку на Хірона, бо нам гэта больш не трэба. Для гэтага адкрыйце палітру каманд [Cmd + Shift + P] і, адкрыўшы файл fsproj, перайдзіце да даведкі аб выдаленні PAKET наступным чынам:

Пасля таго, як спасылка на Chiron будзе выдаленая, мы дадамо некалькі метадаў у наш модуль Db, якія маюць дачыненне да стварэння новых ідэнтыфікатараў і атрымання папярэдняга лома.

Калі пры спробе атрымаць калекцыю з назвай бровара адбываецца выключэнне, робіцца спроба узнавіць яе ў блоку з.

Мы знізілі складанасць захавання драпін ад модуля параўнання з модулем Db, схапіўшы апошні скраб. Мы правяраем, ці з'яўляецца апошні скрап нулявым [пасля пераўтварэння яго ў аб'ект, каб праверыць зменнасць, калі мы выкарыстоўваем FirstOrDefault ()].

Наша абноўленая функцыя TiredHandsScraper.scrape выглядае так:

Функцыя getBeerNamesFromTiredHands выглядае так:

Акрамя таго, наш модуль параўнання значна спрошчаны:

Цудоўна, што нашы драпіны захоўваюцца, што можна пацвердзіць, пачытаўшы нашы дакументы ў калекцыі TiredHands:

Выснова

Мы, безумоўна, прайшлі доўгі шлях шляхам дадання, абагульнення, планавання і падтрымання канфігурацыі. Як ужо згадвалася, наступны і апошні пост у гэтай серыі змяшчае некалькі тэстаў і рэгістрацыі для пераўтварэння гэтага некалі простага прыкладання ў цалкам распрацаваны.

Я заўсёды рады атрымаць вашыя водгукі!