php मुझे सामान्य उद्देश्य प्रोग्रामिंग लाइब्रेरी की निर्देशिका संरचना को कैसे व्यवस्थित करना चाहिए?



पुस्तकालय पर निबंध इन हिंदी (6)

मैं थोड़ी देर के लिए अपनी खुद की सामान्य उद्देश्य PHP लाइब्रेरी लिख रहा हूं और मैं निर्देशिका संरचना को व्यवस्थित करने के बारे में सोच रहा हूं, लेकिन पुस्तकालय के लिए निर्देशिका संरचना को औपचारिक बनाने से पहले मैं लोगों के विचारों को प्राप्त करना चाहता था।

यहां तक ​​कि मेरे पास अभी तक है: https://github.com/homer6/altumo/tree/master/source/php

मैं सोच रहा था कि मैं इसे "विषय से" या "श्रेणी के अनुसार" कर सकता हूं। अब तक, मैं केवल एक उदाहरण के बारे में सोच सकता हूं कि मुझे "श्रेणी के अनुसार" पसंद है: बूस्ट http://www.boost.org/doc/libs/1_46_1/?view=categorized

इसके अलावा, मॉड्यूल द्वारा क्यूटी का आयोजन किया जाता है, लेकिन मुझे लगता है कि यह थोड़ा गन्दा है क्योंकि सबकुछ क्यूटीकोर में भरा हुआ है http://qt-project.org/doc/qt-5/qtmodules.html

कोई विचार?

अग्रिम में धन्यवाद।

अद्यतन: मुझे एक बहुत अच्छी किताब मिली जिसने मुझे अनुसरण करने के लिए कई महान पुस्तकालय डिजाइन सम्मेलनों को दिखाया है: http://www.apibook.com/blog/

अद्यतन: मुझे एक दिलचस्प लेख मिला जो कोड के संगठन का उल्लेख करता है ( http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html )। नीचे, यह कहता है: "आपका कोड पेड़ कैसा दिख रहा है? वह चाहता है कि ये शब्द इसका वर्णन करें: सरल, व्यावहारिक, सुरुचिपूर्ण, ऑर्थोगोनल, संगत। यह एक आदर्श है, वास्तविकता थोड़ा अलग है।"


Answer #1

चूंकि यह बहुमुखी उद्देश्य पुस्तकालय बहुमुखी समस्याओं को हल करने या सामान्य सुविधाओं के लिए इंटरफेस प्रदान करने के लिए समर्पित है, इसलिए डेटाटाइप / प्रौद्योगिकी / भाषा / प्रोटोकॉल इत्यादि जैसे subject आधार पर संरचना करना बेहतर है:

+ Http
  - request
  - response
  + util
    - status_codes
+ Html
  - Validator
  + Form
    - UploadFile
  + Tag
+ JavaScript
  - JSON
+ Ajax
+ XML
  - Reader
  - Writer
  - Parser
+ DataType
  - Array
  - Integer
  - String
  - Double
  - Float
  + util
    - datatypes_cast_lib

शीर्ष पर हमारे पास है:

  • Http.request जो प्रोटोकॉल है, इसलिए आपका Http.request अनुरोध अनुरोध करने के लिए एक इंटरफ़ेस होगा
  • एचटीएमएल जो मार्कअप भाषा है, इसलिए Html.Form.UploadFile डेवलपर को अपलोड फ़ाइल फॉर्म बनाने के लिए सुविधाओं के साथ प्रदान करेगा
  • जावास्क्रिप्ट जो प्रोग्रामिंग भाषा है, इसलिए आपका जावास्क्रिप्ट.जेसन जेएसओएन से एरेज़ में रूपांतरणों की समस्याओं को हल करेगा
  • अजाक्स जो तकनीक है
  • एक्सएमएल जो मार्कअप भाषा है
  • डेटाटाइप जो ... अच्छी तरह से, डेटा प्रकार है।

