জাভা থেকে ক্লোজুরে পুনর্লিখন


97

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

দয়া করে মনে রাখবেন যে আমি জাভা এবং ক্লোজার দুটিই জানি know

হালনাগাদ

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

আমি শুনেছি তারা সিস্টেমটি এবং তারা যা চেয়েছিল ঠিক তেমন করে যাওয়ায় তারা খুশি। একমাত্র ক্ষতিটি হ'ল যে সিস্টেমটি রক্ষণাবেক্ষণ করা লোকটি ক্লোজারকে স্ক্র্যাচ থেকে শিখতে হয়েছিল এবং তাকে লাথি মেরে চিৎকার করতে করতে টেনে আনা হয়েছিল। আমি অন্য দিন তার কাছ থেকে ফোন পেয়েছিলাম যে তিনি এখন লিস্পকে ভালোবাসেন যদিও .. মজার :)

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


55
আমি আপনার সংস্থার পক্ষে কাজ করতে চাই
mtyaka

4
ঠিক আছে, ইউরোপের কয়েকটি প্রতিরক্ষা সংস্থা ক্লজিউর ব্যবহার শুরু করেছে (শুনেছি)। তবে কোনও নামই মনে করতে পারে না :)
appshare.co

4
@ জুবায়ের: 50 000 জাভা এলওসি "লার্জি" এর কাছাকাছি কোথাও নেই। এটি একটি খুব ছোট প্রকল্প। আমি এখানে 250 কেবিএল থেকে 300 কেবিএল জাভা প্রকল্প পেয়েছি এবং এটি মাঝারি আকারের ... সর্বোত্তম।
SyntaxT3rr0r

4
আসলে আমি সম্ভবত কোডবেজের আকার উল্লেখ করে ভুল করেছিলাম যেহেতু কোডের আকার হ্রাস হ'ল পুনর্লিখনের লক্ষ্য নয়। লক্ষ্য দ্বিগুণ: 1) কোডবেস আরও বোধগম্য এবং এইভাবে কোড বজায় রাখা সস্তা 2) টুলবারের ব্যবহারকারীদের ওয়েব ব্রাউজারে ক্লোজার এডিটর ব্যবহার করে পণ্যটি প্রসারিত করার মঞ্জুরি দিন (ইওল এবং অন্যান্য গতিময় ক্লোজার নেকি ব্যবহার করে যা আরও ব্যয়বহুল is জাভাতে করুন)
appshare.co

4
আরে ... সবেমাত্র এই পুরানো প্রশ্নটি দেখে এবং ভাবছিলাম যে পুনর্লিখনটি কেমন চলছে?
লেভান্ড

উত্তর:


82

সবচেয়ে বড় "ট্রান্সলেশনাল ইস্যু" সম্ভবত জাভা / ওওপি পদ্ধতি থেকে ক্লোজার / ফাংশনাল প্রোগ্রামিং দৃষ্টান্তের দিকে চলে যাবে।

বিশেষত, অবজেক্টের মধ্যে পরিবর্তনীয় অবস্থা হওয়ার পরিবর্তে, "ক্লোজার উপায়" হ'ল পরিষ্কারভাবে পারস্পরিক পরিবর্তনকে পৃথক করা এবং বিশুদ্ধ (পার্শ্ব-প্রতিক্রিয়া মুক্ত) ফাংশন বিকাশ করা। আপনি সম্ভবত এটি ইতিমধ্যে জানেন :-)

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

  1. মূল ডেটা স্ট্রাকচার শনাক্ত করুন এবং এগুলি পরিবর্তনযোগ্য ক্লোজার ম্যাপ বা রেকর্ড সংজ্ঞাতে রূপান্তর করুন। প্রচুর অপরিবর্তনীয় মানচিত্রগুলি বাসাতে ভয় পাবেন না - ক্লোজারের অবিরাম ডেটা স্ট্রাকচারের জন্য এগুলি অত্যন্ত দক্ষ ধন্যবাদ। আরও জানতে এই ভিডিওটি দেখার পক্ষে মূল্যবান।

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

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

  4. ইউনিট পরীক্ষা লিখুন (উদাহরণস্বরূপ Clojure.test সহ ) যা উপরের সমস্তটি কভার করে। এটি ক্লোজারের মতো গতিশীল ভাষায় বিশেষত গুরুত্বপূর্ণ) ক) আপনার স্ট্যাটিক টাইপ চেকিং এবং সুরক্ষা জাল থেকে সুরক্ষা জাল যতটা নেই, খ) এটি নিশ্চিত হতে সাহায্য করে যে আপনি খুব বেশি গড়ার আগে আপনার নিম্ন স্তরের কনস্ট্রাক্টগুলি ভালভাবে কাজ করছে helps তাদের শীর্ষে

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

  6. অধিকার সামগ্রিক ওয়েব ফ্রেমওয়ার্ক নির্বাচন করুন - Clojure ইতিমধ্যে বেশ কিছু রয়েছে কিন্তু আমি দৃঢ়ভাবে রিং বলতে চাই - এই চমৎকার ভিডিও "দেখুন ওয়ান রিং বাঁধে ও তা প্লাস হয়" ফ্লিট বা Enlive বা হিক্কা আপনার টেমপ্লেট দর্শন উপর নির্ভর করে। তারপরে আপনার উপস্থাপনা স্তরটি লিখতে এটি ব্যবহার করুন ("এই শপিং কার্টটিকে একটি উপযুক্ত এইচটিএমএল খণ্ডে অনুবাদ করুন" এর মতো ফাংশন সহ)

  7. শেষ পর্যন্ত উপরের সরঞ্জামগুলি ব্যবহার করে আপনার অ্যাপ্লিকেশনটি লিখুন। যদি আপনি উপরের পদক্ষেপগুলি সঠিকভাবে সম্পন্ন করেছেন, তবে এটি আসলে সহজ বিট হবে কারণ আপনি খুব অল্প বয়লারপ্লেট সহ বিভিন্ন উপাদানগুলির উপযুক্ত রচনা দ্বারা পুরো অ্যাপ্লিকেশনটি তৈরি করতে সক্ষম হবেন।

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

