ruby-on-rails - tutorial - ruby معنى




كيفية استخدام المخاوف في القضبان 4 (4)

ينشئ مُنشئ مشروع Rails 4 الافتراضي الآن "مخاوف" الدليل تحت وحدات التحكم والنماذج. لقد وجدت بعض التوضيحات حول كيفية استخدام مخاوف التوجيه ، ولكن لا شيء عن وحدات التحكم أو الطرازات.

أنا متأكد من أن لها علاقة بـ "اتجاه DCI" الحالي في المجتمع وتود أن تجربها.

السؤال هو ، كيف من المفترض أن أستخدم هذه الميزة ، هل هناك اتفاقية حول كيفية تعريف التسلسل الهرمي للتسمية / الطبقة من أجل جعلها تعمل؟ كيف يمكنني تضمين قلق في نموذج أو وحدة تحكم؟


تجدر الإشارة إلى أن استخدام المخاوف يعتبر فكرة سيئة من قبل الكثيرين.

  1. مثل هذا الرجل
  2. و هذه

بعض الأسباب:

  1. هناك بعض السحر المظلمة التي تحدث خلف الكواليس - القلق هو الترقيع include الطريقة ، هناك نظام معالجات التبعية الكامل - طريقة تعقيد أكثر من اللازم لشيء هو نمط Mixin Ruby القديم الجيد التافه.
  2. فصولك ليست جافة. إذا قمت بإختيار 50 طريقة عامة في وحدات مختلفة وقمت بتضمينها ، فلا يزال لدى صفك 50 أسلوبًا عامًا ، ولكنك فقط تخفي تلك الشفرة ، ونوعًا من وضع القمامة في الأدراج.
  3. برنامج Codebase هو في الواقع أصعب في التنقل مع كل هذه المخاوف.
  4. هل أنت متأكد من أن جميع أعضاء فريقك لديهم نفس الفهم لما يجب أن يحل محل القلق؟

المخاوف هي طريقة سهلة لتصوير نفسك في الساق ، كن حذرا معهم.


ساعدني هذا المنشور في فهم المخاوف.

# app/models/trader.rb
class Trader
  include Shared::Schedule
end

# app/models/concerns/shared/schedule.rb
module Shared::Schedule
  extend ActiveSupport::Concern
  ...
end

في المخاوف جعل ملف filename.rb

على سبيل المثال ، أرغب في التطبيق الخاص بي حيث توجد الخاصية المميزة create_by تحديث القيمة هناك بمقدار 1 ، و 0 لـ updated_by

module TestConcern 
  extend ActiveSupport::Concern

  def checkattributes   
    if self.has_attribute?(:created_by)
      self.update_attributes(created_by: 1)
    end
    if self.has_attribute?(:updated_by)
      self.update_attributes(updated_by: 0)
    end
  end

end

بعد ذلك في نموذجك مثل:

class Role < ActiveRecord::Base
  include TestConcern
end

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

على سبيل المثال ، سوف أضع نمطًا معروفًا جيدًا ، وهو النمط القابل للبلغة:

# app/models/product.rb
class Product
  include Taggable

  ...
end

# app/models/concerns/taggable.rb
# notice that the file name has to match the module name 
# (applying Rails conventions for autoloading)
module Taggable
  extend ActiveSupport::Concern

  included do
    has_many :taggings, as: :taggable
    has_many :tags, through: :taggings

    class_attribute :tag_limit
  end

  def tags_string
    tags.map(&:name).join(', ')
  end

  def tags_string=(tag_string)
    tag_names = tag_string.to_s.split(', ')

    tag_names.each do |tag_name|
      tags.build(name: tag_name)
    end
  end

  # methods defined here are going to extend the class, not the instance of it
  module ClassMethods

    def tag_limit(value)
      self.tag_limit_value = value
    end

  end

end

لذلك بعد اتباع نموذج المنتج ، يمكنك إضافة Taggable إلى أي فئة ترغب فيها ومشاركة وظائفها.

هذا هو جيد أوضح من DHH :

في Rails 4 ، سنقوم بدعوة المبرمجين لاستخدام المخاوف المتعلقة بالتطبيقات / النماذج / الاهتمامات والتطبيقات / المتحكمات / الشواغل الافتراضية التي تشكل جزءًا من مسار التحميل تلقائيًا. جنبا إلى جنب مع المجمع ActiveSupport :: قلق ، انها مجرد دعم كاف لجعل هذه الآلية العائمة خفيفة الوزن تألق.





dci