Window.pipedriveLeadboosterConfig = { القاعدة: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', الإصدار: 2, } ؛(الدالة () { var w = نافذة إذا كان (w.LeadBooster) { console.warn('LeadBooster موجود بالفعل') } وإلا { { w.LeadBooster = { q: [], على: دالة (ن، ح) { { هذا.q.push({ t: 'o'، n: n، n: n، h: h }) }, الزناد: الدالة (n) { هذا.q.push({ t: 't'، n: n: n }) }, } } })() الفلاتر البسيطة في واجهة برمجة تطبيقات القضبان - The Codest
The Codest
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • الصناعات
    • التكنولوجيا المالية والمصرفية
    • E-commerce
    • أدتك
    • التكنولوجيا الصحية
    • التصنيع
    • الخدمات اللوجستية
    • السيارات
    • إنترنت الأشياء
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
السهم الخلفي العودة إلى الوراء
2022-02-23
تطوير البرمجيات

مرشحات بسيطة في Rails API

The Codest

كرزيستوف بوزيفيتش

Software Engineer كبير Software Engineer

هل أنت غاضب في كل مرة ترى فيها متغيرات المثيل المتغيرة في وحدة تحكم القضبان لتصفية البيانات؟ هذه المقالة لك 🙂

الفلاتر

ربما تكون قد رأيت هذا من قبل:

# التطبيق/المتحكمون/API/v1/things_controller.rb

وحدة API
  الوحدة النمطية V1
    صنف ThingsController <المتحكم الأساسي
      تعريف الفهرس
        @الأشياء = الشيء.الكل
        @الأشياء = @things.where(size: params[:size]) إذا كان params[:size]
        @الأشياء = @things.where('name ILIKE ?', "%#{params[:name_contains] }%") إذا كان params[:name_contains]

        جعل json: @things
      النهاية
    النهاية
  النهاية
النهاية

لماذا أعتبرها سيئة الكود? لأنه ببساطة يجعل وحدة التحكم لدينا سمينة.
IMHO يجب أن نستخلص أكبر قدر ممكن من المنطق من وحدات التحكم ونستخدم غرضًا مرتبطًا
الأدوات أو الخدمات. في هذه الحالة سنقوم بتنفيذ مرشح عام سنكون قادرين على
لاستخدامها عبر العديد من وحدات التحكم.

لكن انتظر، دعنا أولاً نحلل الكود الحالي. قد يكون سيئاً ولكنه يعمل
لدينا بعض النطاق الأولي (كل شيء) ومن ثم يتم تقييدها إذا تجاوز المستخدم
ذات الصلة. لكل مرشح نتحقق فعليًا مما إذا تم تمرير المعلمة وإذا كان الأمر كذلك,
نطبق مرشحًا. الأمر الثاني هو أننا لا نحتاج إلى استخدام ivar، يمكننا استخدام
المتغيرات المحلية القديمة العادية.

حسنًا إذًا. ألا يمكننا استخدام كائن خدمة ما لتغيير النطاق الأولي؟
يمكن أن يبدو التنفيذ على هذا النحو:

# التطبيق/المتحكمون/API/v1/things_controller.rb

وحدة API
  الوحدة النمطية V1
    صنف ThingsController <المتحكم الأساسي
      تعريف الفهرس
        النطاق = الشيء.الكل
        أشياء = أشياء::فهرس الفهرس.new.call(نطاق، بارامز)

        تصيير json: الأشياء
      النهاية
    النهاية
  النهاية
النهاية

يبدو أفضل بكثير الآن، ولكن بالطبع علينا تنفيذ الفلتر بعد.
لاحظ أن توقيع الاستدعاء سيكون هو نفسه لجميع الموارد، لذلك يمكننا الحصول على
بعض الفئات العامة لهذه المهمة.

# app/services/generic/index_filter.rb

وحدة عامة
  صنف IndexFilter
    EMPTY_HASH = {}.freeze

    تعريف self.filters.filters
      EMPTY_HASH
    نهاية

    تعريف استدعاء (نطاق، بارامز)
      apply_filters!(self.class.filters.keys, scope, params)
    ينتهي

    خاص

    def apply_filters!(filter_keys, scope, params)
      filter_keys.inject.inject(scope.dup) do |current_scope, filter_key|
        تطبيق_فلتر!(|مفتاح_التصفية، النطاق_الحالي، البارامز)
      النهاية
    النهاية

    ديف apply_filter!(مفتاح_مفتاح التصفية، النطاق، البارامز)
      فلتر = fetch_filter(فلتر_مفتاح التصفية)
      إرجاع النطاق ما لم يكن تطبيق_فلتر؟ (فلتر، بارامز)

      مرشح[:تطبيق].call(نطاق، بارامز)
    إنهاء

    ديف apply_filter?(فلتر، بارامز)
      مرشح [:تطبيق؟].استدعاء(بارامز)
    نهاية

    تعريف fetch_filter(filter_key)
      self.class.filters.fetch(filter_key) { رفع ArgumentError, 'مرشح غير معروف'}
    نهاية
  النهاية
النهاية

هل يبدو الأمر معقداً؟ ليس في الحقيقة - كل السحر يحدث في #P63Tapply_filters!.
نأخذ نسخة مكررة من النطاق الأولي ونطبق كل مرشح عليه.

عندما نطبق النطاق فهذا يعني أننا نغير نسخة مكررة من النطاق الأولي.
ونتوقع أن يتم تنفيذ المرشحات على شكل تجزئة في المرشحات الذاتية الطريقة
لفئة الأطفال لنفعلها

# app/services/things/index_filter.rb

الوحدة النمطية أشياء
  صنف IndexFilter (بارامز) {
          params[:size].is_a؟ (سلسلة)
        },
        تطبيق: ->(نطاق، بارامز) {
          scope.where(size: params[:size])
        }
      ...},
      الاسم_يحتوي_على_فلتر: {
        تطبيق؟: ->(بارامز) {
          params[:name_contains].is_a؟ (سلسلة)
        },
        تطبيق: ->(نطاق، بارامز) {
          scope.where('name ILIKE ?"، "%1T#{params[:name_contains]}%")
        }
      }.freeze
    }.freeze

    تعريف self.filters
      المرشحات
    النهاية
  النهاية
