জাভাস্ক্রিপ্ট [বন্ধ] কোড সংস্থার চারপাশে সাধারণভাবে গৃহীত সেরা অনুশীলনগুলি


561

JQuery এর মতো জাভাস্ক্রিপ্ট ফ্রেমওয়ার্কগুলি ক্লায়েন্টের সাইড ওয়েব অ্যাপ্লিকেশনগুলিকে আরও সমৃদ্ধ এবং আরও কার্যকরী করার জন্য, আমি একটি সমস্যা লক্ষ্য করতে শুরু করেছি ...

কীভাবে আপনি বিশ্বে এই সংগঠিত রাখেন?

  • আপনার সমস্ত হ্যান্ডলারকে এক জায়গায় রেখে সমস্ত ইভেন্টের জন্য ফাংশন লিখুন?
  • আপনার সমস্ত কার্যকারিতা মোড়ানোর জন্য ফাংশন / ক্লাস তৈরি করবেন?
  • পাগলের মতো লিখুন এবং কেবল আশা করি এটি সর্বোত্তম জন্য কার্যকর হয়?
  • ছেড়ে দিয়ে নতুন ক্যারিয়ার পান?

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

আপনার .js ফাইলগুলিকে আপনার অ্যাপ্লিকেশনটির মতো সুন্দর এবং ঝরঝরে রাখার সর্বোত্তম উপায়ের জন্য কি কোনও সাধারণ সুপারিশ রয়েছে ? বা এটি কি কেবল আইডিইর বিষয়? সেখানে আরও ভাল বিকল্প আছে?


সম্পাদনা

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

আমার প্রশ্ন: আপনার আসল কোডটি সাজানোর জন্য সাধারণভাবে গৃহীত সেরা অনুশীলনের উপায়টি কী? আপনার উপায় কী, বা পৃষ্ঠার উপাদানগুলির সাথে ইন্ট্যারাক্ট করার এবং পুনরায় ব্যবহারযোগ্য কোড তৈরি করার প্রস্তাবিত উপায় যা একে অপরের সাথে বিরোধ নয়?

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


যে কেউ আসলে কোড সংস্থার বিষয়েই কথা বলার জন্য সময় নিয়েছিল, "জাস্ট" নয় যে তিনি তার জেএস ফাইলগুলি সংযুক্ত করতে এবং সংকুচিত করতে কোন সরঞ্জামটি ব্যবহার করেন: stackoverflow.com/questions/16736483/…
অ্যাড্রিয়েন

উত্তর:


183

এটি যদি জাভাস্ক্রিপ্টের মধ্যে নেমস্পেসগুলি নির্মিত হয় তবে এটি খুব সুন্দর হবে তবে আমি দেখতে পেয়েছি যে এখানে ডাস্টিন ডিয়াজের বর্ণনার মতো বিষয়গুলি সংগঠিত করা আমাকে অনেক সহায়তা করে।

var DED = (function() {

    var private_var;

    function private_method()
    {
        // do stuff here
    }

    return {
        method_1 : function()
            {
                // do stuff here
            },
        method_2 : function()
            {
                // do stuff here
            }
    };
})();

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


24
আমি সাধারণত এটি "ক্রকফোর্ড উপায়" হিসাবে উল্লেখ করি। আমার কাছ থেকে +1
ম্যাট ব্রিগস

4
এমনকি আপনি আরও কিছুটা যেতে পারেন। এই লিঙ্কটি দেখুন: অপেক্ষা-till-i.com/2007/08/22/…
এমক্রোহনার্ট

4
@ ম্যাটব্রিগসকে অন্যথায় ডাকা হয়েছে module patternএবং এটি উপর ভিত্তি করে IIFE pattern
এড্রিয়েন

আপনার কি কোনওভাবে ক্লাস রফতানি করার দরকার নেই? এই জাতীয় মডিউলের বাইরে থেকে কীভাবে কোনও বস্তু তৈরি হয়? অথবা createNewSomething()রিটার্ন অবজেক্টে কোনও পদ্ধতি থাকা উচিত , তাই কেবলমাত্র মডিউলটির মধ্যেই অবজেক্ট তৈরি হয়? এইচএম ... আমি আশা করব যে ক্লাসগুলি (নির্মাতারা) বাইরে থেকে দৃশ্যমান।
রবস্চ

@robsch তার উদাহরণটি কোনও পরামিতি নেয় না, তবে বেশিরভাগ ক্ষেত্রে। : এই কিভাবে সাধারণত সম্পন্ন করা হয় এর জন্য এখানে আমার উদাহরণ দেখুন (টাইপ করা বিষয়, কিন্তু 99% একই) repl.it/@fatso83/Module-Pattern-in-TypeScript
oligofren থেকে

88

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

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

// file: survey.js
$(document).ready(function() {
  var jS = $('#surveycontainer');
  var jB = $('#dimscreencontainer');
  var d = new DimScreen({container: jB});
  var s = new Survey({container: jS, DimScreen: d});
  s.show();
});

আমি নামকরণের কনভেনশনটি পঠনযোগ্যতার জন্য গুরুত্বপূর্ণ বলে মনে করি। উদাহরণস্বরূপ: আমি সমস্ত jQuery দৃষ্টান্তগুলিতে 'j' প্রিপেন্ড করি।

উপরের উদাহরণে, ডিমস্ক্রিন নামে একটি বর্গ রয়েছে। (ধরে নিন এটি স্ক্রিনকে ম্লান করে দেয় এবং একটি সতর্কতা বাক্স পপ আপ করে)) এর জন্য একটি ডিভ উপাদান দরকার যা এটি স্ক্রিনটি কভার করতে আরও বড় করতে পারে এবং তারপরে একটি সতর্কতা বাক্স যুক্ত করতে পারে, তাই আমি একটি jQuery অবজেক্টে পাস করি। jQuery এর একটি প্লাগ-ইন ধারণা রয়েছে তবে এটি মনে হচ্ছে সীমাবদ্ধ রয়েছে (উদাহরণস্বরূপ উদাহরণগুলি অবিচল নয় এবং অ্যাক্সেস করা যায় না) কোনও সত্যিকারের উল্টোদিকে নেই। সুতরাং ডিমস্ক্রিন বর্গটি একটি স্ট্যান্ডার্ড জাভাস্ক্রিপ্ট ক্লাস হবে যা কেবল jQuery ব্যবহার করার ক্ষেত্রে ঘটে।

// file: dimscreen.js
function DimScreen(opts) { 
   this.jB = opts.container;
   // ...
}; // need the semi-colon for minimizing!


DimScreen.prototype.draw = function(msg) {
  var me = this;
  me.jB.addClass('fullscreen').append('<div>'+msg+'</div>');
  //...
};

