F # da pivo yo'naltirilgan dasturlash

Kirish

Ushbu blogpostda biz oldingi blogpostdan ajratilgan joyni davom ettiramiz. Biz quyidagilarga intilamiz:

  1. Literals-ni sozlash, shuning uchun haddan tashqari qattiq kodlangan mumbo-jumbo davom etmaydi. MongoDb orqali MLab orqali jarayonni boshlashda yuklanadigan konfiguratsiyalarimizni saqlab qolamiz. Mongo serveriga ulanish uchun ulanish satrining yagona qattiq kodlangan qiymati bo'ladi.
  2. Bir nechta pivo zavodi uchun quvur liniyasini ishga tushirishni rejalashtiruvchini umumlashtirish.
  3. Jarayonni o'z vaqtida bajarishni rejalashtirish.
  4. MongoDb orqali doimiy parchalar.

Biz Expecto-dan foydalanib, ushbu seriyadagi 3-chi blogpostda Logary-ga o'tishni qo'shishni sinab ko'ramiz.

Oldindan choralar

Men Atle Rudshaugdan NoDifference ishini ko'rib chiqish bo'yicha ajoyib ko'rsatma oldim; biz NoDifference ishini Muvaffaqiyat deb hisoblashimiz kerak, ya'ni agar biron bir farq topilmasa, matnni yubormang.

O'zgartirilgan xato moduli endi quyidagicha ko'rinadi:

Hozirgi va oldingi parchalar orasidagi farqni oddiygina o'zgartiradigan funktsiyani taqqoslang.

Endi ogohlantirish funktsiyasi o'rnatilgan farqning kardinalligiga asoslangan holda matnni yuborish yoki yubormaslikni aniqlashga imkon beradi.

Bundan tashqari, biz "Ism" deb nomlangan yozuvimizga tipli satrning yangi a'zosini qo'shamiz va keyinchalik ajratib ko'rsatiladigan quvur liniyasini umumlashtirish yo'nalishiga o'tamiz.

Bizning BeerInfo.fs, yangilangan yozuv turi va Chiron bilan bog'liq statik a'zolari endi quyidagicha:

Konfiguratsiya va umumlashtirish

Keling, har qanday qattiq kodlangan adabiyotlarimizdan xalos bo'laylik va quvurlar shunchaki charchagan qo'llar emas, balki pivo zavodlari ro'yxati bo'yicha umumlashtirilsin. Hozirgacha biz Umumiy qismlarni ajratib olib yaxshi ish qildik; biz yaxshiroq qila olamiz! Keling, barcha konfiguratsiyalarni bulutga o'tkazamiz va quvur liniyasini umumlashtiramiz.

Konfiguratsiya

Biz konfiguratsiya tafsilotlarini saqlab qolish uchun MLab-ning bepul darajasidan foydalanamiz. Biz "pivwayorientedprogramming" deb nomlangan ma'lumotlar bazasini yaratamiz va konfiguratsiyalar to'plamini qo'shamiz; bu juda to'g'ri oldinga siljish bo'lishi kerak. MLab interfeysi ajoyib! Agar biron bir muammo bo'lsa, menga murojaat qilishdan qo'rqing.

Hozirgi vaqtda konfiguratsiya to'plamida bizning Twilio tafsilotlarimiz bo'lgan hujjat bo'lishi kerak. Keyinchalik bu yerga boshqa maydonlar qo'shishni xohlashimiz to'g'risida qaror qilishimiz mumkin.

Bir marta sozlangan konfiguratsiya to'plami quyidagilarga o'xshash bo'ladi:

{
    "_id": {
        "$ oid": "5976bcc1734d1d6202aa1556"
    },
    "MyPhoneNumber": "sizning telefon raqamingiz",
    "AccountSID": "hisob qaydnomangizning ikkilamchi hisobi",
    "AuthToken": "sizning avtoulovingizni tasdiqlash tokeningiz",
    "SendingPhoneNumber": "sizning telefon raqamingizni yuborayotgan"
}

Ma'lumotlar bazasi bilan aloqa qilish

Keyingi, biz mongocsharpdriver va MongoDB.FSharp ma'lumotlarini PAKET orqali qo'shamiz. Agar buni qanday qilish kerakligiga ishonchingiz komil bo'lmasa, iltimos, oldingi postga qarang, PAKET-dan qanday foydalanish kerakligi va bog'liqliklar muvaffaqiyatli murojaat qilinganligini tekshiring.

Common.fs faylida Db deb nomlangan yangi modulni Xato modulidan oldin yaratamiz, unda bizning ma'lumotlar bazamiz bilan bog'liq barcha funktsiyalar mavjud. Bunga qo'shimcha ravishda, biz ilgari taqqoslash modulida ishlagan JSON faylini deserializatsiyalash / seriya qilish uchun barcha kodlarni chiqarib tashlaymiz.

Qattiq kodlangan yagona tom ma'noda bu ulanish satridir [agar siz ijodiy bo'lishni istasangiz, uni FSharp.Configuration kutubxonasi yordamida konfiguratsiya faylida saqlashingiz mumkin].

