JQuery / জাভাস্ক্রিপ্ট কোড (2013) সংগঠিত করার সেরা উপায় [বন্ধ]


104

সমস্যাটি

এই উত্তরটির আগে উত্তর দেওয়া হয়েছে তবে পুরানো এবং আপ টু ডেট নয়। আমার একটি একক ফাইলে কোডের 2000 লাইনেরও বেশি রয়েছে এবং আমরা সবাই জানি যে এটি একটি খারাপ অভ্যাস, বিশেষত যখন আমি কোডটি দেখছি বা নতুন বৈশিষ্ট্য যুক্ত করছি। আমি এখনই এবং ভবিষ্যতের জন্য আমার কোডটি আরও সুসংহত করতে চাই।

আমার উল্লেখ করা উচিত যে আমি প্রচুর বোতাম, ইউআই উপাদানগুলি, টানা, ড্রপস, অ্যাকশন শ্রোতা / হ্যান্ডলারগুলি এবং একাধিক শ্রোতা একই ফাংশনটি ব্যবহার করতে পারে যেখানে বিশ্বব্যাপী ফাংশন সহ একটি সরঞ্জাম (একটি সাধারণ ওয়েবসাইট নয়) তৈরি করছি।

উদাহরণ কোড

$('#button1').on('click', function(e){
    // Determined action.
    update_html();
});

... // Around 75 more of this

function update_html(){ .... }

...

আরও উদাহরণ কোড

উপসংহার

আমার নিজের পুনরাবৃত্তি না করতে এবং নতুন বৈশিষ্ট্য যুক্ত করতে এবং পুরাতনগুলি আপডেট করতে সক্ষম না হয়ে সর্বোত্তম ব্যবহারের জন্য সত্যই এই কোডটি সংগঠিত করা দরকার। আমি নিজেই এ নিয়ে কাজ করব। কিছু নির্বাচকরা কোড অন্যদের 100 লাইন 1. আমি একটি বিট তাকিয়ে আছে করা সম্ভব require.jsএবং এটি ধরণ পুনরাবৃত্তিমূলক পাওয়া যায় নি, এবং আসলে আরো কোড প্রয়োজন চেয়ে লেখা। আমি যে কোনও সম্ভাব্য সমাধানের জন্য উন্মুক্ত যা এই মানদণ্ডের সাথে খাপ খায় এবং সংস্থানসমূহ / উদাহরণগুলির লিঙ্ক সর্বদা একটি প্লাস।

ধন্যবাদ।


আপনি যদি backbone.js এবং প্রয়োজনীয়.js যুক্ত করতে চান তবে এটি অনেক কাজ হবে।
জানতিমন

1
এটি লেখার সময় আপনি নিজেকে কোন কাজটি বার বার করতে দেখছেন?
মাইক স্যামুয়েল


4
কৌণিক শিখুন! এটা ভবিষ্যত।
ওনুর ইল্ডারিয়াম

2
আপনার কোডটি কোনও বাহ্যিক লিঙ্কে থাকা উচিত নয়, এটি এখানে হওয়া উচিত। এছাড়াও, @ কোডেরভিউ তেহসের ধরণের প্রশ্নের জন্য আরও ভাল জায়গা।
জর্জ স্টকার

উত্তর:


98

আমি এমন কিছু সাধারণ জিনিস নিয়ে যাব যা আপনাকে সহায়তা করতে পারে বা নাও পারে। কিছু সুস্পষ্ট হতে পারে, কিছু চূড়ান্ত arcane হতে পারে।

পদক্ষেপ 1: আপনার কোডটি বিভাগীয় করুন

আপনার কোডকে একাধিক, মডিউলার ইউনিটগুলিতে পৃথক করা একটি খুব ভাল প্রথম পদক্ষেপ। "একসাথে" কী কাজ করে তা গোটা করুন এবং তাদের নিজস্ব সামান্য এনসেডড ইউনিটে রাখুন। আপাতত ফর্ম্যাটটি নিয়ে চিন্তা করবেন না, এটিকে ইনলাইন রাখুন। কাঠামোটি পরবর্তী পয়েন্ট।

সুতরাং, ধরুন আপনার মতো একটি পৃষ্ঠা রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

বগিটি করা বোধগম্য হবে যাতে রক্ষণাবেক্ষণের স্বাচ্ছন্দ্যের জন্য (এবং 1000 লাইনের মধ্য দিয়ে চলাচল না করার জন্য) সমস্ত শিরোনাম সম্পর্কিত ইভেন্ট হ্যান্ডলার / বাইন্ডার সেখানে থাকে।

এরপরে গ্রুন্টের মতো কোনও সরঞ্জাম ব্যবহার করতে পারেন আপনার জেএসটিকে পুনরায় একক ইউনিটে তৈরি করতে।

পদক্ষেপ 1 ক: নির্ভরতা ব্যবস্থাপনা

