একাধিক ভাষায় কীভাবে একজনের কনস্ট্যান্ট পরিচালনা করা উচিত?


13

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

আমি বর্তমানে যেভাবে এটি করছি তা প্রতিটি ভাষায় ধ্রুবককে সংজ্ঞায়িত করার কোড দ্বারা।

সমস্যা রক্ষণাবেক্ষণে আসে। যদি আমি একটি নতুন ত্রুটি কোড যুক্ত করি তবে আমাকে প্রতিটি লাইব্রেরিতে ম্যানুয়ালি আপডেট করতে হবে। যদিও এটি কয়েকজনের জন্য ঠিক আছে তবে আমি আপডেট করার জন্য 5 টি এসডিসি বলাই ক্লান্তিকর হয়ে ওঠে। এগুলির জন্যও সত্যের একক উত্স পাওয়া ভাল লাগবে।

আমি কোনও ধরণের কনফিগার মত ফাইলের কথা ভেবেছিলাম তবে তারপরে এটি প্রতিটি মোতায়েন করা প্যাকেজে অন্তর্ভুক্ত করা দরকার যা আমাদের বিল্ড / রিলিজ প্রক্রিয়াটিতে জটিলতা যুক্ত করে।

একাধিক ভাষার মধ্যে ভাগ করা ধ্রুবকগুলির রক্ষণাবেক্ষণের জন্য কী আরও ভাল উপায় আছে?


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

5
@ ডেভিডপ্যাকার না না আপনি আমার জন্য সত্যিই মার্জিত সমাধান বলে মনে করছেন না। আমাকে বলবেন না এটি এখানে সেরা! :-)
এন্ডারল্যান্ড

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

ভাষার সারণির থেকে সারি সারি সারি করতে মানচিত্রের টেবিলগুলির একটি টেবিল আপনার দরকার।
জনি

উত্তর:


10

যদিও আমি মনে করি আপনার বর্তমান পদ্ধতির সম্ভবত সবচেয়ে সহজ এবং সবচেয়ে সহজবোধ্য, এখানে কয়েকটি বিকল্প ধারণা দেওয়া হয়েছে:

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

5
@ রাবারডাক কোড জেনারেশনটি আকর্ষণীয় মনে হচ্ছে (বিশেষত আমার স্পর্শকাতর ব্যবহারের একটির ক্ষেত্রে, যা ইতিমধ্যে যে কোনও কোড জেনারেটরের সাথে জড়িত)।
এন্ডারল্যান্ড

3

দুর্দান্ত প্রশ্ন! আমার ঠিক একই সমস্যা আছে; আমার ধ্রুবকগুলি মূলত: অ্যাপ্লিকেশনগুলিতে কোন ভাষাগুলি সমর্থন করে এবং অ্যাপগুলিতে কার্যকারিতার সাথে সম্পর্কিত সেগুলি সম্পর্কে অতিরিক্ত তথ্য।

দুর্ভাগ্যক্রমে, আমি সবচেয়ে ভাল জিনিসটি পেয়েছি (যেমন আপনি পেয়েছেন) হ'ল প্রতিটি ভাষার জন্য কেবল ধ্রুবককে নতুনভাবে সংজ্ঞায়িত করা, আপনি বর্তমানে যেমন করছেন (আমি জানি, আপনি অবশ্যই এটি শুনতে চেয়েছিলেন )।

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

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

সুতরাং সংক্ষেপে, প্রতিটি ভাষার জন্য তাদের নতুন সংজ্ঞা দেওয়া আমার সেরা সমাধান ছিল এবং আমি এখনও এমন আরও কিছু ডিআরওয়াইয়ের কথা ভাবতে পারি যেটির সাথে মোকাবিলা করার চেয়ে বেশি ঝুঁকির কারণ নেই।

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


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


0

আশা করি, আপনার লাইব্রেরির মূলটি একটি ভাষায় লেখা হয়েছে এবং অন্য পাঠাগারগুলি মূল লাইব্রেরিতে কল করতে এফএফআই ( https://en.wikedia.org/wiki/Foreign_function_interface ) ব্যবহার করে । এটি আপনাকে মধ্যবর্তী অবস্থান থেকে সংজ্ঞা এবং সংজ্ঞা প্রকাশের জন্য একটি এপিআই সরবরাহ করবে। এইভাবে সমস্ত কিছু লাইব্রেরির মধ্যে অন্তর্ভুক্ত। আমি কেবল এটি উল্লেখ করছি কারণ এটি শমূলের প্রতিক্রিয়ায় অন্তর্ভুক্ত বলে মনে হচ্ছে না।

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


1
Hopefully, the core of you library is written in one language, and the other libraries use FFI দুর্ভাগ্যক্রমে আমাদের কাছে ওয়েব ক্লায়েন্ট এবং সার্ভার কোড উভয়ের জন্য (একাধিক ভাষায়) লাইব্রেরি রয়েছে তাই ... এটি টানতে হবে না (এবং সম্ভবত ওয়েব অ্যাপ্লিকেশনটিতে যদি আমরা শুরু করতে পারি তবে সুরক্ষার দুর্বলতা)।
এন্ডারল্যান্ড 21

আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি আপনার সুরক্ষা উন্নতি করুন, কারণ আমি কখনই কনফিগারেশন ফাইলগুলিকে গোপন রাখতে পর্যাপ্ত বিশ্বাস করি না users
রবার্ট ব্যারন

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

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

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