النهاية

هذا كل شيء! لقد كتبنا المزيد من التعليمات البرمجية، ولكن ستبدو المرشحات البسيطة كما هي
طريقة لجميع الموارد. لقد قمنا بتنظيف وحدة التحكم من الرمز المسؤول
من التصفية وتوفير فئة "متخصصة" لهذا الغرض تتبع
اصطلاح واضح.

عرض مطور روبي

اقرأ المزيد:

إيجابيات وسلبيات تطوير برمجيات روبي

السكك الحديدية ووسائل النقل الأخرى

تطوير القضبان باستخدام TMUX و Vim و Fzf + Ripgrep

مقالات ذات صلة

تطوير البرمجيات

إنشاء تطبيقات ويب مستقبلية: رؤى من فريق خبراء The Codest

اكتشف كيف تتفوق شركة The Codest في إنشاء تطبيقات ويب تفاعلية قابلة للتطوير باستخدام أحدث التقنيات، وتقديم تجارب مستخدم سلسة عبر جميع المنصات. اكتشف كيف تقود خبرتنا التحول الرقمي والأعمال التجارية...

ذا كوديست
تطوير البرمجيات

أفضل 10 شركات لتطوير البرمجيات في لاتفيا

تعرّف على أفضل شركات تطوير البرمجيات في لاتفيا وحلولها المبتكرة في أحدث مقالاتنا. اكتشف كيف يمكن لهذه الشركات الرائدة في مجال التكنولوجيا المساعدة في الارتقاء بأعمالك.

thecodest
الحلول المؤسسية وحلول التوسعة

أساسيات تطوير برمجيات جافا: دليل للاستعانة بمصادر خارجية بنجاح

استكشف هذا الدليل الأساسي حول تطوير برمجيات جافا outsourcing بنجاح لتعزيز الكفاءة والوصول إلى الخبرة وتحقيق نجاح المشروع باستخدام The Codest.

thecodest
تطوير البرمجيات

الدليل الشامل للاستعانة بمصادر خارجية في بولندا

إن الطفرة في outsourcing في بولندا مدفوعة بالتقدم الاقتصادي والتعليمي والتكنولوجي، مما يعزز نمو تكنولوجيا المعلومات والمناخ الملائم للأعمال.

ذا كوديست
الحلول المؤسسية وحلول التوسعة

الدليل الكامل لأدوات وتقنيات تدقيق تكنولوجيا المعلومات

تضمن عمليات تدقيق تكنولوجيا المعلومات وجود أنظمة آمنة وفعالة ومتوافقة. تعرف على المزيد حول أهميتها من خلال قراءة المقال كاملاً.

The Codest
ياكوب جاكوب جاكوبوفيتش CTO وشريك مؤسس CTO

اشترك في قاعدة معارفنا وابقَ على اطلاع على آخر المستجدات في قطاع تكنولوجيا المعلومات.

    نبذة عنا

    The Codest - شركة دولية لتطوير البرمجيات لها مراكز تقنية في بولندا.

    المملكة المتحدة - المقر الرئيسي

    • المكتب 303 ب، 182-184 شارع هاي ستريت نورث E6 2JA
      لندن، إنجلترا

    بولندا - مراكز التكنولوجيا المحلية

    • مجمع مكاتب فابريتشنا المكتبي، أليجا
      بوكوجو 18، 31-564 كراكوف
    • سفارة الأدمغة، كونستروكتورسكا
      11, 02-673 02-673 وارسو، بولندا

      The Codest

    • الصفحة الرئيسية
    • نبذة عنا
    • الخدمات
    • دراسات الحالة
    • اعرف كيف
    • الوظائف
    • القاموس

      الخدمات

    • استشاري
    • تطوير البرمجيات
    • تطوير الواجهة الخلفية
    • تطوير الواجهة الأمامية
    • Staff Augmentation
    • مطورو الواجهة الخلفية
    • مهندسو السحابة
    • مهندسو البيانات
    • أخرى
    • مهندسو ضمان الجودة

      الموارد

    • حقائق وأساطير حول التعاون مع شريك خارجي لتطوير البرمجيات
    • من الولايات المتحدة الأمريكية إلى أوروبا: لماذا تقرر الشركات الأمريكية الناشئة الانتقال إلى أوروبا؟
    • مقارنة مراكز تطوير التكنولوجيا في الخارج: تك أوفشور أوروبا (بولندا)، آسيان (الفلبين)، أوراسيا (تركيا)
    • ما هي أهم التحديات التي تواجه CTOs ومديري تكنولوجيا المعلومات؟
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • شروط استخدام الموقع الإلكتروني

    جميع الحقوق محفوظة © 2025 بواسطة The Codest. جميع الحقوق محفوظة.

    arArabic
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek arArabic