এএমডি নামক কিছু বাস্তবায়নের জন্য প্রয়োজনীয় জেএস বা কমনজেএস এর মতো একটি লাইব্রেরি ব্যবহার করুন । অ্যাসিঙ্ক্রোনাস মডিউল লোডিং আপনাকে আপনার কোডটি কীসের উপর নির্ভর করে তা স্পষ্ট করে জানাতে দেয় যা এরপরে আপনাকে কোডটিতে লাইব্রেরি-কলিং অফলোড করতে দেয়। আপনি কেবল আক্ষরিকভাবে বলতে পারেন "এটির jQuery প্রয়োজন" এবং এএমডি এটি লোড করবে এবং jQuery উপলভ্য হলে আপনার কোডটি কার্যকর করবে ।

এটিতে একটি লুকানো রত্নও রয়েছে: লাইব্রেরি লোডিংটি দ্বিতীয়টি ডোম প্রস্তুতের পরে সম্পন্ন হবে, আগে নয়। এটি আর আপনার পৃষ্ঠার লোড-আপকে থামায় না!

পদক্ষেপ 2: মডুলারাইজ করুন

তারের ফ্রেমটি দেখুন? আমার দুটি বিজ্ঞাপন ইউনিট রয়েছে। তারা সম্ভবত ইভেন্ট শ্রোতাদের ভাগ করে নেবে।

এই পদক্ষেপে আপনার কাজটি হ'ল আপনার কোডে পুনরাবৃত্তির পয়েন্টগুলি চিহ্নিত করা এবং মডিউলগুলিতে এই সমস্ত সংশ্লেষ করার চেষ্টা করা । মডিউল, এই মুহূর্তে, সবকিছুকে ঘিরে রাখবে। আমরা পাশাপাশি যেতে স্টাফ বিভক্ত করব।

এই পদক্ষেপের পুরো ধারণাটি হ'ল ধাপ 1 থেকে যান এবং সমস্ত অনুলিপি-পাস্তা মুছুন, তাদেরকে ইউনিটগুলির সাথে প্রতিস্থাপন করতে হবে যা আলগাভাবে মিলিত হয়। সুতরাং, পরিবর্তে থাকার:

ad_unit1.js

 $("#au1").click(function() { ... });

ad_unit2.js

 $("#au2").click(function() { ... });

আমি পাবো:

ad_unit.js:

 var AdUnit = function(elem) {
     this.element = elem || new jQuery();
 }
 AdUnit.prototype.bindEvents = function() {
     ... Events go here
 }

page.js:

 var AUs = new AdUnit($("#au1,#au2"));
 AUs.bindEvents();

যা আপনাকে পুনরাবৃত্তি থেকে মুক্তি পাওয়ার পাশাপাশি আপনার ইভেন্টগুলি এবং আপনার মার্কআপের মধ্যে ভাগ করতে দেয়। এটি একটি সুন্দর শালীন পদক্ষেপ এবং আমরা এটি আরও পরে প্রসারিত করব।

পদক্ষেপ 3: একটি কাঠামো বাছুন!

যদি আপনি আরও পুনরাবৃত্তিগুলি আধুনিকীকরণ এবং হ্রাস করতে চান তবে এমভিসি (মডেল - দেখুন - নিয়ামক) পদ্ধতির বাস্তবায়ন করে এমন চারপাশে দুর্দান্ত কিছু ফ্রেমওয়ার্ক রয়েছে। আমার প্রিয় ব্যাকবোন / মেরুদণ্ড, তবে, কৌণিক, ইআইআই, এছাড়াও রয়েছে ... তালিকাটি চলছে।

একটি মডেল আপনার ডেটা উপস্থাপন করে।

একটি ভিউ আপনার মার্ক আপ এবং এর সাথে সম্পর্কিত সমস্ত ইভেন্টের প্রতিনিধিত্ব করে

একটি কন্ট্রোলার আপনার ব্যবসায়ের যুক্তি উপস্থাপন করে - অন্য কথায়, নিয়ামক পৃষ্ঠাটি কী লোড করতে হবে এবং কোন মডেলগুলি ব্যবহার করতে হবে তা জানিয়ে দেয়।

এটি একটি তাৎপর্যপূর্ণ শিক্ষণীয় পদক্ষেপ হবে তবে পুরষ্কারটি মূল্যবান: এটি স্প্যাগেটির চেয়ে পরিষ্কার, মডুলার কোডের পক্ষে।

আপনি করতে পারেন এমন প্রচুর অন্যান্য জিনিস রয়েছে, সেগুলি কেবল গাইডলাইন এবং ধারণা।

কোড-নির্দিষ্ট পরিবর্তন