পিএস যদি আপনি উপরের পদ্ধতিটি অনুসরণ করেন তবে জাভাতে 50,000 লাইনের কার্যকারিতা মেলে কতটা লাইন ক্লোজারের লাগে তা শুনে আমি মুগ্ধ হব

আপডেট : যেহেতু এই পোস্টটি মূলত বেশ কয়েকটি অতিরিক্ত সরঞ্জাম / পাঠাগার রচনা করা হয়েছিল যেগুলি "অবশ্যই চেক আউট" বিভাগে রয়েছে:

  • নোয়ার - রিংয়ের উপরে নির্মিত ওয়েব ফ্রেমওয়ার্ক build
  • Korma - এসকিউএল ডাটাবেস অ্যাক্সেসের জন্য খুব সুন্দর ডিএসএল।

4
নিতপিক পুনরায়: "প্রতিটি অংশের পরিবর্তনীয় অ্যাপ্লিকেশন-স্তরের অবস্থা পরিচালনা করতে আপনি ক্লোজারের কোন এসটিএম রেফারেন্স টাইপ ব্যবহার করতে চান তা সিদ্ধান্ত নিন": কেবলমাত্র একটি এসটিএম রেফারেন্স টাইপ রয়েছে। অন্যান্য আইআরফগুলি এসটিএম জড়িত না। অন্যথায় দৃ advice় পরামর্শ মত মনে হচ্ছে।

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

4
যদি আমি এই আরও +1 দিতে পারে। আপনার রেফারেন্স করা উভয় ভিডিও আমি দেখেছি এবং সেগুলি দুর্দান্ত। ধন্যবাদ
jdl

4
এখন নূর অবচয় করা হয়েছে। আমি মনে করি আপনার নয়েরের পরিবর্তে কমপোজোর সম্পর্কে উল্লেখ করতে হবে।
hsestupin

ওয়ান রিং টু বেঁধে লিংকটি ভেঙে গেছে!
অ্যাডাম আর্ল্ড

5

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


সার্লেলেটস, জেএসপি, হোম বিল্ট অধ্যবসায়ের কাঠামো (10 বছর পুরাতন) এবং পোজোস, তবে কোনও ইজেবি নেই
appshare.co

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

প্রকল্পটি যেহেতু আমি Clojure এবং Clojurescript (nemcv.com) এর সাথে আর একটি আবেদন করেছি এবং আমি এখন রিং ব্যবহার করছি, ক্লোজিউকিউআরএল চেষ্টা করেছি, তবে ডাটাবেস অ্যাক্সেসের জন্য কোরমাতে স্যুইচ করছি। আপনি github.com/zubairq/coils
appshare.co

4

আমি খুঁজে পেলাম সবচেয়ে কঠিন অংশটি ডাটাবেস সম্পর্কে চিন্তাভাবনা করেছিল। আপনি যে সঠিক সরঞ্জামগুলি ব্যবহার করতে চান তা খুঁজতে কিছু পরীক্ষা করুন।


4
ওয়েল, আমি ডেটা অ্যাক্সেসের জন্য ক্লোজুরিকেল চেষ্টা করেছি, তবে এটি জাভা স্টাইলের ডেটাবেস অ্যাক্সেসের থেকে সম্পূর্ণ আলাদা যা সমস্ত অবজেক্ট ভিত্তিক। জাভা জন্য আপনি কোন ডাটাবেস অ্যাক্সেস ব্যবহার করেছেন এবং ক্লোজারের সাথে আপনি কী ব্যবহার করেছেন?
appshare.co

4
ক্লোজার ডেটা স্ট্র্যাচারের অধ্যবসায় খুব স্বাভাবিক ছিল বলে আমরা প্রচুর স্টাফ নিয়ে পুনর্বিবেচনা এবং মংডবের সাথে শেষ করেছি
লেনডব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.