আমি এই পদ্ধতির ব্যবহার করে বেশ কিছু জটিল অ্যাপ্লিকেশন তৈরি করেছি।


15
আমি দেখতে পেয়েছি যে $ভেরিয়েবল নামের উপসর্গ হিসাবে ব্যবহার করা একটি আরও সাধারণ অনুশীলন, তবে আমি ভুল হতে পারি। সুতরাং, $s = $('...')পরিবর্তে jS = $('...'), আমি পছন্দ অনুমান কেবল বিষয়। যদিও আকর্ষণীয়, হাঙ্গেরিয়ান স্বরলিপিটি কোড গন্ধ বলে মনে করা হয়। আমার জাভাস্ক্রিপ্ট কোড কনভেনশন / পছন্দগুলি আমার সি # / জাভা কোডিং কনভেনশনগুলির থেকে কতটা আলাদা তা অদ্ভুত।
জ্যামিবারো

9
@ জ্যামি এই ক্ষেত্রে এটি কোনও কোডের গন্ধ নয়, হাঙ্গেরিয়ান ভাল হওয়ার কয়েকটি ক্ষেত্রে এটি হ'ল একটি । আপনি পড়তে চাইবেন এই
ড্যান আব্রামভ

3
@ ড্যানআব্রামভ এই লিঙ্কটির জন্য আপনাকে ধন্যবাদ। আমাকে অবশ্যই জোয়েলের সমস্ত ব্লগ অবশ্যই পড়তে হবে, তিনি বিষয়গুলি এত ভালভাবে ব্যাখ্যা করেছেন। অবশ্যই তিনি খ্যাতি / খ্যাতি প্রাপ্য। আমি এখন থেকে Systems Hungarianকোড গন্ধ এবং Apps Hungarianএকটি অনুশীলন হিসাবে উল্লেখ করব :)
জ্যামিবারো

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

3
@ মার্নেন: আমি আপনার বক্তব্যটি দেখছি, তবে প্রোগ্রামারটির গাইড হিসাবে এটি অকেজো নয়। আমার কোডটি পরে পড়ার সময় $ উপসর্গটি আমাকে স্মরণ করিয়ে দেয় এবং এভাবে দ্রুত বুঝতে সহায়তা করে।
শন

39

আপনি আপনার স্ক্রিপ্টগুলি বিকাশের জন্য পৃথক ফাইলগুলিতে বিভক্ত করতে পারেন, তারপরে একটি "রিলিজ" সংস্করণ তৈরি করুন যেখানে আপনি সেগুলি একসাথে ক্র্যাম করেন এবং YUI কমপ্রেসর বা এর মতো কিছু চালান something


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

2
@ ডক সংকলনে অব্যবহৃত স্টাফের উত্তোলন অন্তর্ভুক্ত করা উচিত।
এহেলকে

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

27

তার আগে পোস্ট আমি এর একটি অনুলিপি তৈরি দ্বারা অনুপ্রাণিত Rakefile এবং বিক্রেতা ডিরেক্টরি সঙ্গে বিতরণ করা WysiHat (ক আরটিই পরিবর্তণের উল্লেখ) এবং কোড-পরীক্ষণের অন্তর্ভুক্ত করতে কয়েক পরিবর্তন করেছেন JSLint এবং minification Yui কম্প্রেসার

একাধিক জাভাস্ক্রিপ্টকে এক ফাইলে একীভূত করতে, জেএসলিন্টের সাথে মার্জ হওয়া ফাইলটির বাক্য গঠনটি পরীক্ষা করে বিতরণের আগে ওয়াইইউআই কমপ্রেসর দিয়ে মিনিফাইজ করার জন্য স্প্রোকেটগুলি (উইসাইহাট থেকে) ব্যবহার করার ধারণা ।

পূর্বশর্ত

  • জাভা রানটাইম
  • রুবি এবং রেক রত্ন
  • আপনার জেনে রাখা উচিত কীভাবে ক্লাসপাথে একটি জেআর স্থাপন করা যায়

এখন কর

  1. রাইনো ডাউনলোড করুন এবং আপনার ক্লাসপথে জেআর ("js.jar") রাখুন
  2. YUI সংক্ষেপকটি ডাউনলোড করুন এবং জার (বিল্ড / ইউইকম্প্রেসার-xyz.jar) আপনার ক্লাসপথে রাখুন
  3. WysiHat ডাউনলোড করুন এবং আপনার জাভাস্ক্রিপ্ট প্রকল্পের মূলটিতে "বিক্রেতা" ডিরেক্টরিটি অনুলিপি করুন
  4. গেন্ডার জন্য জেএসলিন্ট ডাউনলোড করুন এবং এটিকে "বিক্রেতা" ডিরেক্টরিতে রেখে দিন

এখন জাভাস্ক্রিপ্ট প্রকল্পের মূল ডিরেক্টরিতে "রেকফিল" নামে একটি ফাইল তৈরি করুন এবং এতে নিম্নলিখিত লিখিত সামগ্রী যুক্ত করুন:

require 'rake'

ROOT            = File.expand_path(File.dirname(__FILE__))
OUTPUT_MERGED   = "final.js"
OUTPUT_MINIFIED = "final.min.js"

task :default => :check

desc "Merges the JavaScript sources."
task :merge do
  require File.join(ROOT, "vendor", "sprockets")

  environment  = Sprockets::Environment.new(".")
  preprocessor = Sprockets::Preprocessor.new(environment)

  %w(main.js).each do |filename|
    pathname = environment.find(filename)
    preprocessor.require(pathname.source_file)
  end

  output = preprocessor.output_file
  File.open(File.join(ROOT, OUTPUT_MERGED), 'w') { |f| f.write(output) }
end

desc "Check the JavaScript source with JSLint."
task :check => [:merge] do
  jslint_path = File.join(ROOT, "vendor", "jslint.js")

  sh 'java', 'org.mozilla.javascript.tools.shell.Main',
    jslint_path, OUTPUT_MERGED
end

desc "Minifies the JavaScript source."
task :minify => [:merge] do
  sh 'java', 'com.yahoo.platform.yui.compressor.Bootstrap', '-v',
    OUTPUT_MERGED, '-o', OUTPUT_MINIFIED
end

আপনি যদি সবকিছু সঠিকভাবে করেন তবে আপনার কনসোলে নিম্নলিখিত কমান্ডগুলি ব্যবহার করতে সক্ষম হওয়া উচিত:

  • rake merge - বিভিন্ন জাভাস্ক্রিপ্ট ফাইল এক সাথে মার্জ করতে
  • rake check- আপনার কোডের বাক্য গঠন পরীক্ষা করতে (এটি ডিফল্ট টাস্ক, সুতরাং আপনি কেবল টাইপ করতে পারেন rake)
  • rake minify - আপনার জেএস কোডের সংক্ষিপ্ত সংস্করণ প্রস্তুত করতে