আপনার কোডে কিছু নির্দিষ্ট উন্নতি এখানে রয়েছে:

 $('.new_layer').click(function(){

    dialog("Create new layer","Enter your layer name","_input", {

            'OK' : function(){

                    var reply = $('.dialog_input').val();

                    if( reply != null && reply != "" ){

                            var name = "ln_"+reply.split(' ').join('_');
                            var parent = "";

                            if(selected_folder != "" ){
                            parent = selected_folder+" .content";
                            }

                            $R.find(".layer").clone()
                            .addClass(name).html(reply)
                            .appendTo("#layer_groups "+parent);

                            $R.find(".layers_group").clone()
                            .addClass(name).appendTo('#canvas '+selected_folder);

            }

        }

    });
 });

এটি আরও ভালভাবে লিখেছেন:

$("body").on("click",".new_layer", function() {
    dialog("Create new layer", "Enter your layer name", "_input", {
         OK: function() {
             // There must be a way to get the input from here using this, if it is a standard library. If you wrote your own, make the value retrievable using something other than a class selector (horrible performance + scoping +multiple instance issues)

             // This is where the view comes into play. Instead of cloning, bind the rendering into a JS prototype, and instantiate it. It means that you only have to modify stuff in one place, you don't risk cloning events with it, and you can test your Layer stand-alone
             var newLayer = new Layer();
             newLayer
               .setName(name)
               .bindToGroup(parent);
          }
     });
});

আপনার কোডের আগে:

window.Layer = function() {
    this.instance = $("<div>");
    // Markup generated here
};
window.Layer.prototype = {
   setName: function(newName) {
   },
   bindToGroup: function(parentNode) {
   }
}

হঠাৎ করে, আপনার অনুলিপি পেস্ট না করে আপনার কোডের যে কোনও জায়গা থেকে একটি স্ট্যান্ডার্ড স্তর তৈরি করার উপায় রয়েছে। আপনি পাঁচটি ভিন্ন জায়গায় এটি করছেন। আমি সবেমাত্র আপনার পাঁচটি অনুলিপি-পেস্ট সংরক্ষণ করেছি।

আরো একটা:

// কর্মের জন্য নিয়ম মোড়ক

var PageElements = function(ruleSet) {
ruleSet = ruleSet || [];
this.rules = [];
for (var i = 0; i < ruleSet.length; i++) {
    if (ruleSet[i].target && ruleSet[i].action) {
        this.rules.push(ruleSet[i]);
    }
}
}
PageElements.prototype.run = function(elem) {
for (var i = 0; i < this.rules.length; i++) {
    this.rules[i].action.apply(elem.find(this.rules.target));
}
}

var GlobalRules = new PageElements([
{
    "target": ".draggable",
    "action": function() { this.draggable({
        cancel: "div#scrolling, .content",
        containment: "document"
        });
    }
},
{
    "target" :".resizable",
    "action": function() {
        this.resizable({
            handles: "all",
            zIndex: 0,
            containment: "document"
        });
    }
}

]);

GlobalRules.run($("body"));

// If you need to add elements later on, you can just call GlobalRules.run(yourNewElement);

নিয়মগুলি নিবন্ধভুক্ত করার এটি একটি খুব শক্তিশালী উপায় যদি আপনার যদি মানক না হয় বা তৈরির ইভেন্ট হয় না। এটি যখন পব / সাব নোটিফিকেশন সিস্টেমের সাথে একত্রিত হয় এবং যখনই আপনি উপাদান তৈরি করেন তখন আপনি গুলি চালানোর সময় আবদ্ধ হয়েও গুরুতরভাবে কিক-অ্যাস হয়। ফায়ার'অনফরজেট মডিউলারের ইভেন্ট বন্ধন!


2
@ জেসিকা: একটি অনলাইন সরঞ্জামের আলাদা হওয়া উচিত কেন? পন্থাটি এখনও একই comp একটি কাঠামো ব্যবহার করে উপাদানগুলির মধ্যে looseিলে .ালা মিশ্রণের প্রচার করুন (আধুনিকীকরণের দিন তারা সকলেই আসছেন), আপনার কোডকে আলাদা করুন। এমন কি আছে যা আপনার সরঞ্জামটিতে প্রয়োগ হয় না ? আপনার কাছে প্রচুর পরিমাণে বোতাম আছে?
সাবস্টিয়ান রেনেউল্ড 26'13

2
@ জেসিকা: আপডেট হয়েছে। আমি এটির অনুরূপ ধারণাটি ব্যবহার করে স্তরগুলি সৃজনশীল এবং প্রবাহিত করেছি View। So. এটি কীভাবে আপনার কোডে প্রযোজ্য নয়?
সাবস্টিয়ান রেনেউল্ড 26'13