Umuman olganda, Db Moduli quyidagicha ko'rinadi:

Mongo + F # CRUD operatsiyalari haqida ko'proq ma'lumotni avvalgi blogpostimda topishingiz mumkin, bu erda. Konfiguratsiya bilan o'zgartirilgan Alert moduli quyidagicha ko'rinadi

Umumlashtirish

Faqatgina pivo ishlab chiqaruvchisiga tegishli kod pivo ishlab chiqaruvchisiga tegishli skriptda va asosiy funktsiyani o'z ichiga olgan faylda yashaydi, bu esa pivo tayyorlash uchun quvur liniyasini o'z ichiga oladi. Biz pivo ishlab chiqaruvchisi nomiga asoslanib Json faylini yaratish uchun Compare modulini o'zgartirishimiz kerak.

O'zgartirilgan BeerwayOrientedProgramming moduli quyidagicha ko'rinadi:

Va taqqoslash modulidagi o'zgartirilgan taqqoslash funktsiyasi quyidagicha ko'rinadi:

Rejalashtiruvchi

Keyingi qadam, pivo ishlab chiqarish quvurlarini taymerda ishga tushirish uchun rejalashtirgichni sozlash. Buning uchun biz PAKET orqali rejalashtirish uchun Quartz.NET-ni yuklab olamiz.

Ushbu "F # parchadan" so'ng, biz barcha pivo zavodlaridan o'tishning rejalashtirilgan jarayonini osongina sozlay olamiz va har 2 sekundda tafsilotlarni tahlil qilamiz.

Bizning pivo sotib olishimiz bilan cheklanmaymiz, ba'zi bazaviy pivo bazuka olish jarayonini amalga oshiramiz.

Doimiy parchalar

Va nihoyat, MongoDb-ning "pivoayderededprogramming" ma'lumotlar bazasiga bizning parchalarni saqlash qobiliyatini qo'shamiz.

Boshqa pivo ishlab chiqaruvchilarini osonlikcha qo'shish uchun bizning jarayonimizni umumlashtirish ruhida biz JSON seriyalashtirish va deserializatsiyalashni faylga va undan chiqargandan so'ng pivo nomi asosida ma'lumotlar to'plamiga nom beramiz.

BeerInfo yozuv turimizni qayta ko'rib chiqish va BsonObjectId turidagi MongoDb identifikatorini Chironga asoslangan statik a'zolarimizni olib tashlaganimizdan so'ng, biz barcha eski JSON seriyalashtirish va deserializatsiya tarkibiy qismlarini yopishtirishni boshlaymiz.

BeerInfo yangi moduli quyidagicha ko'rinadi:

Agar sezsangiz, biz "Beers" turini FSharp ro'yxatidan bittadan "System.Generic" ga o'zgartirdik, C # MongoDb drayveriga F # biri ustiga qurilganiga mos kelish uchun.

Endi Chironga tegishli ma'lumotni olib tashlaymiz, chunki unga boshqa kerak emas. Bu buyruq palletini ochish [Cmd + Shift + P] va fsproj faylini ochgandan so'ng PAKET-ning o'chirish ma'lumotlarini navigatsiya qilish orqali amalga oshiriladi.

Chiron haqida ma'lumot o'chirilgandan so'ng, biz yangi identifikatorlarni yaratishda va oldingi parchalarni olish bilan bog'liq bo'lgan Db modulimizga ikkita usul qo'shamiz.

Agar pivo zavodi nomi bilan to'plamni olishda biron bir istisno bo'lsa, biz uni blokda qayta yaratishga harakat qilamiz.

Biz taqqoslash modulidan parchalarni saqlash qiyinligini Db moduliga olib tashladik, bu erda biz oxirgi parchalarni ushlaymiz. Biz oxirgi skrining nolga teng emasligini tekshiramiz (nosozlikni tekshirish uchun ob'ektga yuborganimizdan so'ng, biz FirstOrDefault ()] dan foydalanamiz.

Bizning yangilangan TiredHandsScraper.scrape funktsiyasi endi quyidagicha bo'ladi:

getBeerNamesFromTiredHands funktsiyasi bilan quyidagicha:

Bundan tashqari, bizning Compare modulimiz sezilarli darajada soddalashtiriladi:

Bizning parchalarni saqlab qolish juda yaxshi, bu bizning TiredHands to'plamidagi hujjatlarimizni tekshirib tasdiqlanishi mumkin:

Xulosa

Biz aniq konfiguratsiyani, umumlashtirishni, jadvalni va davom etishni qo'shib, aniq aniq natijalarga erishdik. Yuqorida ta'kidlab o'tilganidek, ushbu ketma-ketlikning keyingi va oxirgi postlarida ushbu oddiy dasturni to'liq rivojlangan dasturga aylantirish uchun bir nechta sinov va jurnallar mavjud.

Har doimgidek, sizning fikrlaringiz uchun juda minnatdorman!