2010-09-21 15 views
16

रूबी में कक्षा "बेस" नाम देने के लिए यह सामान्य लगता है। मुझे यकीन नहीं है क्यों, और न ही मैं इसके बारे में कैसा महसूस करता हूं।रूबी "बेस" कक्षा

उदाहरण के लिए, ActiveRecord पर विचार करें। ActiveRecord एक मॉड्यूल है जिसमें Observer और Migration के साथ-साथ Base नामक कक्षाएं शामिल हैं। ActiveRecord कक्षा होने के विपरीत Observer और Migration होने के विरोध में इसका क्या फायदा है?

class ActiveRecord 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

बनाम

module ActiveRecord 

    class Base 
    [...] 
    end 

    class Observer 
    [...] 
    end 

    class Migration 
    [...] 
    end 

end 

उत्तर

23

Base वर्ग को आम तौर बढ़ाया और डेवलपर द्वारा एक ठोस वर्ग में कार्यान्वित किया जा करने का इरादा, एक अमूर्त वर्ग की पहचान के लिए प्रयोग किया जाता है।

उदाहरण के लिए, ActiveRecord::Base रेल परियोजना में किसी भी सक्रिय रिकॉर्ड मॉडल के लिए सार श्रेणी है। एक मॉडल लगता है कि

class User < ActiveRecord::Base 
end 

इसी तरह, Observer अपनी ही Observer::Base परिभाषित करता है और कार्रवाई नियंत्रक ActionController::Base जो, एक रेल परियोजना में, तुरंत ApplicationController::Base द्वारा कार्यान्वित किया जाता परिभाषित करता है।

रूबी अमूर्त कक्षाओं को परिभाषित करने के लिए प्रदान नहीं करता है और भाषा-स्तर का कीवर्ड या वाक्यविन्यास प्रदान नहीं करता है। तकनीकी रूप से बोलते हुए, ActiveRecord::Base यह वास्तविक सार वर्ग नहीं है, लेकिन यह इस पैटर्न के लिए Base का उपयोग करने के लिए एक तरह का सम्मेलन है।

संबंधित मुद्दे