10
@ জেসিকা: অপ্টিমাইজ না করে ফাইলগুলিতে বিভক্ত হওয়া জাঙ্ক সংরক্ষণের জন্য আরও বেশি ড্রয়ার কেনার মতো। একদিন, আপনি সাফ হয়ে গেলেন এবং ড্রয়ারগুলি পূরণের আগে পরিষ্কার করা সহজ। দুজনে কেন হয় না? ঠিক এখন, তোমার মত দেখতে একটি চাইবেন layers.js, sidebar.js, global_events.js, resources.js, files.js, dialog.jsআপনি শুধু আপনার কোড আপ বিভক্ত করতে যাচ্ছেন পারেন। gruntএগুলিকে একটিতে পুনর্নির্মাণ করতে এবং Google Closure Compilerসংকলন ও হ্রাস করতে ব্যবহার করুন ।
সাবস্টিয়ান রেনেউল্ড 26'13

3
প্রয়োজনীয়.js ব্যবহার করার সময় আপনাকে অবশ্যই r.js অপ্টিমাইজারটি অবশ্যই দেখতে হবে, এটি হ'ল প্রয়োজনীয় j এটি আপনার সমস্ত ফাইল একত্রিত করে এবং অনুকূলিত করবে: প্রয়োজনীয় js.org/docs/optimization.html
উইলেম ডি'হ্যাসিলার

2
@ সাবাসটিয়েন রেনাল্ড আপনার উত্তর এবং মন্তব্যগুলি এখনও অন্য ব্যবহারকারীদের দ্বারা খুব প্রশংসা করা হয়েছে। যদি এটি আপনাকে আরও ভাল বোধ করতে পারে;)
অ্যাড্রিয়েন

13

প্রয়োজনীয়.js ব্যবহার করে আপনার বর্তমান কোডবেসটিকে একাধিক ফাইলে বিভক্ত করার একটি সহজ উপায়। আমি আপনাকে দেখাব যে কীভাবে আপনার কোডটিকে দুটি ফাইলে বিভক্ত করবেন। এর পরে আরও ফাইল যুক্ত করা সহজ হবে।

পদক্ষেপ 1) আপনার কোডের শীর্ষে একটি অ্যাপ্লিকেশন অবজেক্ট তৈরি করুন (বা আপনি যে নামটি পছন্দ করেন মাইগেমের মতো):

var App = {}

পদক্ষেপ 2) আপনার সমস্ত শীর্ষ-স্তরের ভেরিয়েবল এবং ফাংশন অ্যাপ অবজেক্টের সাথে সম্পর্কিত রূপান্তর করুন।

পরিবর্তে:

var selected_layer = "";

তুমি চাও:

App.selected_layer = "";

পরিবর্তে:

function getModified(){
...
}

তুমি চাও:

App.getModified = function() {

}

নোট করুন যে এই মুহুর্তে আপনার কোডটি পরবর্তী পদক্ষেপটি শেষ না করা পর্যন্ত কাজ করবে না

পদক্ষেপ 3) অ্যাপ্লিকেশন মাধ্যমে যেতে সমস্ত গ্লোবাল ভেরিয়েবল এবং ফাংশন রেফারেন্স রূপান্তর করুন।

জিনিসগুলি পরিবর্তন করুন:

selected_layer = "."+classes[1];

প্রতি:

App.selected_layer = "."+classes[1];

এবং:

getModified()

প্রতি:

App.GetModified()

পদক্ষেপ 4) এই পর্যায়ে আপনার কোডটি পরীক্ষা করুন - এটি সমস্ত কাজ করা উচিত। আপনি প্রথমে কিছু ত্রুটি পাবেন কারণ আপনি কিছু মিস করেছেন, তাই এগিয়ে যাওয়ার আগে সেগুলি ঠিক করুন।

পদক্ষেপ 5) প্রয়োজনীয়তা সেট আপ করুন। আমি ধরে নিলাম আপনার একটি ওয়েব পৃষ্ঠা রয়েছে, একটি ওয়েব সার্ভার থেকে পরিবেশন করা হয়েছে, যার কোডটি এতে রয়েছে:

www/page.html

এবং jquery মধ্যে

www/js/jquery.js

যদি এই পাথগুলি ঠিক এর মতো না হয় তবে নীচেরগুলি কাজ করবে না এবং আপনাকে পাথগুলি সংশোধন করতে হবে।

প্রয়োজনীয় ডিরেক্টরিগুলি ডাউনলোড করুন এবং আপনার www/jsডিরেক্টরিতে প্রয়োজনীয়. js রাখুন

আপনার মধ্যে page.html, সমস্ত স্ক্রিপ্ট ট্যাগ মুছুন এবং একটি স্ক্রিপ্ট ট্যাগ সন্নিবেশ করুন:

<script data-main="js/main" src="js/require.js"></script>

www/js/main.jsসামগ্রী সহ তৈরি করুন :

require.config({
 "shim": {
   'jquery': { exports: '$' }
 }
})

require(['jquery', 'app']);