ध्यान दें, कि status_codes रहते हैं। प्रत्येक उप-लाइब्रेरी में अपनी खुद की उपयोग सुविधाएं हो सकती हैं जैसे DataType lib को डेटाटाइप के साथ जुगले करने के बारे में जानने के लिए datatype_cast_lib की आवश्यकता हो सकती है।

लाइब्रेरी संगठन का यह तरीका ज्यादातर पीईसीएल के संगठन जैसा दिखता है

अच्छा सवाल, बीटीडब्ल्यू! मैंने खुद से एक ही सवाल पूछा। मैं वर्षों से अपनी निर्देशिका संरचना का आयोजन और पुनर्गठन कर रहा हूं। यह वास्तव में परियोजना पर निर्भर करता है। मैंने https://github.com/homer6/altumo/tree/master/source/php प्रदान की गई संरचना के अनुरूप संरचना को अनुकूलित किया https://github.com/homer6/altumo/tree/master/source/php


Answer #2

मैं सुझाव दूंगा कि आप देखेंगे कि दो हालिया PHP 5.3 ढांचे, सिम्फनी 2 और लिथियम में चीजें कैसे व्यवस्थित की जाती हैं।

मानक पीएचपी 5.3 नामकरण सम्मेलनों को परिभाषित करने में उनके पीछे मूल देवताओं (अन्य प्रमुख ढांचे के डेवलपर्स और पीएचपी हस्तियों के साथ) सक्रिय थे ताकि उनके संबंधित घटक एक दूसरे के साथ खेल सकें, ज़ेंड और अन्य पुस्तकालयों / ढांचे जो समान सम्मेलनों का पालन कर सकते हैं:

http://groups.google.com/group/php-standards/web/php-coding-standard

दोनों मामलों में, बंडल / पुस्तकालय प्रथम श्रेणी के नागरिक हैं, और दोनों उन्हें व्यवस्थित करने के लिए समान पैटर्न का पालन करते हैं।

लिथियम कोर, विशेष रूप से, एक पुस्तकालय अपने अधिकार में है। यह इस तरह व्यवस्थित है:

$ ls
LICENSE.txt analysis    core        g11n        security    template    tests
action      console     data        net         storage     test        util

(मुझे सिम्फनी 2 थोड़ा सा गड़बड़ / कम अनुमानित लगता है, लेकिन यह सिर्फ मेरी राय है।)


Answer #3

कृपया PSR-0 संगत हो, जो भी संरचना आप उपयोग करने जा रहे हैं।

मैं व्यक्तिगत रूप से PEAR2 निर्देशिका संरचना का उपयोग करने का सुझाव देता हूं


Answer #4

मैं कहूंगा कि शुरू करने के लिए एक अच्छी जगह यह है कि अन्य ढांचे और / या पुस्तकालय इसे कैसे कर रहे हैं।

व्यक्तिगत रूप से मुझे ज़ेंड फ्रेमवर्क का आयोजन किया जाता है, जिसमें काफी विस्तृत नामस्थान होता है, जिसमें ज़ेंड निर्देशिका में सभी प्रमुख घटक होते हैं। ज़ेंड एमवीसी प्रोजेक्ट स्ट्रक्चर का उपयोग करते समय, आपको एक अतिरिक्त ऑटोलोडर अनुवाद करने के लिए _ से / सभी वर्गों का नाम ज़ेंड_फॉर्म नाम दिया जाता है और ज़ेंड निर्देशिका के अंदर Form.php नामक फ़ाइल में डाल दिया जाता है, ताकि जब new Zend_Form ज़ेंड_फॉर्म को कॉल किया जाए - तो ऑटोलोडर Zend/Form.php केवल 'मुख्य' वर्ग सीधे ज़ेंड फ़ोल्डर के अंदर है, किसी भी अतिरिक्त श्रेणी की फाइलें, जैसे अपवाद और सार को Zend/Form फ़ोल्डर के अंदर रखा जाता है, और नाम के नामनाम जैसे Zend_Form_Exception - जिसके कारण ऑटोलोडर Zend/Form/Exception.php

