যখন কোনও অ্যাপের অংশগুলি বিভিন্ন ভাষায় লেখা হয় তখন কীভাবে ডেটা স্ট্রাকচারের সদৃশতা এড়ানো যায়?


12

উদাহরণস্বরূপ, বলুন আপনি জাভাতে একটি অ্যাপ লিখছেন ।

আপনার অ্যাপটি পাইথনে লিখিত একটি API সার্ভারের সাথে যোগাযোগ করে ।

পাইথন সার্ভারটি একটি এসকিউএল ডাটাবেসের সাথে যোগাযোগ করে।

আপনার অ্যাপ্লিকেশনটির জন্য জাভাস্ক্রিপ্টে লিখিত একটি ওয়েবসাইটও রয়েছে ।

4 টি ভিন্ন ভাষায়, মূলত একই ডেটা স্ট্রাকচার 4 টি বিভিন্ন বার পুনরাবৃত্তি করা সহজ।

উদাহরণস্বরূপ, কোনও Userপ্রকারটি এর মতো দেখতে (সিউডোকোড) হতে পারে:

type User {
  integer id;
  string name;
  timestamp birthday;
}

প্রকল্পের প্রতিটি অংশের জন্য একরকম প্রতিনিধিত্ব প্রয়োজন User। জাভা এবং পাইথনের অংশগুলির জন্য দুটি পৃথক classঘোষণা দরকার need ডাটাবেসটির একটি Userসারণী ঘোষণার প্রয়োজন হবে । এবং সামনের প্রান্তের সাইটটির একটি Userখুব প্রতিনিধিত্ব করা প্রয়োজন ।

এই জাতীয় 4 টি ভিন্ন বার পুনরাবৃত্তি করা সত্যিই নিজেকে পুনর্বার পুনরাবৃত্তি করুন না principle এছাড়াও সমস্যাটি রয়েছে যে যদি Userটাইপটি পরিবর্তন করা হয় তবে প্রকল্পের প্রতিটি বিভিন্ন অংশে এই পরিবর্তনগুলি পুনরাবৃত্তি করা দরকার।

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

কারও কাছে এই সম্পর্কে বই / ব্লগ পোস্টগুলির কোনও পরামর্শ বা লিঙ্ক রয়েছে?


এই কারণেই অনেক লোক তাদের সমস্ত বিকাশটি জাভাস্ক্রিপ্টে নিয়ে চলেছে। ক্লায়েন্ট (ওয়েব, মোবাইলের জন্য আয়নিক, ডেস্কটপের জন্য ইলেকট্রন), সার্ভার (নোড), ডাটাবেস (মঙ্গোডিবি) এ কাজ করে।
পল

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

5
Repeating this type 4 different times really breaks the Don't-Repeat-Yourself principle। না এটা হয় না। আপনার 4 টি আলাদা সিস্টেম রয়েছে যা বিভিন্ন জিনিস করে। আপনি DRY খুব দূরে নিয়ে যাচ্ছেন। আমার অভিজ্ঞতা অনুসারে, আপনি যে পুনরায় ব্যবহারযোগ্যতা বাছাই করতে চান তা বাছাইয়ের কুফল। এটি User4 টি ভিন্ন ভাষায় 4 বার পুনরাবৃত্তি করার চেয়েও খারাপ । বিতরণ করা পরিবেশে, সংযুক্তকরণ একটি সমস্যা। DRY হয় না।
লাইভ

উত্তরের জন্য সময় নেই: আপনার প্রয়োজনের উপর নির্ভর করে আপনি যেমন ওডাব্লুএল (সুতরাং একটি অনটোলজি তৈরি করুন) ব্যবহার করে বৈধতার জন্য নিয়ম তৈরি করার চেষ্টা করতে পারেন। বৈধতার নিয়মগুলি তারপরে "ডেটা" হয়ে যায় যা প্রয়োজনীয় পয়েন্টগুলিতে ব্যবহার করা যেতে পারে। নিয়ম পরিবর্তন করার পরে একটি কেন্দ্রীয় জায়গায় করা যেতে পারে।
ড্যানিয়েল জোর

উত্তর:


12

তুমি করো না. বা সত্যিই, আপনি করা উচিত নয়।

আপনি যদি অ্যাপ্লিকেশন, আপনার সার্ভার এবং আপনার ওয়েবসাইটকে পৃথক প্রসঙ্গ হিসাবে মনে করেন, তবে এটি নকল কাঠামো বলে মনে হয়। কারণ এটি ভাল জিনিস হতে পারে:

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

DRY নীতিটি আশ্চর্যজনক হলেও, আমি মনে করি প্রসঙ্গে বা স্তরগুলিতে ডেটা স্ট্রাকচার ভাগ করে নেওয়া এটি সমাধানের চেয়ে আরও বেশি সমস্যার সৃষ্টি করে। বিশেষত যদি প্রকল্পটি এত বড় হয় যে বিভিন্ন ব্যক্তি বিভিন্ন প্রসঙ্গে কাজ করছেন।


5

আমি মনে করি @ ইউফোরিক আপনার কোডটি নকল না করার জন্য বেশ কয়েকটি ভাল কারণ তালিকাভুক্ত করেছে। তবে, আপনি যদি অবশ্যই তা করতে চান তবে আমি কোড জেনারেশন ব্যবহার করার পরামর্শ দেব recommend

তথ্যের আধ্যাত্মিক ফর্মটি সন্ধান করুন

কার্যকরভাবে এটি করতে আপনাকে অবশ্যই প্রথমে আবিষ্কার করতে হবে যে ডেটাটির আধ্যাত্মিক রূপটি কী। এটি কি আপনার এসকিউএল স্কিমা, বা আপনার জাভা প্রোগ্রামের ক্লাসগুলি?

এটি থেকে অন্যান্য ফর্মগুলি বের করুন (স্বয়ংক্রিয়ভাবে)

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

সহজাত পার্থক্য

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

তবুও, আপনি যদি পারেন - যেমন অনুরূপ এড়ানো। এটি একটি পিআইটিএ, যদিও আপনার বেশিরভাগ কোড স্বয়ংক্রিয়ভাবে উত্পন্ন হয়।


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

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