তারপরে আপনার সবেমাত্র নির্ধারিত সমস্ত কোডটি 1-3 টি পদক্ষেপে রাখুন (যার একমাত্র বৈশ্বিক পরিবর্তনশীল অ্যাপটি হওয়া উচিত):

www/js/app.js

এই ফাইলের একেবারে শীর্ষে, রাখুন:

require(['jquery'], function($) {

নীচে রাখুন:

})

তারপরে আপনার ব্রাউজারে page.html লোড করুন। আপনার অ্যাপ্লিকেশন কাজ করা উচিত!

পদক্ষেপ)) অন্য একটি ফাইল তৈরি করুন

এখানে আপনার কাজের অর্থ প্রদান করা হয়, আপনি বারবার এটি করতে পারেন।

www/js/app.jsসেই উল্লেখগুলি এবং অ্যাপ্লিকেশন থেকে কিছু কোড টানুন ।

যেমন

$('a').click(function() { App.foo() }

ভিতরে রাখো www/js/foo.js

এই ফাইলের একেবারে শীর্ষে, রাখুন:

require(['jquery', 'app'], function($, App) {

নীচে রাখুন:

})

তারপরে www / js / main.js এর শেষ লাইনটি এতে পরিবর্তন করুন:

require(['jquery', 'app', 'foo']);

এটাই! আপনি যখন কোডটি নিজের ফাইলটিতে রাখতে চান তখনই এটি করুন!


এটিতে একাধিক সমস্যা রয়েছে - স্পষ্টতই এটি হ'ল আপনি নিজের ফাইলগুলি শেষ পর্যন্ত টুকরো টুকরো করছেন এবং প্রিপ্রসেসর ব্যবহার না করে প্রতি পৃষ্ঠায় প্রতিটি স্ক্রিপ্ট প্রতি ব্যবহারকারীকে 400 বাইট নষ্ট ডেটা চাপিয়ে দিচ্ছেনr.js । তদ্ব্যতীত, আপনি আসলে ওপি'র ইস্যুটি সম্বোধন করেননি - কেবল একটি জেনেরিক উপায় প্রদান করেছেন require.js
সাবস্টিয়ান রেনেউল্ড

7
তাই না? আমার উত্তর এই প্রশ্নের সাথে নির্দিষ্ট। এবং r.js স্পষ্টতই পরবর্তী পদক্ষেপ তবে এখানে সমস্যাটি সাংগঠনিক, অপটিমাইজেশন নয়।
লিন হেডলি

আমি এই উত্তরটি পছন্দ করি, আমি কখনও প্রয়োজন.জেএস ব্যবহার করি নি তাই আমি এটি ব্যবহার করতে পারি এবং এটি থেকে কোনও সুবিধা পেতে পারি কিনা তা আমাকে দেখতে হবে। আমি বাইরে মডিউল প্যাটার্ন প্রচন্ডভাবে কিছু জিনিস ব্যবহার করতে পারে তবে সম্ভবত এই আমাকে বিমূর্ত অনুমতি দেবে এবং তারপর তাদের প্রয়োজন।
টনি

1
@ সাবাসতিয়েন রেনাওল্ড: এই উত্তরটি কেবল প্রয়োজন.জেএস সম্পর্কে নয় s এটি বেশিরভাগ ক্ষেত্রেই আপনি যে কোডটি তৈরি করছেন তার নাম স্থান থাকার কথা বলে। আমি মনে করি আপনার ভাল অংশগুলির প্রশংসা করা উচিত এবং এটির সাথে কোনও সমস্যা খুঁজে পাওয়া আপনার সম্পাদনা করা উচিত। :)
মিঠুনসথেশ

10

আপনার প্রশ্ন এবং মন্তব্যের জন্য আমি ধরে নেব আপনি ব্যাকবোন এর মতো কাঠামোয় আপনার কোডটি পোর্ট করতে ইচ্ছুক নন, বা প্রয়োজনের মতো কোনও লোডার লাইব্রেরি ব্যবহার করবেন না। আপনার সহজলভ্যতম পদ্ধতিতে আপনার ইতিমধ্যে থাকা কোডটি orgainze করার আরও ভাল উপায় চান।

আমি বুঝতে পারি যে আপনি যে বিভাগে কাজ করতে চান সেটি সন্ধান করতে 2000+ কোডের লাইন দিয়ে স্ক্রোল করা বিরক্তিকর। সমাধানটি হ'ল আপনার কোডটি বিভিন্ন ফাইলে বিভক্ত করা, প্রতিটি কার্যকারিতার জন্য একটি। উদাহরণস্বরূপ sidebar.js, canvas.jsইত্যাদি। তারপরে আপনি গ্রান্ট ব্যবহার করে তাদের সাথে একসাথে যোগদান করতে পারেন, ইউজমিনের সাথে একসাথে আপনার এই জাতীয় কিছু থাকতে পারে:

আপনার এইচটিএমএলে:

<!-- build:js scripts/app.js -->
<script src="scripts/sidebar.js"></script>
<script src="scripts/canvas.js"></script>
<!-- endbuild -->

আপনার গ্রান্টফাইলে:

useminPrepare: {
  html: 'app/index.html',
  options: {
    dest: 'dist'
  }
},
usemin: {
  html: ['dist/{,*/}*.html'],
  css: ['dist/styles/{,*/}*.css'],
  options: {
    dirs: ['dist']
  }
}

আপনি যদি ইওমান ব্যবহার করতে চান তবে এটি আপনাকে এই সমস্ত কিছুর জন্য একটি বয়লারপ্লেট কোড দেবে।

তারপরে প্রতিটি ফাইলের জন্য, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি সেরা অনুশীলনগুলি অনুসরণ করছেন এবং সমস্ত কোড এবং ভেরিয়েবলগুলি সেই ফাইলে রয়েছে এবং অন্য ফাইলগুলির উপর নির্ভর করে না। এর অর্থ এই নয় যে আপনি অন্য কোনও ফাইলের ফাংশনগুলি কল করতে পারবেন না, বিন্দুটি ভেরিয়েবল এবং ফাংশনগুলি এনপ্যাপুলেটেড করতে হবে। নেমস্পেসিংয়ের অনুরূপ কিছু। আমি ধরে নেব যে আপনি আপনার সমস্ত কোডকে অবজেক্ট ওরিয়েন্টেড হিসাবে পোর্ট করতে চান না, তবে আপনি যদি কিছুটা রিফ্যাক্টর করতে আপত্তি করেন না, আমি মডিউল প্যাটার্ন বলে যার সাথে সমতুল্য কিছু যুক্ত করার পরামর্শ দেব recommend এটি দেখতে এমন কিছু দেখাচ্ছে:

sidebar.js

var Sidebar = (function(){
// functions and vars here are private
var init = function(){
  $("#sidebar #sortable").sortable({
            forceHelperSize: true,
            forcePlaceholderSize: true,
            revert: true,
            revert: 150,
            placeholder: "highlight panel",
            axis: "y",
            tolerance: "pointer",
            cancel: ".content"
       }).disableSelection();
  } 
  return {
   // here your can put your "public" functions
   init : init
  }
})();

তারপরে আপনি এই বিট কোডটি এর মতো লোড করতে পারেন:

$(document).ready(function(){
   Sidebar.init();
   ...

এটি আপনাকে আপনার কোডটি খুব বেশি পুনর্লিখন না করে অনেক বেশি রক্ষণাবেক্ষণযোগ্য কোডের অনুমতি দেবে।


1
আপনি দ্বিতীয় থেকে শেষের স্নিপেটটি গুরুত্ব সহকারে পুনর্বিবেচনা করতে চাইতে পারেন, যা কোডটি ইনলাইন লিখিত থাকা ছাড়া ভাল নয়: আপনার মডিউলের প্রয়োজন #sidebar #sortable। আপনি কেবল কোডটি ইনলাইন করে এবং দুটি আইইটিএফ সংরক্ষণ করে নিজের স্মৃতি বাঁচাতে পারেন।
সাবস্টিয়ান রেনাওল্ড

সেখানে বক্তব্যটি হ'ল আপনি যা প্রয়োজন কোডটি ব্যবহার করতে পারেন। আমি কেবল আসল কোড থেকে একটি উদাহরণ ব্যবহার করছি
জেসেস ক্যারেরা

আমি যীশুর সাথে একমত এটি কেবল একটি উদাহরণ, ওপি সহজেই একটি বিকল্প "অবজেক্ট" যুক্ত করতে পারে যা তাদের হার্ড কোডিংয়ের পরিবর্তে উপাদানটির নির্বাচক নির্দিষ্ট করার অনুমতি দেয় তবে এটি কেবল একটি দ্রুত উদাহরণ ছিল। আমি বলতে চাই যে আমি মডিউলটি পছন্দ করি এটি আমার ব্যবহৃত প্রাথমিক প্যাটার্ন তবে এটির সাথে আমি এখনও আমার কোডটি আরও ভালভাবে সাজানোর চেষ্টা করছি। আমি সি # সাধারণত ব্যবহার করি যাতে ফাংশনটির নামকরণ এবং সৃষ্টিটি এত জেনারিক লাগে। আমি একটি "প্যাটার্ন" রাখার চেষ্টা করি যেমন আন্ডারস্কোরগুলি স্থানীয় এবং ব্যক্তিগত হয়, ভেরিয়েবলগুলি কেবল "অবজেক্ট" হয় এবং তারপরে আমি আমার ফিরতিতে ফাংশনটি উল্লেখ করি যা সর্বজনীন।
টনি

তবে আমি এখনও এই পদ্ধতির সাথে চ্যালেঞ্জগুলি পাই এবং এটি করার আরও ভাল উপায় অর্জনের ইচ্ছা। তবে অন্যান্য জেএসের সাথে দ্বন্দ্ব সৃষ্টি করার জন্য বৈশ্বিক জায়গাতে আমার ভেরিয়েবল এবং ফাংশনগুলি ঘোষণার চেয়ে এটি আরও অনেক ভাল কাজ করে .... lol
টনি

6

জাভাস্ক্রিপ্ট কোডটি মানক পদ্ধতিতে সংগঠিত করতে জাভাস্ক্রিপ্ট এমভিসি ফ্রেমওয়ার্ক ব্যবহার করুন।

উপলব্ধ জাভাস্ক্রিপ্ট এমভিসি ফ্রেমওয়ার্কগুলি হ'ল:

একটি জাভাস্ক্রিপ্ট এমভিসি ফ্রেমওয়ার্ক নির্বাচন করার জন্য অনেকগুলি বিষয় বিবেচনা করা দরকার। পড়ুন নিম্নলিখিত তুলনা নিবন্ধটি আপনাকে কারণের আপনার প্রকল্পের জন্য গুরুত্বপূর্ণ উপর ভিত্তি করে সেরা ফ্রেমওয়ার্ক নির্বাচন করতে সাহায্য করবে: http://sporto.github.io/blog/2013/04/12/comparison-angular-backbone-can-ember/

আপনি অ্যাসিঙ্ক্রোনাস জেএস ফাইল এবং মডিউল লোড সমর্থন করার জন্য ফ্রেমওয়ার্ক সহ প্রয়োজনীয় জেএস ব্যবহার করতে পারেন ।
নিচে জাতীয় মডিউল লোড এর ব্যবহার শুরু করার দেখুন:
http://www.sitepoint.com/understanding-requirejs-for-effective-javascript-module-loading/


4

আপনার কোডটি শ্রেণীবদ্ধ করুন। এই পদ্ধতিটি আমাকে অনেক সহায়তা করছে এবং কোনও জেএস ফ্রেমওয়ার্কের সাথে কাজ করে:

(function(){//HEADER: menu
    //your code for your header
})();
(function(){//HEADER: location bar
    //your code for your location
})();
(function(){//FOOTER
    //your code for your footer
})();
(function(){//PANEL: interactive links. e.g:
    var crr = null;
    $('::section.panel a').addEvent('click', function(E){
        if ( crr) {
            crr.hide();
        }
        crr = this.show();
    });
})();

আপনার পছন্দের সম্পাদকটিতে (সেরাটি কোমোডো সম্পাদনা করুন) আপনি সমস্ত এন্ট্রি সংহত করে ভাঁজ করতে পারেন এবং আপনি কেবল শিরোনাম দেখতে পাবেন:

(function(){//HEADER: menu_____________________________________
(function(){//HEADER: location bar_____________________________
(function(){//FOOTER___________________________________________
(function(){//PANEL: interactive links. e.g:___________________

2
লাইব্রেরিতে নির্ভর করে না এমন একটি স্ট্যান্ডার্ড জেএস সমাধানের জন্য +1।
হোবারউইকি

একাধিক কারণে -1। আপনার কোড সমতুল্য হ'ল ওপি'র ... + "প্রতি" বিভাগে প্রতি আইআইটিএফ এর সমান। তদুপরি, আপনি মডিউল বিকাশকারীদের সৃষ্টি / অপসারণ ও আচরণকে প্রসারিত করতে ওভাররাইড করার অনুমতি ছাড়াই অতিরিক্ত বিস্তৃত নির্বাচক ব্যবহার করছেন। অবশেষে, আইইটিএফগুলি বিনামূল্যে নয়।
সাবস্টিয়ান রেনেউল্ড

@ হোবারবিচিকি: আপনার সম্পর্কে জানেন না, তবে আমি বরং এমন কোনও কিছুর উপর নির্ভর করব যা সম্প্রদায়ভিত্তিক এবং যেখানে আমি পারলে দ্রুত বাগগুলি পাওয়া যায়। বিশেষত যদি অন্যথায় করা হয় তবে আমাকে চাকাটি পুনরায় উদ্ভাবনের জন্য নিন্দা জানায়।
সাবস্টিয়ান রেনেউল্ড

2
এই সব করছে বিচ্ছিন্ন বিভাগগুলিতে কোড সংগঠিত করা। গতবার আমি যা পরীক্ষা করেছিলাম এটি ছিল: ভাল অনুশীলন, এবং বি: আপনার সত্যিকার অর্থে কোনও সম্প্রদায়ের সমর্থিত লাইব্রেরির দরকার নেই। সমস্ত প্রকল্প ব্যাকবোন, কৌণিক ইত্যাদি ইত্যাদিতে ফিট করে না এবং কোডগুলিকে ফাংশনগুলিতে গুটিয়ে রেখে মডিউলাইরিজ করা ভাল সাধারণ সমাধান নয়।
হোবারউইকি

আপনি এই পদ্ধতির ব্যবহার করতে যে কোনও সময় পছন্দসই লাইব্রেরির উপর নির্ভর করতে চান এটি সম্ভব। তবে উপরের সমাধানটি বিশুদ্ধ জাভাস্ক্রিপ্ট, কাস্টম লাইব্রেরি বা কোনও বিখ্যাত

3

আমি সুপারিশ করবে:

  1. ইভেন্ট ম্যানেজমেন্টের জন্য প্রকাশক / গ্রাহক প্যাটার্ন।
  2. অবজেক্ট ওরিয়েন্টেশন
  3. namespacing

আপনার ক্ষেত্রে জেসিকা, ইন্টারফেসটি পৃষ্ঠা বা পর্দার মধ্যে ভাগ করুন divide পৃষ্ঠাগুলি বা স্ক্রীনগুলি বস্তু হতে পারে এবং কিছু অভিভাবক শ্রেণীর থেকে প্রসারিত হতে পারে। পেজ ম্যানেজার শ্রেণীর সাথে পৃষ্ঠাগুলির মধ্যে ইন্টারঅ্যাকশন পরিচালনা করুন।


উদাহরণস্বরূপ / সংস্থান দিয়ে আপনি কি এটিকে প্রসারিত করতে পারেন?
কিভিলিয়াস

1
"অবজেক্ট অরিয়েন্টেশন" বলতে কী বোঝ? জাতীয় প্রায় সবকিছু হয় একটি বস্তু। আর জেএসে কোনও ক্লাস নেই।
বার্গি

2

আমি আপনাকে ব্যাকবোন এর মতো কিছু ব্যবহার করার পরামর্শ দিচ্ছি। ব্যাকবোন একটি বিশিষ্ট সমর্থিত জাভাস্ক্রিপ্ট লাইব্রেরি। Ik আপনার কোডটিকে আরও পরিষ্কার এবং আরও পঠনযোগ্য করে তোলে এবং প্রয়োজনীয় সংস্থাগুলির সাথে একসাথে ব্যবহৃত হলে শক্তিশালী হয়।

http://backbonejs.org/

http://requirejs.org/

ব্যাকবোন সত্যিকারের গ্রন্থাগার নয়। এটি আপনার জাভাস্ক্রিপ্ট কোডকে কাঠামো দেওয়ার উদ্দেশ্যে। এটি অন্যান্য লাইব্রেরি যেমন জ্যাকুয়ারি, জ্যাকুরি-ইউআই, গুগল-ম্যাপস ইত্যাদি অন্তর্ভুক্ত করতে সক্ষম হয় ব্যাকবোন আমার মতে অবজেক্ট ওরিয়েন্টেড এবং মডেল ভিউ কন্ট্রোলার স্ট্রাকচারের নিকটতম জাভাস্ক্রিপ্ট পদ্ধতির কাছে রয়েছে।

এছাড়াও আপনার কর্মপ্রবাহের বিষয়ে .. আপনি যদি পিএইচপি-তে আপনার অ্যাপ্লিকেশনগুলি তৈরি করেন তবে লারাভেল লাইব্রেরিটি ব্যবহার করুন। RESTfull নীতিটি ব্যবহার করার সময় এটি ব্যাকবোনটির সাথে নির্বিঘ্নে কাজ করবে। লারাভেল ফ্রেমওয়ার্কের লিঙ্কের নীচে এবং RESTfull এপিআই তৈরির বিষয়ে একটি টিউটোরিয়াল:

http://maxoffsky.com/code-blog/building-restful-api-in-laravel-start-here/

http://laravel.com/

নীচে নেটটट्स থেকে একটি টিউটোরিয়াল দেওয়া আছে। নেটটসের অনেক উচ্চ মানের টিউটোরিয়াল রয়েছে:

http://net.tutsplus.com/tutorials/javascript-ajax/understanding-backbone-js-and-the-server/


0

ইয়েমেন http://yeoman.io/ এর মতো সরঞ্জামগুলি ব্যবহার করে আপনার জন্য পুরো সময়কালের কার্যপ্রবাহটি বাস্তবায়ন শুরু করার জন্য সম্ভবত এটির সময় । এটি আপনার সমস্ত নির্ভরতা নিয়ন্ত্রণ করতে, প্রক্রিয়া তৈরি করতে এবং যদি আপনি চান, স্বয়ংক্রিয় পরীক্ষায় সহায়তা করবে। এটি দিয়ে শুরু করার অনেক কাজ তবে একবার প্রয়োগ করা হলে ভবিষ্যতের পরিবর্তনগুলি আরও সহজ হয়ে যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.