সম্প্রতি, আমি গোঁফ ছুটেছি যা লজিক-কম টেম্পলেট বলে দাবি করা হচ্ছে ।
তবে এটি লজিক-কম উপায়ে কেন ডিজাইন করা হয়েছে তার কোনও ব্যাখ্যা নেই। অন্য কথায়, লজিক-কম টেম্পলেটটির সুবিধা কী?
সম্প্রতি, আমি গোঁফ ছুটেছি যা লজিক-কম টেম্পলেট বলে দাবি করা হচ্ছে ।
তবে এটি লজিক-কম উপায়ে কেন ডিজাইন করা হয়েছে তার কোনও ব্যাখ্যা নেই। অন্য কথায়, লজিক-কম টেম্পলেটটির সুবিধা কী?
উত্তর:
অন্য কথায়, এটি আপনাকে পায়ে গুলি করা থেকে বিরত করে। পুরানো জেএসপির দিনগুলিতে, আপনার কোডটি ছড়িয়ে ছিটিয়ে থাকার কারণে জেএসপি ফাইলগুলি জাভা কোডের সাথে ছিটিয়ে দেওয়া খুব সাধারণ ছিল।
আপনি যদি ডিজাইনের মাধ্যমে টেমপ্লেটগুলিতে লজিক প্রতিরোধ করেন (গোঁফ যেমন করে) তবে আপনি যুক্তি অন্য কোথাও রাখতে বাধ্য হবেন, যাতে আপনার টেমপ্লেটগুলি নিরবচ্ছিন্ন হয়ে যায়।
আরেকটি সুবিধা হ'ল আপনি উদ্বেগের পৃথকীকরণের শর্তে ভাবতে বাধ্য হচ্ছেন: আপনার নিয়ামক বা লজিক কোডটি ইউআইতে ডেটা প্রেরণের আগে ডেটা ম্যাসেজ করতে হবে। যদি আপনি পরে আপনার টেমপ্লেটটি অন্যটির জন্য স্যুইচ করেন (আসুন আমরা বলি যে আপনি একটি ভিন্ন টেম্প্লেটিং ইঞ্জিন ব্যবহার শুরু করেছেন), স্থানান্তরটি সহজ হবে কারণ আপনাকে কেবলমাত্র ইউআই বিবরণ প্রয়োগ করতে হয়েছিল (যেহেতু টেমপ্লেটে কোনও যুক্তি নেই, মনে রাখবেন)।
আমি অনুভব করি যে আমি আমার মতে প্রায় একা, তবে আমি দৃ opposite়ভাবে বিপরীত শিবিরে রয়েছি। আমি বিশ্বাস করি না যে আপনার টেমপ্লেটগুলিতে ব্যবসায়ের যুক্তির মিশ্রণ আপনার প্রোগ্রামিং ভাষার সম্পূর্ণ শক্তি ব্যবহার না করার যথেষ্ট কারণ।
লজিক-কম টেম্পলেটগুলির জন্য সাধারণ যুক্তিটি হ'ল যদি আপনার প্রোগ্রামিং ল্যাঙ্গুয়েজে আপনার সম্পূর্ণ অ্যাক্সেস থাকে তবে আপনি যুক্তিতে মিশ্রিত করতে পারেন যা কোনও টেম্পলেটে নেই। আমি এই যুক্তিযুক্ত হতে পেলাম যে মাংসের টুকরো টুকরো করার জন্য আপনার একটি চামচ ব্যবহার করা উচিত কারণ আপনি যদি ছুরি ব্যবহার করেন তবে নিজেকে কাটাতে পারেন। এটি খুব সত্য, এবং তবুও আপনি যদি পরে ব্যবহার করেন তবে সাবধানতার সাথে আপনি আরও বেশি উত্পাদনশীল হবেন।
উদাহরণস্বরূপ, গোঁফ ব্যবহার করে নিম্নলিখিত টেম্পলেট স্নিপেটটি বিবেচনা করুন :
{{name}}:
<ul>
{{#items}}
<li>{{.}}</li>
{{/items}}
</ul>
আমি এটি বুঝতে পারি, তবে আমি নিম্নলিখিতগুলি ( আন্ডারস্কোর ব্যবহার করে ) আরও বেশি সহজ এবং প্রত্যক্ষ হতে পাই :
<%- name %>:
<ul>
<% _.each(items, function(i){ %>
<li><%- i %></li>
<% }); %>
</ul>
বলা হচ্ছে, আমি বুঝতে পারি যে লজিকলেস টেমপ্লেটগুলির সুবিধা রয়েছে (উদাহরণস্বরূপ, তারা পরিবর্তন ছাড়াই একাধিক প্রোগ্রামিং ভাষার সাথে ব্যবহার করা যেতে পারে)। আমি মনে করি এই অন্যান্য সুবিধা খুব গুরুত্বপূর্ণ। আমি মনে করি না যে তাদের যুক্তি-স্বভাবের প্রকৃতি তাদের মধ্যে একটি।
name
এবং items
এতে জাভাস্ক্রিপ্ট থাকতে পারে।
গোঁফ কি লজিক কম?
এটি না:
{{#x}}
foo
{{/x}}
{{^x}}
bar
{{/x}}
বেশ কি এর সাথে মিল আছে?
if x
"foo"
else
"bar"
end
আর নয় যে চমত্কার অনুরূপ (পড়া: এর প্রায় এক ডেফিনেশন) উপস্থাপনা যুক্তিবিজ্ঞান?
if x > 0 && x < 10
) ... সুতরাং, যুক্তি দিয়ে বা ছাড়াই গোঁফ ব্যবহার করা সম্ভব হলেও এটি আপনার বিষয়। সর্বোপরি, এটি কেবল একটি সরঞ্জাম।
লজিক-কম টেম্পলেটটি এমন একটি টেম্পলেট যা আপনার পূরণ করার জন্য ছিদ্রযুক্ত এবং আপনি কীভাবে এটি পূরণ করেন তা নয়। যুক্তি অন্য কোথাও স্থাপন করা হয়েছে এবং সরাসরি টেম্পলেটে ম্যাপ করা হয়েছে। উদ্বেগের এই বিভাজনটি আদর্শ কারণ তখন টেমপ্লেটটি সহজেই বিভিন্ন যুক্তি দিয়ে তৈরি করা যেতে পারে, এমনকি কোনও আলাদা প্রোগ্রামিং ভাষার সাথেও তৈরি করা যায়।
থেকে গোঁফ ম্যানুয়াল :
আমরা এটিকে "যুক্তি-কম" বলি কারণ বিবৃতি, অন্য ধারা বা লুপের জন্য যদি থাকে না are পরিবর্তে কেবল ট্যাগ রয়েছে। কিছু ট্যাগ একটি মান, কিছু না কিছুই, এবং কিছু মান একটি সিরিজ দিয়ে প্রতিস্থাপিত হয়। এই নথিটি বিভিন্ন ধরণের গোঁফ ট্যাগের ব্যাখ্যা করে।
মুদ্রার উল্টো দিকটি হ'ল ব্যবসায়ের যুক্তি উপস্থাপনা থেকে দূরে রাখতে মরিয়া প্রয়াসে আপনি মডেলটিতে প্রচুর উপস্থাপনা যুক্তি যুক্ত করেন। একটি সাধারণ উদাহরণ হতে পারে যে আপনি কোনও টেবিলের বিকল্প সারিগুলিতে "বিজোড়" এবং "এমনকি" ক্লাস রাখতে চান, যা ভিউ টেম্পলেটে একটি সাধারণ মডুলো অপারেটর দিয়ে করা যেতে পারে। তবে যদি আপনার ভিউ টেমপ্লেট আপনাকে এটি করতে দেয় না, তবে আপনার মডেল ডেটাতে আপনাকে কেবল কোন সারিটি বিজোড় বা সমান নয় তা সংরক্ষণ করতে হবে, তবে আপনার টেম্পলেট ইঞ্জিনটি কতটা সীমাবদ্ধ তার উপর নির্ভর করে আপনাকে এমনকি আপনার মডেলকে দূষিত করার প্রয়োজন হতে পারে আসল সিএসএস ক্লাসের নাম সহ। মডেলগুলি থেকে পুরো স্টপেজ থেকে পৃথক হওয়া উচিত। তবে মডেলগুলিকে অ্যাউনস্টিকও দেখা উচিত এবং এই "নো-লজিক" টেম্পলেট ইঞ্জিনগুলি আপনাকে ভুলে যেতে বাধ্য করে। যুক্তি উভয় জায়গায় যায়,আসলে কোথায় যায় তা সঠিকভাবে সিদ্ধান্ত নিতে পারে। এটি কি উপস্থাপনা উদ্বেগ, বা ব্যবসা / ডেটা উদ্বেগ? ১০০% আদিম দৃষ্টিভঙ্গির প্রয়াসের জন্য, দূষণটি কেবল অন্য কম দৃশ্যমান তবে সমানভাবে অনুচিত জায়গায় অবতরণ করে।
অন্যদিকে ফিরে ক্রমবর্ধমান একটি আন্দোলন রয়েছে এবং আশা করা যায় যে বিষয়গুলি আরও যুক্তিসঙ্গত মধ্যম স্থলে কোথাও স্থান পাবে।
এটি আপনার টেমপ্লেটগুলি পরিষ্কার করে তোলে এবং এটি এমন জায়গায় যুক্তি রাখতে বাধ্য করে যেখানে এটি সঠিকভাবে ইউনিট-টেস্ট করা যেতে পারে।
এই কথোপকথনটি মনে হয় যখন মধ্যবয়সী ভিক্ষুরা যখন পিনের শেষে কত স্বর্গদূতকে ফিট করতে পারে সে নিয়ে বিতর্ক করবেন। অন্য কথায় এটি ধর্মীয়, নিরর্থক এবং ভুলভাবে কেন্দ্রীভূত বোধ করা শুরু করে।
মিনি-রেন্ট ফলস্বরূপ (উপেক্ষা করে নির্দ্বিধায়):
আপনি যদি পড়া চালিয়ে যেতে না চান .. উপরের বিষয়ে আমার সংক্ষিপ্ত প্রতিক্রিয়া হ'ল: আমি যুক্তি-কম টেম্পলেটগুলির সাথে একমত নই আমি এটিকে চরমপন্থার একটি প্রোগ্রামিং রূপ হিসাবে মনে করি। :-) :-)
এখন আমার রেন্ট পুরোদমে চলছে: :-)
আমি মনে করি আপনি যখন অনেকগুলি ধারণাকে চূড়ান্ত দিকে নিয়ে যান, ফলাফলটি হাস্যকর হয়। এবং কখনও কখনও (যেমন এই বিষয়) বিষয়টি হ'ল আমরা "ভুল" ধারণাটিকে চূড়ান্ত দিকে নিয়ে যাই।
ভিউ থেকে সমস্ত যুক্তি সরিয়ে ফেলা হচ্ছে "হাস্যকর" এবং ভুল ধারণা।
এক মুহুর্তের জন্য পিছনে যান।
আমাদের নিজেদেরকে যে প্রশ্নটি জিজ্ঞাসা করা উচিত তা হ'ল যুক্তিটি কেন সরিয়ে? ধারণাটি হ'ল উদ্বেগকে আলাদা করা । যতটা সম্ভব ব্যবসায়ের যুক্তি থেকে দর্শন প্রক্রিয়াকরণকে আলাদা রাখুন। কেন এমন করবেন? এটি আমাদের মতামতগুলি (বিভিন্ন প্ল্যাটফর্মের জন্য: মোবাইল, ব্রাউজার, ডেস্কটপ ইত্যাদির জন্য) বদলাতে দেয় এবং এটি আমাদের আরও সহজেই নিয়ন্ত্রণ-প্রবাহ, পৃষ্ঠার সিক্যুয়েন্স, বৈধতা পরিবর্তন, মডেল পরিবর্তনগুলি, সুরক্ষা অ্যাক্সেস ইত্যাদি সরিয়ে নিতে দেয় Also এছাড়াও যখন যুক্তি থাকে ভিউগুলি (বিশেষত ওয়েব দর্শন) থেকে সরানো হয়েছে, এটি দর্শনগুলি আরও বেশি পঠনযোগ্য এবং তাই আরও রক্ষণাবেক্ষণযোগ্য করে তোলে। আমি এটি পেয়েছি এবং এটির সাথে একমত
তবে ওভাররাইডিং ফোকাস উদ্বেগের পৃথকীকরণের দিকে হওয়া উচিত। 100% যুক্তি-কম দর্শন নয়। দর্শনগুলির মধ্যে যুক্তিটির কীভাবে "মডেল" রেন্ডার করা যায় তার সাথে সম্পর্কিত হওয়া উচিত। যতদূর আমি উদ্বিগ্ন, ভিউগুলিতে যুক্তি পুরোপুরি ঠিক আছে। আপনার কাছে এমন দর্শন-যুক্তি থাকতে পারে যা ব্যবসায়-যুক্তি নয়।
হ্যাঁ, যেদিন আমরা জেএসপি, পিএইচপি বা এএসপি পৃষ্ঠাগুলি কোড যুক্তি এবং দৃষ্টিভঙ্গি দেখার সামান্য বা পৃথকীকরণের সাথে লিখেছিলাম, এই ওয়েব-অ্যাপগুলির রক্ষণাবেক্ষণ ছিল এক চরম দুঃস্বপ্ন। বিশ্বাস করুন আমি জানি, আমি এর মধ্যে কয়েকটি বিদ্যা তৈরি করেছি এবং রক্ষণ করেছি। এই রক্ষণাবেক্ষণের পর্যায়েই আমি আমার এবং আমার সহকর্মীদের উপায়গুলি (দৃষ্টিভঙ্গিভাবে) বুঝতে পেরেছিলাম। :-) :-)
সুতরাং উচ্চ থেকে আদেশটি (শিল্প পন্ডিতরা) হয়ে উঠল, আপনাকে অবশ্যই অবশ্যই একটি ওয়েব-অ্যাপ্লিকেশনকে ফ্রন্ট-ভিউ কন্ট্রোলারের মতো কিছু ব্যবহার করে গঠন করতে হবে (যা হ্যান্ডলার বা ক্রিয়াকলাপে প্রেরণ করা হয়েছে [আপনার ওয়েব-কাঠামো চয়ন করুন) এবং আপনার ভিউগুলিতে অবশ্যই কোনও কোড থাকতে হবে । মতামতগুলি বোবা টেম্পলেটগুলি হয়ে উঠবে।
সুতরাং আমি উপরোক্ত অনুভূতির সাথে সাধারণভাবে একমত হয়েছি, আদেশের আইটেমগুলির সুনির্দিষ্টতার জন্য নয়, বরং আদেশের পিছনে অনুপ্রেরণা - যা দৃষ্টিভঙ্গি এবং ব্যবসায়িক যুক্তির মধ্যে উদ্বেগের বিচ্ছিন্নতার ইচ্ছা।
আমি যে একটি প্রকল্পে জড়িত ছিলাম তাতে আমরা হাস্যকর চরমের প্রতি যুক্তিযুক্ত-কম ভিউ ধারণাটি অনুসরণ করার চেষ্টা করেছি। আমাদের একটি হোম-বর্ধিত টেম্পলেট ইঞ্জিন ছিল যা আমাদের এইচটিএমএলে মডেল অবজেক্টগুলি রেন্ডার করতে দেয়। এটি একটি সাধারণ টোকেন ভিত্তিক সিস্টেম ছিল। এটি একটি খুব সাধারণ কারণে ভয়ানক ছিল। কখনও কখনও একটি দৃশ্যে আমাদের সিদ্ধান্ত নিতে হয়েছিল, আমি কি এইচটিএমএলের এই ছোট্ট স্নিপেটটি প্রদর্শন করব .. বা না .. সিদ্ধান্তটি সাধারণত মডেলের কিছু মানের ভিত্তিতে হয়। যখন আপনার দৃষ্টিভঙ্গিতে একেবারে কোনও যুক্তি নেই, আপনি কীভাবে এটি করেন? ভাল আপনি পারবেন না। আমাদের আর্কিটেক্টের সাথে এই সম্পর্কে কিছু বড় যুক্তি ছিল। আমাদের দৃষ্টিভঙ্গি লেখার সম্মুখ-প্রান্তের এইচটিএমএল লোকেরা যখন এগুলির মুখোমুখি হয়েছিল তখন তারা সম্পূর্ণরূপে ব্যথিত হয়েছিল এবং তারা খুব চাপে পড়েছিল কারণ তারা তাদের অন্যথায় সাধারণ উদ্দেশ্যগুলি অর্জন করতে পারেনি। সুতরাং আমি আমাদের টেম্প্লেটিং ইঞ্জিনের মধ্যে একটি সাধারণ আইএফ-বিবৃতি ধারণাটি চালু করেছি। আমি আপনাকে স্বস্তি ও শান্তির বর্ণনা দিতে পারি না। আমাদের টেমপ্লেটগুলিতে একটি সাধারণ আইএফ-বিবৃতি ধারণা নিয়ে সমস্যাটি সমাধান করা হয়েছিল! হঠাৎ আমাদের টেম্প্লেটিং ইঞ্জিনটি ভাল হয়ে গেল।
তাহলে আমরা কীভাবে এই নির্বিকার চাপের মধ্যে পড়ে গেলাম? আমরা ভুল উদ্দেশ্যে মনোনিবেশ করেছি। আমরা নিয়মটি অনুসরণ করেছি, আপনার দৃষ্টিভঙ্গিতে আপনার কোনও যুক্তি থাকতে হবে না। এটা ভুল ছিল। আমি মনে করি "নিয়ম-এর-থাম্ব" হওয়া উচিত, আপনার মতামতগুলিতে সেই পরিমাণ যুক্তি হ্রাস করুন। কারণ আপনি যদি তা না করেন তবে অসাবধানতাবশত ব্যবসায়িক যুক্তিগুলিকে এই দৃষ্টিতে ক্রপ হতে দেয় - যা উদ্বেগের বিচ্ছেদকে লঙ্ঘন করে।
আমি বুঝতে পেরেছি যে আপনি যখন ঘোষণা করেন যে "ভিউগুলিতে আপনার কোনও যুক্তি থাকতে হবে না", আপনি কখন "ভাল" প্রোগ্রামার হচ্ছেন তা জানা সহজ হয়ে যায়। (যদি এটি হয় আপনার মঙ্গলতার পরিমাপ)। এখন উপরোক্ত নিয়ম সহ এমনকি মাঝারি জটিলতার একটি ওয়েব-অ্যাপ কার্যকর করার চেষ্টা করুন। এটি এত সহজে হয় না।
আমার জন্য, ভিউগুলিতে যুক্তির নিয়মটি এতটা পরিষ্কার নয় এবং খোলামেলাভাবে আমি সেখান থেকেই এটি চাই।
আমি যখন ভিউগুলিতে প্রচুর যুক্তি দেখি, তখন আমি একটি কোড-গন্ধ সনাক্ত করি এবং ভিউগুলি থেকে বেশিরভাগ যুক্তি সরিয়ে দেওয়ার চেষ্টা করি - আমি অন্য কোথাও ব্যবসায়ের যুক্তি নিশ্চিত করার চেষ্টা করি - আমি উদ্বেগগুলি আলাদা করার চেষ্টা করি। তবে যখন আমি এমন লোকদের সাথে চ্যাট শুরু করি যারা বলে যে আমাদের অবশ্যই এই দৃষ্টিকোণ থেকে সমস্ত যুক্তি সরিয়ে ফেলতে হবে, ভাল, আমার কাছে, যে কেবল ধর্মান্ধতার স্ম্যাকস হিসাবে আমি জানি যে আপনি উপরে বর্ণিত পরিস্থিতিতে যেমন শেষ করতে পারেন।
আমি আমার ভাড়া নিয়ে কাজ শেষ করেছি। :-)
চিয়ার্স,
ডেভিড
লজিকলেস টেম্পলেটগুলির জন্য আমি যে সর্বোত্তম যুক্তি নিয়ে এসেছি তা হ'ল আপনি ক্লায়েন্ট এবং সার্ভার উভয় ক্ষেত্রে একই একই টেম্পলেট ব্যবহার করতে পারেন। তবে আপনার আসলে যুক্তিবিহীন দরকার নেই, কেবলমাত্র এটির নিজস্ব "ভাষা" রয়েছে। আমি এমন লোকদের সাথে একমত হই যারা অভিযোগ করে যে গোঁফ অর্থহীনভাবে সীমাবদ্ধ করে চলেছে। ধন্যবাদ, তবে আমি একটি বড় ছেলে এবং আমি আপনার সাহায্য ছাড়াই আমার টেমপ্লেটগুলি পরিষ্কার রাখতে পারি।
অন্য বিকল্পটি হ'ল একটি টেম্প্লেটিং সিনট্যাক্স সন্ধান করুন যা ক্লায়েন্ট এবং সার্ভার উভয়ই সমর্থিত এমন একটি ভাষা ব্যবহার করে যা সার্ভারে জাভাস্ক্রিপ্ট হয় নোড.জেএস ব্যবহার করে অথবা আপনি জেএস ইন্টারপ্রেটার এবং জেসসনকে থেরুবাইরারের মতো কোনও কিছুর মাধ্যমে ব্যবহার করতে পারেন।
তারপরে আপনি haml.js এর মতো কিছু ব্যবহার করতে পারেন যা এখন পর্যন্ত সরবরাহ করা উদাহরণগুলির তুলনায় অনেক পরিষ্কার এবং দুর্দান্ত কাজ করে।
একটি বাক্যে: লজিক-কম মানে টেমপ্লেট ইঞ্জিনটি নিজেই কম জটিল এবং তাই এর চেয়ে ছোট পদক্ষেপ রয়েছে এবং এটি অপ্রত্যাশিতভাবে আচরণ করার জন্য কম উপায় রয়েছে।
যদিও প্রশ্নটি পুরানো এবং উত্তর দেওয়া হয়েছে, আমি আমার 2 to যুক্ত করতে চাই (যা কোনও রেন্টের মতো মনে হতে পারে, তবে এটি সীমাবদ্ধতার বিষয়ে নয় এবং যখন তারা অগ্রহণযোগ্য হয়)।
কোনও টেম্পলেটটির লক্ষ্য হ'ল কিছু সরবরাহ করা, ব্যবসায়িক যুক্তি সম্পাদন করা নয়। এখন একটি টেমপ্লেটে আপনার যা করা দরকার তা করতে সক্ষম না হওয়ায় এবং সেগুলিতে "ব্যবসায়িক যুক্তি" থাকার মধ্যে একটি পাতলা রেখা রয়েছে। যদিও আমি গোঁফের প্রতি সত্যই ইতিবাচক ছিলাম এবং এটি ব্যবহার করার চেষ্টা করেছি, তবে খুব সহজ ক্ষেত্রে আমার যা প্রয়োজন তা করতে সক্ষম না হয়ে আমি শেষ হয়ে গেলাম।
উপাত্তের "ম্যাসেজিং" (গৃহীত উত্তরের শব্দগুলি ব্যবহার করতে) একটি আসল সমস্যা হয়ে উঠতে পারে - এমনকি সহজ পাথও সমর্থিত নয় (হ্যান্ডলবার্স.জেস সম্বোধন করে এমন কিছু)। আমার কাছে যদি ডেটা দেখার ডেটা থাকে এবং আমার এই টুইটটি করা দরকার যে প্রতিবারই আমি কোনও কিছু রেন্ডার করতে চাই কারণ আমার টেম্পলেট ইঞ্জিনটি খুব সীমিত, তবে এটি শেষ পর্যন্ত সহায়ক নয়। এবং এটি প্ল্যাটফর্ম-স্বাধীনতার অংশটিকে পরাস্ত করে যা গোঁফ নিজের জন্য দাবী করে; আমাকে সর্বত্র ম্যাসেজ করার যুক্তিকে নকল করতে হবে।
এটি বলেছিল, কিছুটা হতাশার পরে এবং অন্যান্য টেম্পলেট ইঞ্জিনগুলি চেষ্টা করার পরে আমরা আমাদের নিজস্ব (... এখনও অন্য একটি ...) তৈরি করে শেষ করেছি, যা .NET রেজার টেম্পলেটগুলি দ্বারা অনুপ্রাণিত সিনট্যাক্স ব্যবহার করে। এটি সার্ভারে বিশ্লেষণ করে সংকলন করা হয়েছে এবং একটি সাধারণ, স্ব-অন্তর্ভুক্ত জেএস ফাংশন তৈরি করে (আসলে প্রয়োজনীয় জেএস মডিউল হিসাবে) যা ফলস্বরূপ একটি স্ট্রিং ফিরিয়ে টেমপ্লেটটি "চালানো" করতে অনুরোধ করা যেতে পারে। ব্র্যাডের দেওয়া নমুনাটি আমাদের ইঞ্জিনটি ব্যবহার করার সময় এটির মতো দেখাবে (যা আমি ব্যক্তিগতভাবে গোঁফ এবং আন্ডারস্কোর উভয়ের তুলনায় পঠনযোগ্যভাবে অনেক বেশি উন্নত মনে করি):
@name:
<ul>
@for (items) {
<li>@.</li>
}
</ul>
গোঁফের সাথে পার্টিতে ডাকার সময় আরও একটি যুক্তি-মুক্ত সীমাবদ্ধতা আমাদের আঘাত করে। পার্টিয়ালগুলি গোঁফ দ্বারা সমর্থিত থাকলে, প্রথমে ডেটা পাস করার জন্য কাস্টমাইজ করার কোনও সম্ভাবনা নেই। সুতরাং একটি মডুলার টেম্পলেট তৈরি করতে এবং ছোট ব্লকগুলি পুনরায় ব্যবহার করতে সক্ষম হওয়ার পরিবর্তে আমি সেগুলিতে বারবার কোডযুক্ত টেমপ্লেটগুলি শেষ করব।
এক্সপ্যাথ দ্বারা অনুপ্রাণিত একটি কোয়েরি ভাষা প্রয়োগ করে আমরা এটি সমাধান করেছি, যাকে আমরা জাপাথ বলেছি। মূলত, আমরা বিন্দুগুলি ব্যবহার করি বাচ্চাদের ট্র্যাভারিংয়ের জন্য / ব্যবহার করার পরিবর্তে এবং কেবল স্ট্রিংই নয়, সংখ্যা এবং বুলিয়ান আক্ষরিকাগুলি সমর্থিত হয় তবে অবজেক্ট এবং অ্যারে (ঠিক জেএসএনের মতো)। ভাষাটি পার্শ্ব-প্রভাব-মুক্ত (যা টেম্পলেট করার জন্য আবশ্যক) তবে নতুন আক্ষরিক অবজেক্ট তৈরি করে প্রয়োজনীয়ভাবে "ম্যাসেজ" ডেটা মঞ্জুরি দেয়।
ধরা যাক আমরা একটি পছন্দসই শিরোনাম এবং সারিগুলির ক্রিয়াকলাপগুলির লিঙ্কগুলি সহ একটি "ডেটা গ্রিড" টেবিলটি রেন্ডার করতে চাই এবং পরে jQuery ব্যবহার করে সক্রিয়ভাবে সারি যুক্ত করতে চাই। আমি কোডটি সদৃশ করতে না চাইলে সারিগুলির আংশিক হওয়া দরকার। আর সেই কারণেই সমস্যাটি শুরু হয় যদি কিছু অতিরিক্ত তথ্য যেমন কলামগুলি কীভাবে রেন্ডার করা হবে তা ভিউমোডেলের অংশ এবং প্রতিটি সারিতে থাকা ক্রিয়াগুলির জন্য একই। আমাদের টেম্পলেট এবং ক্যোয়ারী ইঞ্জিন ব্যবহার করে এখানে কিছু আসল ওয়ার্কিং কোড রয়েছে:
সারণী টেমপ্লেট:
<table>
<thead>
<tr>
@for (columns) {
<th>@title</th>
}
@if (actions) {
<th>Actions</th>
}
</tr>
</thead>
<tbody>
@for (rows) {
@partial Row({ row: ., actions: $.actions, columns: $.columns })
}
</tbody>
</table>
সারি টেমপ্লেট:
<tr id="@(row.id)">
@for (var $col in columns) {
<td>@row.*[name()=$col.property]</td>
}
@if (actions) {
<td>
@for (actions) {
<button class="btn @(id)" value="@(id)">@(name)...</button>
}
</td>
}
</tr>
জেএস কোড থেকে অনুরোধ:
var html = table({
columns: [
{ title: "Username", property: "username" },
{ title: "E-Mail", property: "email" }
],
actions: [
{ id: "delete", name: "Delete" }
],
rows: GetAjaxRows()
})
এটিতে কোনও ব্যবসায়িক যুক্তি নেই তবে এটি পুনরায় ব্যবহারযোগ্য এবং কনফিগারযোগ্য এবং এটি পার্শ্ব-প্রতিক্রিয়া মুক্তও is
row
স্থির নাম ব্যবহারের পরিবর্তে বস্তু থেকে নেওয়া সম্পত্তি নামগুলি গতিশীলভাবে নির্দিষ্ট করতে দেয় । উদাহরণস্বরূপ যদি $col.property == 'Something'
তাহলে এটিতে সামগ্রীটি পাওয়া যায় row.Something
।
অক্ষর গণনা সহ একটি তালিকা উপস্থাপনের 3 টি উপায় এখানে রয়েছে। প্রথম এবং সংক্ষিপ্ততম ব্যতীত সমস্তগুলি লজিক-কম টেম্প্লেটিং ভাষাতে ..
কফিস্ক্রিপ্ট ( প্রতিক্রিয়াশীল কফি বিল্ডার ডিএসএল সহ) - 37 টি অক্ষর
"#{name}"
ul items.map (i) ->
li i
নকআউট - 100 টি অক্ষর
<span data-bind="value: name"/>
<ul data-bind="foreach: items">
<li data-bind="value: i"/>
</ul>
হ্যান্ডলবারস / গোঁফ - 66 টি অক্ষর
{{name}}:
<ul>
{{#items}}
<li>{{.}}</li>
{{/items}}
</ul>
ইন্ডস্কোর - 87 টি অক্ষর
<%- name %>:
<ul>
<% _.each(items, function(i){ %>
<li><%- i %></li>
<% }); %>
</ul>
আমার ধারণা, লজিক-কম টেম্পলেটগুলির প্রতিশ্রুতি ছিল যে বিস্তৃত দক্ষতা সম্পন্ন লোকেরা তাদের পাদদেশে গুলি না করে লজিক-কম টেম্পলেটগুলি পরিচালনা করতে সক্ষম হবে। তবে উপরের উদাহরণগুলিতে আপনি যা দেখছেন তা হ'ল আপনি যখন স্ট্রিং-ভিত্তিক মার্কআপে ন্যূনতম-যুক্তিযুক্ত ভাষা যুক্ত করেন, ফলাফলটি আরও জটিল হয়, কম হয় না। এছাড়াও, দেখতে দেখতে আপনি পুরানো-স্কুল পিএইচপি করছেন।
স্পষ্টতই আমি "ব্যবসায়িক যুক্তি" (বিস্তৃত গণনা) টেম্পলেটগুলির বাইরে রাখতে আপত্তি করি না। তবে আমি মনে করি যে তাদের প্রথম শ্রেণীর ভাষার পরিবর্তে ডিসপ্লে লজিকের জন্য ছদ্ম-ভাষা দিয়ে, মূল্য দেওয়া হয়। কেবল টাইপ করার জন্য আরও কিছু নয়, প্রসঙ্গ-স্যুইচিংয়ের জঘন্য মিশ্রণটি কারও এটি পড়তে হবে।
উপসংহারে, আমি যুক্তি-কম টেম্পলেটগুলির যুক্তি দেখতে ব্যর্থ হয়েছি, তাই আমি বলব যে তাদের সুবিধাটি আমার কাছে শুভ নয়, তবে আমি শ্রদ্ধা করি যে সম্প্রদায়ের অনেকেই এটি অন্যভাবে দেখেন :)
লজিক-কম টেম্পলেটগুলি ব্যবহারের প্রধান সুবিধাগুলি হ'ল:
আমি ব্র্যাডের সাথে একমত: underscore
স্টাইলটি বোঝা সহজ easier তবে আমি অবশ্যই স্বীকার করতে চাই সিনট্যাকটিক চিনিটি সবার পছন্দ নাও হতে পারে। যদি _.each
কিছুটা বিভ্রান্ত হয় তবে আপনি একটি aতিহ্যবাহী for
লুপ ব্যবহার করতে পারেন ।
<% for(var i = 0; i < items.length; i++) { %>
<%= items[i] %>
<% } %>
এটা তোলে যদি আপনি যেমন মান নির্মান ফলব্যাক করতে সবসময় সুন্দর for
বা if
। শুধু ব্যবহার <% if() %>
বা <% for() %>
যখন Mustache
ব্যবহার কিছুটা জন্য নূতন শব্দ if-then-else
(এবং বিভ্রান্তিকর আপনি ডকুমেন্টেশন পড়া হয়নি):
{{#x}}
foo
{{/x}}
{{^x}}
bar
{{/x}}
টেম্পলেট ইঞ্জিন দুর্দান্ত যখন আপনি সহজে নেস্টেড টেম্পলেটগুলি অর্জন করতে পারবেন ( underscore
শৈলী):
<script id="items-tmpl" type="text/template">
<ul>
<% for(var i = 0; i < obj.items.length; i++) { %>
<%= innerTmpl(obj.items[i]) %>
<% } %>
</ul>
</script>
<script id="item-tmpl" type="text/template">
<li>
<%= name %>
</li>
</script>
var tmplFn = function(outerTmpl, innerTmpl) {
return function(obj) {
return outerTmpl({obj: obj, innerTmpl: innerTmpl});
};
};
var tmpl = tmplFn($('#items-tmpl').html(), $('#item-tmpl').html());
var context = { items: [{name:'A',{name:'B'}}] };
tmpl(context);
মূলত আপনি আপনার প্রসঙ্গের সম্পত্তি হিসাবে আপনার অভ্যন্তরীণ tmpl পাস করেন। এবং সেই অনুযায়ী কল করুন। মিষ্টি :)
যাইহোক, যদি আপনার আগ্রহী একমাত্র জিনিস হ'ল টেম্পলেট ইঞ্জিন, স্ট্যান্ডেলোন টেম্পলেট বাস্তবায়ন ব্যবহার করুন। এটি কেবল 900 ক্যারেক্টার যখন মাইনাইফ করা হয় (4 টি দীর্ঘ লাইন):