एक और बिंदु, बैकएंड तर्क को किसी भी public_html फ़ोल्डर से दूर रखना है। ईजी - केवल उन फ़ाइलों को जो उपयोगकर्ताओं के लिए सीधे पहुंच योग्य होना चाहिए (जावास्क्रिप्ट, सीएसएस, और आपके loader.php + .htaccess) में होना चाहिए। फिर loader.php में आवश्यक फ़ाइलों को शामिल करें, आमतौर पर एक निर्देशिका स्तर ऊपर।

बाहरी पुस्तकालयों को आमतौर पर इस प्रकार माना जाता है, और इन कोडों के लिए बाहरी लेखक जिम्मेदार हैं यह इंगित करने के लिए शेष कोड से / lib, / पुस्तकालय और / या विक्रेता फ़ोल्डर में अलग-अलग कोड से अलग होते हैं।


Answer #5

सबसे पहले, चयनित संरचना एक समझौता निर्णय है , जिसका मतलब है कि आपको अपने उद्देश्य के आधार पर दूसरों पर कुछ पहलुओं को सौदा करना और प्राथमिकता देना होगा। कुछ समूहीकरण मानदंड हैं जिनका आप अनुसरण कर सकते हैं, जैसे कि:

  • कार्यात्मक संयोजन , मुझे लगता है कि आपके डिजाइन में सबसे मजबूत होना चाहिए। समान या समान कार्यक्षमता वाले वर्ग / फ़ाइलें / संसाधन एक साथ होना चाहिए
  • घटक पदानुक्रम , आपके द्वारा चुने गए ग्रैन्युलरिटी स्तर के आधार पर, इसका मतलब है कि यदि आप बढ़िया अनाज बनाम अच्छे अनाज वाले घटक पसंद करते हैं, तो आपके पास एक फ़ोल्डर में कम या ज्यादा फ़ाइलें / संसाधन होंगे। इसे फ़ोल्डर पदानुक्रम और घोंसले का उपयोग करके नियंत्रित किया जा सकता है।
  • बदलें , कुछ फ़ाइलों को दूसरों की तुलना में बदलने की अधिक संभावना है, आपको संशोधित होने की संभावना के आधार पर फ़ोल्डर पदानुक्रम प्रदान करने के लिए इसे ध्यान में रखना होगा।
  • विस्तारशीलता , एक ढांचे के लिए लगभग किसी भी परिदृश्य के लिए उपयोगी और अनुकूलनीय होने के लिए आपको घटकों और कार्यों को विस्तारित करने की संभावना प्रदान करना है। एक्सटेंशन (उर्फ प्लगइन्स) के लिए एक फ़ोल्डर जोड़ना एक अच्छा विचार है।

आपके पास बहुत सारे मानदंडों का उपयोग करना चाहिए, लेकिन हमेशा केआईएसएस सिद्धांत को ध्यान में रखें। आप यूनिफाइड सॉफ्टवेयर डेवलपमेंट प्रोसेस (इवर जैकबसन एट अल।) जैसी किताबों में पैकेज प्रबंधन की खोज कर सकते हैं, मुझे आशा है कि यह सहायक हो सकता है।


Answer #6
<project name>/
    application/
        configs/
            application.ini
        controllers/
            helpers/
        forms/
        layouts/
            filters/
            helpers/
            scripts/
        models/
        modules/
        services/
        views/
            filters/
            helpers/
            scripts/
        Bootstrap.php
    data/
        cache/
        indexes/
        locales/
        logs/
        sessions/
        uploads/
    docs/
    library/
    public/
        css/
        images/
        js/
        .htaccess
        index.php
    scripts/
        jobs/
        build/
    temp/
    tests/

स्रोत: http://framework.zend.com/manual/en/project-structure.project.html





organization