উত্স একত্রিত করা

স্প্রোকেটস, জাভাস্ক্রিপ্ট প্রি-প্রসেসর ব্যবহার করে আপনি (বা require) অন্যান্য জাভাস্ক্রিপ্ট ফাইল অন্তর্ভুক্ত করতে পারেন । প্রাথমিক ফাইল থেকে অন্য স্ক্রিপ্টগুলি অন্তর্ভুক্ত করার জন্য নিম্নলিখিত সিনট্যাক্সটি ব্যবহার করুন (নাম "মেইন.জেস", তবে আপনি এটি রেকফাইলে পরিবর্তন করতে পারেন):

(function() {
//= require "subdir/jsfile.js"
//= require "anotherfile.js"

    // some code that depends on included files
    // note that all included files can be in the same private scope
})();

এবং তারপর...

স্বয়ংক্রিয় ইউনিট পরীক্ষার সেট আপ করতে WysiHat এর সাথে সরবরাহ করা রাকফাইলে একবার দেখুন। দারুণ জিনিস :)

এবং এখন উত্তরের জন্য

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

সমস্যার প্রতি আমার দৃষ্টিভঙ্গি হ'ল আমি যতটা অবজেক্ট অরিয়েন্টেড মডেলিং করতে পারি এবং বিভিন্ন ফাইলগুলিতে প্রয়োগগুলি পৃথক করে। তারপরে হ্যান্ডলারগুলি যতটা সম্ভব সংক্ষিপ্ত হওয়া উচিত। Listসিঙ্গেলনের সাথে উদাহরণটিও দুর্দান্ত ।

এবং নেমস্পেসগুলি ... ভাল তারা গভীর অবজেক্ট কাঠামোর দ্বারা অনুকরণ করতে পারে।

if (typeof org === 'undefined') {
    var org = {};
}

if (!org.hasOwnProperty('example')) {
    org.example = {};
}

org.example.AnotherObject = function () {
    // constructor body
};

আমি অনুকরণের বড় অনুরাগী নই, তবে আপনি যদি বিশ্বব্যাপী সুযোগ থেকে সরে যেতে চান এমন অনেকগুলি জিনিস থাকে তবে এটি সহায়ক হতে পারে।


18

কোড সংস্থার কনভেনশন এবং ডকুমেন্টেশন স্ট্যান্ডার্ড গ্রহণ প্রয়োজন:
1. একটি ভৌত ​​ফাইলের জন্য নাম স্থান কোড;

Exc = {};


২. এই নেমস্পেসগুলিতে জাভাস্ক্রিপ্টে গ্রুপ ক্লাস;
৩. প্রকৃত বিশ্বের বস্তুর প্রতিনিধিত্বের জন্য প্রোটোটাইপ বা সম্পর্কিত ফাংশন বা ক্লাস সেট করুন;

Exc = {};
Exc.ui = {};
Exc.ui.maskedInput = function (mask) {
    this.mask = mask;
    ...
};
Exc.ui.domTips = function (dom, tips) {
    this.dom = gift;
    this.tips = tips;
    ...
};


৪. কোড উন্নত করার জন্য কনভেনশন সেট করুন। উদাহরণস্বরূপ, এর অভ্যন্তরীণ ফাংশন বা পদ্ধতিগুলির কোনও শ্রেণীর কোনও শ্রেণীর জন্য কোনও শ্রেণীর অ্যাট্রিবিউটের বৈশিষ্ট্য।

Exc.ui.domTips = function (dom, tips) {
    this.dom = gift;
    this.tips = tips;
    this.internal = {
        widthEstimates: function (tips) {
            ...
        }
        formatTips: function () {
            ...
        }
    };
    ...
};


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

/**
  * Namespace <i> Example </i> created to group other namespaces of the "Example".  
  */
Exc = {};
/**
  * Namespace <i> ui </i> created with the aim of grouping namespaces user interface.
  */
Exc.ui = {};

/**
  * Class <i> maskdInput </i> used to add an input HTML formatting capabilities and validation of data and information.
  * @ Param {String} mask - mask validation of input data.
  */
Exc.ui.maskedInput = function (mask) {
    this.mask = mask;
    ...
};

/**
  * Class <i> domTips </i> used to add an HTML element the ability to present tips and information about its function or rule input etc..
  * @ Param {String} id - id of the HTML element.
  * @ Param {String} tips - tips on the element that will appear when the mouse is over the element whose identifier is id <i> </i>.
  */
  Exc.ui.domTips = function (id, tips) {
    this.domID = id;
    this.tips = tips;
    ...
};


এগুলি কেবলমাত্র কয়েকটি টিপস, তবে এটি কোডটি সংগঠিত করতে ব্যাপকভাবে সহায়তা করেছে। মনে রাখবেন সফল হওয়ার জন্য আপনার অবশ্যই শৃঙ্খলা থাকতে হবে!


13

ভাল ওও ডিজাইন প্রিন্সিপালগুলি এবং ডিজাইনের নিদর্শনগুলি অনুসরণ করা আপনার কোডটিকে বজায় রাখা এবং বোঝার পক্ষে সহজ করে তুলতে অনেক বেশি এগিয়ে যায়। তবে আমি সম্প্রতি যে সেরা জিনিসগুলি আবিষ্কার করেছি তা হ'ল সিগন্যাল এবং স্লট ওরফে প্রকাশ / সাবস্ক্রাইব। একটি সহজ jQuery বাস্তবায়নের জন্য http://markdotmeyer.blogspot.com/2008/09/jquery-publish-subscribe.html দেখুন ।

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

আমি মনে করি এই প্রযুক্তির সংস্করণটি দোজো (এবং প্রোটোটাইপ?) রয়েছে

এছাড়াও দেখুন সংকেত এবং স্লট কি?


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

12

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


11

প্রথম দিন থেকেই দোজোর মডিউল সিস্টেম ছিল। প্রকৃতপক্ষে এটিকে দোজের এক ভিত্তি হিসাবে বিবেচনা করা হয়, আঠালো যা এটিকে সব একসাথে ধারণ করে:

মডিউল ব্যবহার করে ডোজো নিম্নলিখিত লক্ষ্যগুলি অর্জন করে:

  • ডোজো কোড এবং কাস্টম কোড ( dojo.declare()) এর নেমস্পেসগুলি - বিশ্বব্যাপী স্পেসকে কলুষিত করবেন না, অন্যান্য গ্রন্থাগারগুলির সাথে সহাবস্থান করুন এবং ব্যবহারকারীর অ ডোজো-সচেতন কোডটি রাখবেন না।
  • নাম ( dojo.require()) দ্বারা সিঙ্ক্রোনালি বা অ্যাসিক্রোনালি মডিউল লোড হচ্ছে ।
  • আপনার ওয়েব অ্যাপ্লিকেশনটির প্রয়োজন কেবল যা অন্তর্ভুক্ত করতে একক ফাইল বা আন্তঃনির্ভরশীল ফাইলগুলির একটি গ্রুপ (তথাকথিত স্তর) তৈরি করতে মডিউল নির্ভরতা বিশ্লেষণ করে কাস্টম তৈরি করে। কাস্টম বিল্ডগুলির মধ্যে দোজো মডিউল এবং গ্রাহক সরবরাহিত মডিউলগুলিও অন্তর্ভুক্ত থাকতে পারে।
  • দোজো এবং ব্যবহারকারীর কোডে স্বচ্ছ সিডিএন ভিত্তিক অ্যাক্সেস। এওএল এবং গুগল উভয়ই এই ফ্যাশনে ডোজো বহন করে, তবে কিছু গ্রাহক তাদের কাস্টম ওয়েব অ্যাপ্লিকেশনগুলির জন্য এটিও করেন।

9

পরীক্ষা করে দেখুন JavasciptMVC

আপনি পারেন:

  • আপনার কোডটি মডেল, দেখুন এবং নিয়ামক স্তরগুলিতে ভাগ করুন।

  • একটি কোড উত্পাদন ফাইলের মধ্যে সমস্ত কোড সংকুচিত

  • স্বয়ংক্রিয় উত্পন্ন কোড

  • ইউনিট পরীক্ষা তৈরি এবং চালান

  • এবং আরো অনেক কিছু...

সর্বোপরি, এটি jQuery ব্যবহার করে, যাতে আপনি অন্যান্য jQuery প্লাগইনগুলিরও সুবিধা নিতে পারেন।


হ্যাঁ, আমি ব্যবহৃত jmvc করেছি এবং এটি বেশ ভাল - দস্তাবেজ ভালো হতে পারে যদিও
meouw

9

আমার বস তখনও সেই সময়ের কথা বলে যখন তারা মডুলার কোড (সি ভাষা) লিখেছিল এবং কোডটি আজকাল কতটা খারাপ বলে অভিযোগ করে! বলা হয়ে থাকে যে প্রোগ্রামাররা যে কোনও কাঠামোয় সমাবেশ লিখতে পারে write কোড সংগঠনকে কাটিয়ে উঠার কৌশল সর্বদা রয়েছে। মূল সমস্যাটি সেই ছেলেদের সাথে যারা জাভা স্ক্রিপ্টকে খেলনা হিসাবে বিবেচনা করে এবং কখনও এটি শেখার চেষ্টা করে না।

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

সমস্ত ব্যক্তিগত পদ্ধতি লুকানোর জন্য আমি জাভা স্ক্রিপ্ট বন্ধ এবং নিদর্শনগুলি কঠোরভাবে ব্যবহার করি। এটি করার পরে, বিরোধী সম্পত্তি / ফাংশন সংজ্ঞা / পরিবর্তনশীল সংজ্ঞাগুলির কোনও সমস্যার মুখোমুখি হন না। যাইহোক, একটি দলের সাথে কাজ করার সময় প্রায়শই একই কঠোরতা প্রয়োগ করা কঠিন।


9

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

এই ধরণের ফ্রেমওয়ার্কগুলির বেশ কয়েকটি এখানে আছে এবং তাদের বেশিরভাগই খুব ছোট are আমার ব্যক্তিগত মতামতটি হল আপনি যদি ঝলমলে UI স্টাফের জন্য jQuery এর কয়েকটি লাইন থেকে বেশি লিখতে চলেছেন বা একটি সমৃদ্ধ অ্যাজ্যাক্স অ্যাপ্লিকেশন চান তবে একটি এমভিসি কাঠামো আপনার জীবনকে আরও সহজ করে তুলবে।


8

"পাগলের মতো লিখুন এবং কেবল আশা করি এটি সবচেয়ে ভাল ফলাফল করে?", আমি এই জাতীয় একটি প্রকল্প দেখেছি যা কেবলমাত্র 2 বিকাশকারী দ্বারা বিকাশিত এবং রক্ষণাবেক্ষণ করা হয়েছিল, প্রচুর জাভাস্ক্রিপ্ট কোড সহ একটি বিশাল অ্যাপ্লিকেশন। তার উপরে, আপনি ভাবতে পারেন এমন প্রতিটি সম্ভাব্য jquery ফাংশনের জন্য আলাদা শর্টকাট ছিল। আমি তাদের পরামর্শ দিয়েছিলাম যে তারা কোডটিকে প্লাগইন হিসাবে সংগঠিত করুন, কারণ এটি ক্লাস, মডিউল, নেমস্পেস ... এবং পুরো মহাবিশ্বের সমান সমান equivalent তবে বিষয়গুলি আরও খারাপ হয়ে গিয়েছিল, এখন তারা প্রকল্পটিতে ব্যবহৃত 3 টি লাইনের কোডের সংমিশ্রণে প্রতিস্থাপন করে প্লাগইন লিখতে শুরু করেছে। পার্সোনালি আমি মনে করি jQuery হ'ল শয়তান এবং এটি প্রচুর জাভাস্ক্রিপ্টযুক্ত প্রকল্পগুলিতে ব্যবহার করা উচিত নয় কারণ এটি আপনাকে অলস হতে উত্সাহ দেয় এবং কোনওভাবে কোড সংগঠিত করার কথা ভাবেন না। আমি বরং 40 টি শৃঙ্খলিত jQuery ফাংশন সহ এক লাইনের চেয়ে 100 টি লাইন জাভাস্ক্রিপ্ট পড়তে চাই (আমি ' আমি মজা করছি না)। জনপ্রিয় বিশ্বাসের বিপরীতে জাভাস্ক্রিপ্ট কোডটি নেমস্পেস এবং ক্লাসের সমতুল্যভাবে সংগঠিত করা খুব সহজ। ওয়াইইউআই এবং দোজো এটাই করে। আপনি চাইলে সহজেই নিজের রোল করতে পারেন। আমি YUI এর পদ্ধতিকে আরও ভাল এবং দক্ষ বলে মনে করি। তবে আপনি যদি সাধারণত দরকারী কিছু লিখতে চান তবে YUI নামকরণের কনভেনশনগুলির ক্ষতিপূরণ দেওয়ার জন্য স্নিপেটের সমর্থন সহ আপনার একটি দুর্দান্ত সম্পাদক প্রয়োজন।


