বেশিরভাগ (সমস্ত?) ফ্রেমওয়ার্ক যা আপনি একই সমস্যার সমাধানের দিকে তাকিয়ে রয়েছেন, তবে তারা কিছুটা ভিন্ন লক্ষ্যে কিছুটা ভিন্ন লক্ষ্যে এটি করেন।
আমি মনে করি যে এটা বলা মোটেও সঠিক যে এই সমস্ত প্রকল্পগুলি এই বিভাগগুলির সমস্যাগুলি সমাধান করবে:
- ডিফল্টগুলির বোধগম্য সেট সরবরাহ করুন
- বয়লারপ্লেট কোড হ্রাস করুন
- ব্যাকবোনজেএস বিল্ডিং ব্লকগুলির উপরে অ্যাপ্লিকেশন কাঠামো সরবরাহ করুন
- লেখকরা তাদের অ্যাপগুলিতে ব্যবহার করেন এমন নিদর্শনগুলি বের করুন Ext
মেরিনেট, যা আমি ২০১১ সালের ডিসেম্বর থেকে তৈরি করছি, এর কয়েকটি খুব স্বতন্ত্র লক্ষ্য এবং আদর্শও রয়েছে, যেমন:
- সমন্বিত অ্যাপ্লিকেশন আর্কিটেকচার
- এন্টারপ্রাইজ মেসেজিং প্যাটার্ন প্রভাব
- Modulariization বিকল্পসমূহ
- বর্ধিত ব্যবহার (কোনও কিছুর প্রয়োজন নেই)
- কোনও সার্ভার লক-ইন নেই
- এই ডিফল্টগুলি পরিবর্তন করা সহজ করুন
- কনফিগারেশন / ওভার কনফিগারেশন হিসাবে কোড
আমি বলছি না অন্য ফ্রেমওয়ার্কগুলির কোনওটিরই একই লক্ষ্য নেই। তবে আমি মনে করি মেরিওনেটের স্বতন্ত্রতা এই লক্ষ্যগুলির সংমিশ্রণ থেকে এসেছে।
সমন্বিত অ্যাপ্লিকেশন আর্কিটেকচার
আমি মোটা ক্লায়েন্ট, উইনফোর্ডস এবং সি # ব্যবহার করে বিতরণ করা সফ্টওয়্যার সিস্টেমগুলিতে কাজ করার জন্য 5 বছরেরও বেশি সময় কাটিয়েছি। আমি ডেস্কটপ, ল্যাপটপ (স্মার্ট-ক্লায়েন্ট), মোবাইল ডিভাইস এবং ওয়েব অ্যাপ্লিকেশনগুলির জন্য অ্যাপস তৈরি করেছি, সমস্তই একটি মূল কার্যকারিতা সেট ভাগ করে নিচ্ছে এবং একই সার্ভারের সাথে ব্যাক-এন্ডে অনেকবার কাজ করে যাচ্ছি। এই সময়ে, আমি মডুলারাইজেশনের মান শিখেছি এবং খুব দ্রুত সংশ্লেষ অ্যাপ্লিকেশন ডিজাইনের পথে চলে এসেছি।
মূল ধারণাটি হ'ল আপনার অ্যাপ্লিকেশনটির রানটাইম অভিজ্ঞতা এবং রচনাটি অনেক ছোট, স্বতন্ত্র টুকরো যেগুলি একে অপরের সম্পর্কে অগত্যা জানে না of তারা সামগ্রিক সংমিশ্রণ অ্যাপ্লিকেশন সিস্টেমের সাথে নিজেকে নিবন্ধভুক্ত করে এবং তারপরে তারা ডিউপলড বার্তা এবং কলগুলির বিভিন্ন মাধ্যমে যোগাযোগ করে।
আমি আমার ব্লগে এই সম্পর্কে কিছুটা লিখেছি, মেরিবোনেটকে ব্যাকবোনটির জন্য একটি যৌগিক অ্যাপ্লিকেশন আর্কিটেকচার হিসাবে পরিচয় করিয়ে দিয়েছি:
বার্তা সারি / প্যাটার্নস
একই বৃহত্তর স্কেল, বিতরণ সিস্টেমগুলি বার্তাগুলি হ্যান্ডল করার জন্য মেসেজ কুইং, এন্টারপ্রাইজ ইন্টিগ্রেশন প্যাটার্ন (বার্তা নিদর্শন) এবং পরিষেবা বাসের সুবিধাও নিয়েছে। এটি, অন্য যে কোনও কিছুর চেয়েও বেশি, ডিকপলড সফ্টওয়্যার বিকাশের জন্য আমার পদ্ধতির উপর দুর্দান্ত প্রভাব ফেলেছিল। আমি এই দৃষ্টিকোণ থেকে একক প্রক্রিয়া, ইন-মেমরি উইনফোর্স অ্যাপ্লিকেশনগুলি দেখতে শুরু করেছি এবং শীঘ্রই আমার সার্ভার সাইড এবং ওয়েব অ্যাপ্লিকেশন বিকাশ এটি থেকে প্রভাব নিয়েছে।
আমি কীভাবে ব্যাকবোন অ্যাপ্লিকেশন ডিজাইনের দিকে নজর রাখছি তাতে এটি নিজেই অনুবাদ করেছে। উচ্চ স্তরের অ্যাপ্লিকেশন অবজেক্ট এবং অ্যাপ্লিকেশনের মধ্যে আপনি তৈরি প্রতিটি মডিউল উভয়ের জন্য আমি মেরিওনেটে ইভেন্ট ইভেন্টগ্রিগেটর সরবরাহ করি।
আমি আমার মডিউলগুলির মধ্যে যে বার্তাগুলি প্রেরণ করতে পারি সেগুলি সম্পর্কে আমি ভাবি: কমান্ড বার্তা, ইভেন্ট বার্তা এবং আরও অনেক কিছু। আমি একই প্যাটার্নগুলির সাথে বার্তা হিসাবে সার্ভার সাইড যোগাযোগ সম্পর্কেও ভাবি। কিছু নিদর্শন ইতিমধ্যে মেরিওনেটে প্রবেশ করেছে, তবে কিছু এখনও যায় নি।
modularization
কোডের মডুলারাইজেশন অত্যন্ত গুরুত্বপূর্ণ। ছোট, ভাল এনক্যাপসুলেটেড প্যাকেজগুলি তৈরি করা যা কোনও নির্দিষ্ট আকার এবং জটিলতার যে কোনও সিস্টেমের জন্য ভাল সংজ্ঞায়িত এন্ট্রি এবং প্রস্থান পয়েন্টগুলির সাথে একক ফোকাসযুক্ত।
মেরিনেট এটির module
সংজ্ঞা দিয়ে সরাসরি মডুলারাইজেশন সরবরাহ করে । তবে আমি এটিও স্বীকৃতি দিয়েছি যে কিছু লোক RequireJS পছন্দ করে এবং এটি ব্যবহার করতে চায়। সুতরাং আমি একটি স্ট্যান্ডার্ড বিল্ড এবং একটি প্রয়োজনীয় জেএস সুসংগত বিল্ড উভয়ই সরবরাহ করি।
MyApp = new Backbone.Marionette.Application();
MyApp.module("MyModule", function(MyModule, MyApp, Backbone, Marionette, $, _){
// your module code goes here
});
(এখনও এর জন্য কোনও ব্লগ পোস্ট উপলব্ধ নেই)
বর্ধিত ব্যবহার
মেরিয়েনেটের প্রতিটি অংশে আমি যে মূল দর্শন পেয়েছি তা হ'ল: মেরিওনেট ব্যবহারের জন্য কোনও "অল-অ-কিছুই" প্রয়োজন নেই।
ব্যাকবোন নিজেই এটির সমস্ত ব্লক অবজেক্টগুলির সাথে একটি খুব বর্ধনশীল এবং মডিউলার পদ্ধতি গ্রহণ করে। আপনি কোনটি কখন ব্যবহার করতে চান তা চয়ন করতে পারেন। আমি এই নীতিতে দৃ strongly়ভাবে বিশ্বাস করি এবং মেরিয়েনেট একইভাবে কাজ করে তা নিশ্চিত করার চেষ্টা করি।
সে লক্ষ্যে, আমি মেরিওনেটে তৈরি করেছি বেশিরভাগ টুকরাগুলি একা দাঁড়িয়ে, ব্যাকবোনটির মূল টুকরো নিয়ে কাজ করার জন্য এবং আরও ভালভাবে একসাথে কাজ করার জন্য নির্মিত।
উদাহরণস্বরূপ, প্রায় প্রতিটি ব্যাকবোন অ্যাপ্লিকেশনটির গতিশীলভাবে পর্দার একটি নির্দিষ্ট জায়গায় ব্যাকবোন ভিউ দেখাতে হবে। অ্যাপ্লিকেশনগুলিতে পুরানো ভিউগুলি বন্ধ করার এবং মেমরি পরিষ্কার করার সময় কোনও নতুন স্থিতি স্থাপন করা দরকার। এখানেই মেরিওনেট Region
খেলতে আসে। একটি অঞ্চল বয়লারপ্লেট কোডটি দেখার জন্য, তাতে রেন্ডার কল করার জন্য এবং ফলাফলটি আপনার জন্য ডোমকে পূরণ করার জন্য পরিচালনা করে। তারপরে সেই দৃশ্যটি বন্ধ হয়ে যাবে এবং আপনার জন্য এটি পরিষ্কার করে দেওয়া হবে, তবে আপনার দর্শনটিতে এটি "বন্ধ" পদ্ধতি রয়েছে।
MyApp.addRegions({
someRegion: "#some-div"
});
MyApp.someRegion.show(new MyView());
তবে অঞ্চলটি ব্যবহার করার জন্য আপনাকে মেরিওনেটের দৃষ্টিভঙ্গি ব্যবহার করার দরকার নেই। একমাত্র প্রয়োজন হ'ল আপনি ব্যাকবোন থেকে প্রসারিত করছেন the অবজেক্টের প্রোটোটাইপ শৃঙ্খলার কোনও পর্যায়ে দেখুন। আপনি যদি কোনও close
পদ্ধতি, কোনও onShow
পদ্ধতি বা অন্যকে সরবরাহ করা চয়ন করেন তবে মেরিওনেট অঞ্চলটি আপনার জন্য এটি সঠিক সময়ে কল করবে।
সার্ভার লক-ইন নেই
আমি বিভিন্ন সার্ভার প্রযুক্তির উপরে ব্যাকবোন / মেরিওনেট অ্যাপস তৈরি করি:
- এএসপি.নেট এমভিসি
- রুবেলে রেল
- রুবি / সিনেট্রা
- নোডজেএস / এক্সপ্রেসজেএস
- পিএইচপি / স্লিম
- জাভা
- Erlang
- ... এবং আরও অনেক কিছু
জাভাস্ক্রিপ্টটি জাভাস্ক্রিপ্ট, যখন এটি ব্রাউজারে চলার বিষয়টি আসে। সার্ভার সাইড জাভাস্ক্রিপ্টও দুর্দান্ত, তবে আমি কীভাবে আমার ব্রাউজার ভিত্তিক জাভাস্ক্রিপ্ট লিখি তার উপরে শূন্য প্রভাব বা প্রভাব রয়েছে।
যে প্রকল্পগুলিতে আমি তৈরি করেছি এবং তার ক্লায়েন্টগুলি ব্যাক-এন্ড প্রযুক্তিগুলি ব্যবহার করে তার বৈচিত্রের কারণে আমি কোনও কারণে কোনও একক সার্ভার সাইড প্রযুক্তি স্ট্যাকের মধ্যে মেরিয়নেটকে লক করতে পারি না এবং করব না। আমি একটি বয়লারপ্লেট প্রকল্প সরবরাহ করব না। আমি কোনও রুবি রত্ন বা এনপিএম প্যাকেজ সরবরাহ করব না। আমি চাই লোকেরা বুঝতে পারে যে মেরিওনেটের জন্য নির্দিষ্ট ব্যাক-এন্ড সার্ভারের প্রয়োজন হয় না। এটি ব্রাউজারটি জাভাস্ক্রিপ্ট ভিত্তিক, এবং পিছনের দিকটির কোনও বিষয় নেই।
অবশ্যই, আমি অন্যদের তাদের ভাষা এবং কাঠামোর জন্য প্যাকেজ সরবরাহ করতে সম্পূর্ণ সমর্থন করি। আমি উইকিতে সেই প্যাকেজগুলি তালিকাভুক্ত করেছি এবং আশা করি যে লোকেরা তাদের প্রয়োজনীয়তা দেখায় আরও প্যাকেজ তৈরি করতে থাকবে। তবে তা হ'ল সম্প্রদায়ের সমর্থন, মেরিয়েনেটের সরাসরি সমর্থন নয়।
সহজেই ডিফল্ট পরিবর্তন করুন
বয়লারপ্লেট কোড হ্রাস করার এবং বুদ্ধিমান ডিফল্টগুলি সরবরাহ করার জন্য আমার প্রচেষ্টায় (যা একটি ধারণা যা আমি সরাসরি টিম ব্রায়েনের লেআউটম্যানেজারের কাছ থেকে "ধার" পেয়েছি), আমি অন্যান্য বিকাশকারীদের আমার চেয়ে কিছুটা আলাদা বাস্তবায়ন ব্যবহার করার প্রয়োজনীয়তাকে স্বীকার করি।
আমি <script>
ডিফল্টরূপে টেম্পলেটগুলি বোঝার জন্য টেমপ্লেটগুলির জন্য ইনলাইন ট্যাগগুলির উপর ভিত্তি করে রেন্ডারিং সরবরাহ করি । তবে আপনি মেরিয়নেটে Renderer
এবং / অথবা TempalteCache
অবজেক্টগুলি পরিবর্তন করে এটি প্রতিস্থাপন করতে পারেন । এই দুটি বস্তু রেন্ডারিং ক্ষমতাগুলির মূল সরবরাহ করে এবং এখানে উইকি পৃষ্ঠাগুলি রয়েছে যা নির্দিষ্ট টেম্প্লেটিং ইঞ্জিন এবং টেম্পলেট লোড করার বিভিন্ন উপায়ে কীভাবে এটি পরিবর্তন করতে পারে তা দেখায়।
মেরিনেটের v0.9 এর সাথে এটি আরও সহজ হয়ে যায়। উদাহরণস্বরূপ, আপনি যদি প্রাক-সংকলিত টেম্পলেটগুলির সাথে ইনলাইন টেম্পলেট স্ক্রিপ্ট ব্লকগুলির ব্যবহার প্রতিস্থাপন করতে চান তবে আপনাকে কেবলমাত্র রেন্ডারারে একটি পদ্ধতি প্রতিস্থাপন করতে হবে:
Backbone.Marionette.Renderer.render = function(template, data){
return template(data);
};
এবং এখন পুরো অ্যাপ্লিকেশনটি প্রাক-সংকলিত টেম্পলেটগুলি ব্যবহার করবে যা আপনি আপনার দর্শনের template
বৈশিষ্ট্যের সাথে সংযুক্ত করেন ।
এমনকি আমি একটি মেরিনেট সরবরাহ করি v v0.9 এর সাথে একটি অ্যাঙ্ক-অন্যাস যা আপনাকে অবিচ্ছিন্নভাবে রেন্ডারিং ভিউগুলিকে সমর্থন করতে সহায়তা করে। মেরিনিয়েটে ডিফল্ট আচরণগুলি প্রতিস্থাপন করা যতটা সম্ভব সহজ করার জন্য আমি অবিরাম চেষ্টা করছি ve
কনফিগারেশন হিসাবে কোড
আমি নির্দিষ্ট প্রসঙ্গে "কনভেনশন ওভার কনফিগারেশন" এর ভক্ত। এটি জিনিসগুলি সম্পন্ন করার একটি শক্তিশালী উপায়, এবং মেরিওনেট এটির সামান্য পরিমাণ সরবরাহ করে - যদিও খুব বেশি নয়, সততার সাথে। অন্যান্য অনেকগুলি ফ্রেমওয়ার্ক - বিশেষত লেআউটম্যানেজার - মেরিওনেটের চেয়ে কনফিগারেশনের অধিক কনভেনশন সরবরাহ করে।
এটি উদ্দেশ্য এবং উদ্দেশ্য নিয়ে করা হয়।
অর্থবহ এবং দ্রুত উপায়ে কাজ করার জন্য কনভেনশন পাওয়ার চেষ্টা করার যন্ত্রণা জানার জন্য আমি পর্যাপ্ত জাভাস্ক্রিপ্ট প্লাগইনস, ফ্রেমওয়ার্ক, অ্যাড-অনস এবং অ্যাপ্লিকেশনগুলি তৈরি করেছি। এটি গতিতে সম্পন্ন করা যেতে পারে তবে সাধারণত এটি ব্যয় করে এটি পরিবর্তন করতে সক্ষম হয়।
সে লক্ষ্যে, আমি মেরিওনেটে "কনফিগারেশন হিসাবে কোড" গ্রহণ করি approach আমি প্রচুর "কনফিগারেশন" এপিআই সরবরাহ করি না যেখানে আপনি স্ট্যাটিক মানগুলির সাথে আক্ষরিক কোনও বস্তু সরবরাহ করতে পারেন যা আচরণের সোয়াথ পরিবর্তন করে। পরিবর্তে, আমি প্রতিটি অবজেক্টের যে পদ্ধতিগুলি নথিভুক্ত করি - উভয় টীকাযুক্ত উত্স কোডের মাধ্যমে এবং আসল এপিআই ডকুমেন্টেশনের মাধ্যমে - কীভাবে আপনার পছন্দ মতো কাজ করতে মেরিয়েনেট পরিবর্তন করতে হয় তা আপনাকে জানানোর অভিপ্রায় দিয়ে।
মেরিওনেট অবজেক্টগুলির জন্য একটি পরিষ্কার এবং স্পষ্ট এপিআই সরবরাহ করে, আমি এমন একটি পরিস্থিতি তৈরি করি যেখানে একটি নির্দিষ্ট অবজেক্ট বা মেরিওনেটের আচরণকে পুরোপুরি পরিবর্তিত করা তুলনামূলকভাবে সহজ এবং খুব নমনীয়। আপনার পছন্দসই জিনিসগুলি যেভাবে কাজ করতে পারে তার জন্য আপনার নিজস্ব কোড সরবরাহের নমনীয়তার জন্য আমি "সাধারণ" কনফিগারেশন এপিআই কলগুলি ত্যাগ করি।
আপনি মেরিওনেটে কোনও "কনফিগার" বা "বিকল্পগুলি" API খুঁজে পাবেন না। তবে আপনি বিপুল সংখ্যক পদ্ধতি আবিষ্কার করতে পারবেন যা প্রত্যেকে স্বচ্ছ স্বাক্ষর সহ খুব নির্দিষ্ট উদ্দেশ্যে পরিবেশন করে, যা মেরিওনেট কীভাবে কাজ করে তা পরিবর্তন করা সহজ করে তোলে।