3
আমি সত্যিই দীর্ঘ, শৃঙ্খলিত কমান্ডগুলি সম্পর্কে আপনার সাথে একমত হয়েছি, তবে jQuery এর অন্যতম সেরা অংশটি হ'ল এটি সমস্ত জাভাস্ক্রিপ্টকে HTML এর বাইরে রাখে। আপনি আইডি যোগ করতে "প্রয়োজন" ছাড়াই বা আপনার উপাদানগুলিতে <যাই >> ইভেন্টগুলিতে আপনার সমস্ত উপাদানগুলির জন্য ইভেন্ট হ্যান্ডলার সেটআপ করতে পারেন। বরাবরের মতো, কোনও সরঞ্জামের ওভার ব্যবহার খারাপ ...
হুগোয়ার

আমি jQuery এ বিশাল, সুসংহত প্রকল্পে কাজ করেছি। আপনি কেন ভাবেন যে এটি সংগঠনের পথে আসে gets
মার্নেন লাইবো-কোসার

7

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


3
ভাল মন্তব্য কি - আমি খুশি যে আপনি এটি বলেছিলেন তাই আমার করা হয়নি। আমি ধারাবাহিক নামকরণের সম্মেলনগুলি যুক্ত করব, ভেরিয়েবলগুলির জন্য কিছুটা সহজেই বোধগম্য সংস্থার কৌশল যুক্ত করব & amp; ফাংশন, এবং যেমনটি আপনি উল্লেখ করেছেন, ক্লাস বনাম সিলেটলেটগুলির ন্যায়বিচারের ব্যবহার।
ম্যাট লোহক্যাম্প

না। আপনার যদি মন্তব্যগুলির প্রয়োজন হয় তবে আপনার কোডটি সাধারণত পর্যাপ্ত পাঠযোগ্য হয় না। এমন কোড লিখতে চেষ্টা করুন যাতে মন্তব্যের প্রয়োজন হয় না।
মার্নেন লাইবো-কোসার

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

1
@ মারেনেন সু-লিখিত প্রকল্পগুলিতে WHY বর্ণনা করার জন্য মন্তব্য অন্তর্ভুক্ত রয়েছে, অগত্যা WHAT। কোডটি ইতিমধ্যে WHAT বর্ণনা করে, তবে প্রায়ই WHW বর্ণনা করার জন্য আপনার কিছু প্রয়োজন হয়। Upvoting।
সাইফার

@ সাইফার সু-লিখিত প্রকল্পগুলিতে যথেষ্ট পরিমাণ কোড রয়েছে যা আপনি সাধারণত "কেন" বলতে পারবেন, কেবল "কী" নয়। আমাকে "কেন" বলার জন্য আমি কোনও মন্তব্যে বিশ্বাস করব না, কারণ কোডের সাথে এটি সিঙ্ক হওয়ার আমার কোনও গ্যারান্টি নেই। কোড নথি নিজেই দিন।
মার্নেন লাইবো-কোসার

6

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

আমি সাইটের বিভাগ অনুসারে নেমস্পেস সিমুলেশন এবং মডিউলগুলির অলস লোডিং ব্যবহার করি। প্রতিটি পৃষ্ঠার লোডে আমি একটি "ভিজেআর" অবজেক্ট ঘোষণা করি এবং সর্বদা এটিতে সাধারণ ফাংশনগুলির একটি সেট লোড করি (vjr.base.js)। তারপরে প্রতিটি এইচটিএমএল পৃষ্ঠা স্থির করে যে কোন মডিউলগুলির সাথে সরল কোনও প্রয়োজন:

vjr.Required = ["vjr.gallery", "vjr.comments", "vjr.favorites"];

Vjr.base.js সার্ভার থেকে প্রতিটি gzip পায় এবং তাদের সম্পাদন করে।

vjr.include(vjr.Required);
vjr.include = function(moduleList) {
  if (!moduleList) return false;
  for (var i = 0; i < moduleList.length; i++) {
    if (moduleList[i]) {
      $.ajax({
        type: "GET", url: vjr.module2fileName(moduleList[i]), dataType: "script"
      });
    }
  }
};

প্রতিটি "মডিউল" এর এই কাঠামো থাকে:

vjr.comments = {}

vjr.comments.submitComment = function() { // do stuff }
vjr.comments.validateComment = function() { // do stuff }

// Handlers
vjr.comments.setUpUI = function() {
    // Assign handlers to screen elements
}

vjr.comments.init = function () {
  // initialize stuff
    vjr.comments.setUpUI();
}

$(document).ready(vjr.comments.init);

আমার সীমিত জাভাস্ক্রিপ্ট জ্ঞান দেওয়া, আমি জানি এটি পরিচালনা করার আরও ভাল উপায় থাকতে হবে তবে এখন অবধি এটি আমাদের পক্ষে দুর্দান্ত কাজ করছে।


6

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

<script src="jquery/1.3.2/jquery.js" type="text/javascript"></script>
<script type="text/javascript">

var AcmeJQ = jQuery.noConflict(true);
var Acme = {fn: function(){}};

(function($){

    Acme.sayHi = function()
    {
        console.log('Hello');
    };

    Acme.sayBye = function()
    {
        console.log('Good Bye');
    };
})(AcmeJQ);

// Usage
//          Acme.sayHi();
// or
// <a href="#" onclick="Acme.sayHi();">Say Hello</a>


</script>

আশাকরি এটা সাহায্য করবে.


এটি আমাকে একটি সামান্য কার্গো-অনুষদ হিসাবে আঘাত করে। jQuery.fnএটি একটি পয়েন্টার jQuery.prototype, কারণ $()আসলে jQuery কনস্ট্রাক্টর ফাংশনটির একটি নতুন উদাহরণ দেয়। JQuery এ একটি 'প্লাগইন' যুক্ত করার অর্থ এর প্রোটোটাইপটি কেবল প্রসারিত করা। তবে আপনি যা করছেন তা তা নয় এবং একই জিনিসটি সম্পাদনের আরও পরিষ্কার উপায় রয়েছে।
অ্যাডাম লাসেক

আমি বিশ্বাস করি তিনি কেবল স্ট্যাটিক ফাংশন তৈরি করছেন। আমার মনে আছে এটি jQuery এর ডক্সে দেখেছি যে স্থির ফাংশন ঘোষণার এই
অ্যালেক্স হাইড

6

ওও + এমভিসির ভাল অধ্যক্ষ অবশ্যই একটি জটিল জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন পরিচালনার জন্য অবশ্যই অনেক দীর্ঘ পথ পাবে।

মূলত আমি নিম্নলিখিত অ্যাপ্লিকেশন এবং জাভাস্ক্রিপ্টটি নিম্নলিখিত পরিচিত ডিজাইনের জন্য সংগঠিত করছি (যা আমার ডেস্কটপ প্রোগ্রামিংয়ের দিন থেকে ওয়েব ২.০-তে ফিরে আসে)

জেএস ওও এবং এমভিসি

চিত্রটিতে সংখ্যার মানগুলির জন্য বিবরণ:

  1. উইজেটগুলি আমার আবেদনের মতামত উপস্থাপন করে। এটি এক্সটেনসিবল এবং সুন্দরভাবে পৃথক হওয়া উচিত যার ফলে এমভিসি আমার উইজেটকে স্প্যাগেটি কোডে পরিণত করার পরিবর্তে অর্জন করতে চেষ্টা করে (সরাসরি এইচটিএমএলে জাভাস্ক্রিপ্টের একটি বৃহত ব্লক স্থাপনের ওয়েব অ্যাপের সমতুল্য)। প্রতিটি উইজেট অন্য উইজেটগুলির দ্বারা উত্পন্ন ইভেন্টটি শুনে অন্যের মাধ্যমে যোগাযোগ করে এইভাবে উইজেটগুলির মধ্যে শক্তিশালী সংযোগকে হ্রাস করতে পারে যা নিয়ন্ত্রণহীন কোডের দিকে নিয়ে যেতে পারে (স্ক্রিপ্ট ট্যাগের একটি বিশ্বব্যাপী ফাংশনগুলিকে নির্দেশ করে সর্বত্র অনক্লিক যোগ করার দিনটি মনে রাখবেন ...)
  2. অবজেক্ট মডেলগুলি ডেটা উপস্থাপন করে যা আমি উইজেটগুলিতে পপুলেশন করতে এবং সার্ভারের কাছে পিছনে যেতে চাই। এর মডেলটিতে ডেটা এনপ্যাপুলেশন করে অ্যাপ্লিকেশনটি ডেটা ফর্ম্যাট অজোনস্টিকসে পরিণত হয়। উদাহরণস্বরূপ: জাভাস্ক্রিপ্টে প্রাকৃতিকভাবে এই বস্তুগুলির মডেলগুলি বেশিরভাগই সিরিয়ায়িত এবং জেএসএনে ডিজিটালাইজড করা হয়েছে, যদি সার্ভারটি যদি কোনওভাবে যোগাযোগের জন্য এক্সএমএল ব্যবহার করে তবে আমার যা পরিবর্তন করা দরকার তা হ'ল সিরিয়ালাইজেশন / ডেসারিয়ালাইজেশন স্তর পরিবর্তন করা দরকার এবং সমস্ত উইজেট শ্রেণি পরিবর্তন করার প্রয়োজন নেই ।
  3. কন্ট্রোলার ক্লাসগুলি যে সার্ভারে ব্যবসায়িক যুক্তি এবং যোগাযোগ পরিচালনা করে + মাঝে মাঝে ক্যাশে স্তর layer এই স্তরটি সার্ভারের যোগাযোগ প্রোটোকলকে নিয়ন্ত্রণ করে এবং প্রয়োজনীয় ডেটাটি অবজেক্ট মডেলগুলিতে রাখে
  4. ক্লাসগুলি তাদের সম্পর্কিত নেমস্পেসগুলিতে খুব সুন্দরভাবে আবৃত হয়। আমি নিশ্চিত যে আমরা সবাই জানি যে জাভাস্ক্রিপ্টে কীভাবে বাজে গ্লোবাল নেমস্পেস থাকতে পারে।

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

jQuery জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক হিসাবে অবিশ্বাস্যভাবে দুর্দান্ত এবং আমি এটি পছন্দ করি, তবে প্রকল্পটি বড় হওয়ার সাথে সাথে আমার ওয়েব অ্যাপ্লিকেশনটির বিশেষত ও অনুশীলনকে মানিক করার সুবিধার্থে আমার স্পষ্টভাবে অতিরিক্ত কাঠামো প্রয়োজন। নিজের জন্য, বেশ কয়েকটি পরীক্ষা-নিরীক্ষার পরে আমি দেখতে পাচ্ছি যে YUI3 বেস এবং উইজেট ( http://yuilibrary.com/yui/docs/widget/ এবং http://yuilibrary.com/yui/docs/base/index.html ) অবকাঠামো সরবরাহ করে ঠিক আমার যা দরকার আমি এগুলি ব্যবহার করার কয়েকটি কারণ।

  1. এটি নেমস্পেস সহায়তা সরবরাহ করে। আপনার কোডের ওও এবং ঝরঝরে প্রতিষ্ঠানের আসল প্রয়োজন
  2. এটি শ্রেণি এবং বস্তুর ধারণাকে সমর্থন করে
  3. এটি আপনার ক্লাসে উদাহরণ ভেরিয়েবল যুক্ত করার একটি মানক উপায় দেয়
  4. এটি ক্লাসের প্রসারকে ঝরঝরেভাবে সমর্থন করে
  5. এটি কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর সরবরাহ করে
  6. এটি রেন্ডার এবং ইভেন্ট বন্ডিং সরবরাহ করে
  7. এটিতে বেস উইজেটের কাঠামো রয়েছে
  8. প্রতিটি উইজেট এখন স্ট্যান্ডার্ড ইভেন্ট ভিত্তিক মডেল ব্যবহার করে একে অপরের সাথে যোগাযোগ করতে সক্ষম
  9. সর্বাধিক গুরুত্বপূর্ণ, এটি সমস্ত ইঞ্জিনিয়ারদের জাভাস্ক্রিপ্ট বিকাশের জন্য একটি ওও স্ট্যান্ডার্ড দেয়

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

YUI3 ব্যবহার করে, আমি বেসকে মডেল হিসাবে প্রসারিত ক্লাসগুলি পৃথক করে এমভিসি প্যাটার্ন তৈরি করতে পরিচালিত করেছি, উইজেটকে ভিউ হিসাবে বিস্তৃত এবং অবশ্যই আপনার নিয়ামক ক্লাস রয়েছে যা প্রয়োজনীয় যুক্তি এবং সার্ভার সাইড কল করছে।

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

কেবল একটি দাবি অস্বীকার, আমি ইয়াহুর পক্ষে কাজ করি না! এবং কেবল এমন একজন স্থপতি যিনি মূল প্রশ্ন দ্বারা উত্থাপিত একই সমস্যাটি মোকাবিলার চেষ্টা করছেন। আমি মনে করি যে কেউ যদি OO কাঠামোর সমতুল্য খুঁজে পায় তবে এটি কাজ করবে। মূলত, এই প্রশ্নটি অন্যান্য প্রযুক্তিগুলিতেও প্রযোজ্য। আমাদের প্রোগ্রামিং দিনগুলিকে আরও পরিচালনাযোগ্য করে তুলতে ওও নীতিমালা + এমভিসি নিয়ে আসা সমস্ত লোকের জন্য Thankশ্বরের ধন্যবাদ Thank


5

আমি আমার সমস্ত ক্লাস / উইজেটগুলিকে পৃথক ফাইলে রূপান্তর করতে ডোজোর প্যাকেজ পরিচালনা ( dojo.requireএবং dojo.provide) এবং ক্লাস সিস্টেম ( dojo.declareযা সাধারণ একাধিক উত্তরাধিকারের জন্যও অনুমতি দেয়) ব্যবহার করি। কেবলমাত্র ডোজই এটি আপনার কোডকে সংগঠিত রাখে না, তবে এটি আপনাকে ক্লাস / উইজেটগুলির সময় লোড করার সময় অলস / করতে দেয়।


3

কিছু দিন আগে, 37 সিগন্যালে ছেলেরা একটি মোচড় দিয়ে একটি আরটিই নিয়ন্ত্রণ প্রকাশ করেছিল । তারা একটি লাইব্রেরি তৈরি করেছে যা জাভাস্ক্রিপ্ট ফাইলগুলিকে এক প্রকার প্রসেসর কমান্ড ব্যবহার করে বান্ডিল করে।

আমার জেএস ফাইলগুলি পৃথক করতে এবং পরে শেষ পর্যন্ত এগুলিকে এক হিসাবে মার্জ করার জন্য আমি এটি ব্যবহার করে আসছি। এইভাবে আমি উদ্বেগগুলি পৃথক করতে পারি এবং শেষ পর্যন্ত পাইপের মধ্য দিয়ে যায় এমন একটি ফাইল রয়েছে (জিজেপড, কম নয়)।

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


1
getprockets.org হ'ল সরাসরি লিঙ্ক
ম্যাট গার্ডনার

3

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

$(function(){
    //Preload header images
    $('a.rollover').preload();

    //Create new datagrid
    var dGrid = datagrid.init({width: 5, url: 'datalist.txt', style: 'aero'});
});

var datagrid = {
    init: function(w, url, style){
        //Rendering code goes here for style / width
        //code etc

        //Fetch data in
        $.get(url, {}, function(data){
            data = data.split('\n');
            for(var i=0; i < data.length; i++){
                //fetching data
            }
        })
    },
    refresh: function(deep){
        //more functions etc.
    }
};

3

আমি খুব সামান্য / বেসিক জিনিসগুলির জন্যও এটি ব্যবহার শুরু করছি এবং কোডটি পরিষ্কার এবং নমনীয় রাখতে সত্যই সহায়তা করে। এমনকি সাধারণ ক্লায়েন্ট-সাইড জেএস ম্যানিপুলেশনের জন্য এটি ব্যবহার করার উপযুক্ত।
চেতন

এটি আমি পছন্দ করি এবং আমার অ্যাপ্লিকেশনগুলিতে ব্যবহার করি।
Andreas

2

আমি মনে করি এটি সম্ভবত ডিডিডি (ডোমেন-ড্রাইভড ডিজাইন) এর সাথে যুক্ত। আমি যে অ্যাপ্লিকেশনটিতে কাজ করছি তাতে একটি আনুষ্ঠানিক এপিআই না থাকলেও সার্ভার-সাইড কোড (শ্রেণি / ফাইলের নাম ইত্যাদি) এর দ্বারা ইঙ্গিত দেয়। এটি সজ্জিত করে, আমি পুরো সমস্যা ডোমেনের ধারক হিসাবে একটি শীর্ষ-স্তরের অবজেক্ট তৈরি করেছি; তারপরে, যেখানে প্রয়োজন সেখানে নামের স্থান যুক্ত করেছি:

var App;
(function()
{
    App = new Domain( 'test' );

    function Domain( id )
    {
        this.id = id;
        this.echo = function echo( s )
        {
            alert( s );
        }
        return this;
    }
})();

// separate file
(function(Domain)
{
    Domain.Console = new Console();

    function Console()
    {
        this.Log = function Log( s )
        {
            console.log( s );
        }
        return this;
    }
})(App);

// implementation
App.Console.Log('foo');

2

জাভাস্ক্রিপ্ট প্রতিষ্ঠানের জন্য নিম্নলিখিত ব্যবহার করা হয়েছে

  1. আপনার সমস্ত জাভাস্ক্রিপ্টের জন্য ফোল্ডার
  2. পৃষ্ঠা স্তরের জাভাস্ক্রিপ্ট পৃষ্ঠার একই নামের সাথে তার নিজস্ব ফাইল পায়। প্রোডাক্ট ডেটেল.এএসপিএক্স হ'ল প্রোডাক্ট ডেটেল.জে এস
  3. লাইব্রেরি ফাইলগুলির জন্য জাভাস্ক্রিপ্ট ফোল্ডারের অভ্যন্তরে আমার একটি lib ফোল্ডার রয়েছে
  4. আপনার অ্যাপ্লিকেশন জুড়ে আপনি যে লাইব ফোল্ডারটি ব্যবহার করতে চান তাতে সম্পর্কিত গ্রন্থাগার ফাংশন রাখুন।
  5. অ্যাজাক্স হ'ল জাভাস্ক্রিপ্ট যা আমি জাভাস্ক্রিপ্ট ফোল্ডারের বাইরে চলে যাই এবং এটির নিজস্ব ফোল্ডারটি পাই। তারপরে আমি দুটি সাব ফোল্ডার ক্লায়েন্ট এবং সার্ভার যুক্ত করব
  6. ক্লায়েন্ট ফোল্ডারটি সমস্ত .js ফাইল পায় যখন সার্ভার ফোল্ডারে সমস্ত সার্ভার সাইড ফাইল পাওয়া যায়।

ফাইল সংস্থার জন্য দুর্দান্ত। আমি কোড দিয়ে এটি না। তবে শেষ পর্যন্ত আমি আমার কোডটি একটি সংকলন করি ... আসুন dll বলি। আপনার জাভাস্ক্রিপ্টের সাথে এটিও দরকার বা আপনি প্রতি পৃষ্ঠায় 15 জেএস ফাইলের অনুরোধ শেষ করবেন।
গ্রাফিক

প্রতি পৃষ্ঠায় 15 জেএস ফাইলের অনুরোধে কোনও ভুল নেই। আপনার ব্রাউজারটি যাইহোক যাইহোক পরবর্তী অনুরোধগুলির জন্য সেগুলি ক্যাশে করবে।
মার্নেন লাইবো-কোসার

@ মার্নেনলাইবো-কোসার একটি পৃষ্ঠায় 15 জেএস ফাইলের অনুরোধ করার একমাত্র বিষয়টি হ'ল ব্রাউজারটি একবারে কতগুলি HTTP রিকোয়েস্টগুলি হ্যান্ডেল করতে পারে requests সুতরাং এগুলিকে একটি ফাইলে বান্ডিল করা ব্রাউজারকে একই সাথে অন্যান্য প্রয়োজনীয় ফাইলগুলির অনুরোধ করার অনুমতি দেয়।

এটি সত্য, তবে প্রথম দু'টি হিট পরে, তারা ব্রাউজারের ক্যাশে থাকবে, সুতরাং তাদের এইচটিটিপি সংযোগের প্রয়োজন হবে না।
মার্নেন লাইবো-কোসার

2

আমি এই ছোট জিনিস ব্যবহার করছি। এটি আপনাকে জেএস এবং এইচটিএমএল টেমপ্লেট উভয়ের জন্য 'অন্তর্ভুক্ত' নির্দেশ দেয়। এটি গণ্ডগোল পুরোপুরি এলিমিনেট করে।

https://github.com/gaperton/include.js/

$.include({
    html: "my_template.html" // include template from file...
})
.define( function( _ ){ // define module...
    _.exports = function widget( $this, a_data, a_events ){ // exporting function...
        _.html.renderTo( $this, a_data ); // which expands template inside of $this.

        $this.find( "#ok").click( a_events.on_click ); // throw event up to the caller...
        $this.find( "#refresh").click( function(){
            widget( $this, a_data, a_events ); // ...and update ourself. Yep, in that easy way.
        });
    }
});

2

আপনি jquery এমএক্স ব্যবহার করতে পারেন (জাভাস্ক্রিপ্ট এমভিসি ব্যবহৃত) যা স্ক্রিপ্টগুলির একটি সেট যা আপনাকে মডেল, দর্শন এবং নিয়ামক ব্যবহার করতে দেয়। আমি এটি একটি প্রকল্পে ব্যবহার করেছি এবং সংকোচনের কারণে ন্যূনতম স্ক্রিপ্ট আকারের সাথে কাঠামোগত জাভাস্ক্রিপ্ট তৈরি করতে সহায়তা করেছি। এটি একটি নিয়ামক উদাহরণ:

$.Controller.extend('Todos',{
  ".todo mouseover" : function( el, ev ) {
   el.css("backgroundColor","red")
  },
  ".todo mouseout" : function( el, ev ) {
   el.css("backgroundColor","")
  },
  ".create click" : function() {
   this.find("ol").append("<li class='todo'>New Todo</li>"); 
  }
})

new Todos($('#todos'));

আপনি যদি jquerymx এর নিয়ামক দিকটিই ব্যবহার করতে পারেন তবে আপনি যদি দৃষ্টিভঙ্গি এবং মডেল অংশগুলিতে আগ্রহী না হন।


1

আপনার প্রশ্নটি এমন একটি যা গত বছরের শেষের দিকে আমাকে জর্জরিত করেছিল। পার্থক্য - কোডটি এমন নতুন বিকাশকারীদের হাতে তুলে দেওয়া, যারা ব্যক্তিগত এবং জনসাধারণের পদ্ধতি কখনও শুনেনি। আমাকে সাধারণ কিছু তৈরি করতে হয়েছিল।

শেষ ফলাফলটি একটি ছোট (প্রায় 1KB) ফ্রেমওয়ার্ক ছিল যা অবজেক্ট লিটারালগুলিকে jQuery এ অনুবাদ করে। সিনট্যাক্সটি স্ক্যান করা দৃশ্যত সহজ, এবং আপনার জেএস সত্যিই বড় হলে আপনি নির্বাচিত ব্যবহৃত, লোড করা ফাইল, নির্ভরশীল ফাংশন ইত্যাদির মতো জিনিসগুলি পুনরায় ব্যবহারযোগ্য প্রশ্নগুলি লিখতে পারেন you

এখানে একটি ছোট কাঠামো পোস্ট করা অবৈজ্ঞানিক, তাই আমি উদাহরণ সহ একটি ব্লগ পোস্ট লিখেছিলাম (আমার প্রথম। এটি ছিল একটি অ্যাডভেঞ্চার!)। আপনি একবার দেখতে স্বাগত জানাই।

এখানে অন্য কারও জন্য কয়েক মিনিটের সাথে এটি পরীক্ষা করে দেখার জন্য, আমি প্রতিক্রিয়ার প্রশংসা করব!

ফায়ারফক্স সুপারিশ করা হয়েছে কারণ এটি অবজেক্ট ক্যোয়ার উদাহরণের জন্য সোর্স () সমর্থন করে।

চিয়ার্স!

আদম


0

আমি আমার ইভেন্টের বেশিরভাগ হ্যান্ডলারের সঞ্চয় করতে বেন নোলানের আচরণের দ্বারা অনুপ্রাণিত একটি কাস্টম স্ক্রিপ্ট ব্যবহার করি (দুঃখের সাথে আমি এর কোনও বর্তমান লিঙ্কটি খুঁজে পাচ্ছি না)। উদাহরণস্বরূপ, এই ইভেন্ট হ্যান্ডলারগুলি ক্লাসের নাম বা আইডি উপাদানগুলি দ্বারা ট্রিগার করা হয়। উদাহরণ:

Behaviour.register({ 
    'a.delete-post': function(element) {
        element.observe('click', function(event) { ... });
    },

    'a.anotherlink': function(element) {
        element.observe('click', function(event) { ... });
    }

});

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


এটা কি যেটা তুমি খুজছো? koders.com/javascript/...
Dok

হ্যাঁ, একটাই! :) লিঙ্কটির পেছনের কোডটি আমি যে সংস্করণটি দ্বারা অনুপ্রাণিত হয়েছিল তার চেয়ে বেশ নতুন is আপনার প্রচেষ্টার জন্য ধন্যবাদ!
অরন রোটভেল

0

আপনার সার্ভার-সাইডের ভাষা কী তা আপনি উল্লেখ করবেন না। অথবা, আরও প্রাসঙ্গিকভাবে, আপনি সার্ভার-সাইডে - কোন ফ্রেমওয়ার্ক ব্যবহার করছেন-

আইএমই, আমি সার্ভার-সাইডে জিনিসগুলি সাজিয়ে রাখি এবং এটি সমস্ত ওয়েব পৃষ্ঠায় ঝাঁকিয়ে দেব। ফ্রেমওয়ার্কটি কেবল প্রতিটি জেএসকেই জেএসকে সংগঠিত করার কাজ দেওয়া হয় না, তবে জেএস টুকরাও যা উত্পন্ন মার্কআপ সহ কাজ করে। এই জাতীয় খণ্ডগুলি আপনি সাধারণত একাধিকবার নির্গত করতে চান না - এ কারণেই তারা সেই সমস্যাটি দেখাশোনা করার জন্য কোডটির কাঠামোতে বিমূর্ত হয়ে যায়। :-)

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

নোট করুন যে এর কোনওটিই আপনাকে দক্ষ জাভাস্ক্রিপ্ট লিখতে বাধা দেয় না! :-)


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