একাধিক প্রকল্পে [বন্ধ] একই কোড টুকরা কীভাবে বজায় রাখা যায়


9

আমি একাধিক অ্যান্ড্রয়েড প্রকল্পে কাজ করে একজন ইনডি বিকাশকারী। বিভিন্ন প্রকল্পে একই কার্যকারিতা বজায় রাখতে আমার সমস্যা হচ্ছে। উদাহরণস্বরূপ, আমার অ্যাপ্লিকেশনগুলির মধ্যে তিনটি একই 2 টি শ্রেণি ব্যবহার করে; যেহেতু তারা বিভিন্ন প্রকল্প, যখন আমাকে classes শ্রেণিতে পরিবর্তন আনতে হবে তখন আমার এটি তিনবার করা দরকার। এই জাতীয় সাধারণ সমস্যার কোনও সহজ সমাধান আছে কি?


এটি কীভাবে আসল প্রশ্ন নয় ??
আন্দ্রে

উত্তর:


15

ভাগ করা কোডটি একটি লাইব্রেরিতে আলাদা করুন এবং প্রকল্পগুলিতে লাইব্রেরি অন্তর্ভুক্ত করুন।

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

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


2
নির্ভরতা পরিচালনার জন্য +1। সমস্ত জনপ্রিয় ভাষার জন্য শালীন বিকল্প থাকতে হবে।
অ্যাড্রিয়ান স্নাইডার

11

ভর্সন নিয্ন্ত্র্ন. Git। গিট সাবমডিউলস।

আপনার প্রকল্পগুলি ডিভিসিএস যেমন গিট বা মুর্যুরিয়াল ইত্যাদি ব্যবহার করে সংস্করণ নিয়ন্ত্রণে রাখুন shared যে প্রকল্পগুলিতে এটি প্রয়োজন সেগুলিতে সাবমডিউলটি ব্যবহার করুন। আপনি সাবমডিউলটি আপডেট করার সময়, একটি একক কমান্ড দিয়ে অন্যান্য প্রকল্পগুলিতে পরিবর্তনগুলি টানতে পারেন।


1
-১: প্রশ্নের উত্তরের ছদ্মবেশে এটি কোনও নির্দিষ্ট পণ্যের সত্যই "প্রচারিত প্রচার"। আমি প্রথমে এই উত্তরটি আপ-ভোট দিয়েছি, কিন্তু প্রশ্নটি পুনরায় পড়ার পরে সিদ্ধান্ত নিয়েছি উত্তরটি আসলে একটি ভিন্ন প্রশ্নের সঠিক উত্তর।
mattnz

1
-1 পাশাপাশি। আমি কীভাবে এটি একটি ভাগ করা লাইব্রেরির চেয়ে ভাল on এটি কেবল
গিটকে আপত্তিজনক

5
ঠিক আছে, গিটটি কেবল ব্যবহারের একটি সরঞ্জাম। আমি এটি ব্যবহার করছি, আমি এতে খুশি। আপনি এটি ব্যবহার করতে পারেন, বা এটি ব্যবহার করতে অস্বীকার করতে পারেন। আসল বিষয়টি হ'ল সমস্যাটি সমাধান করে। আমি দাবি করি না যে এটি সমস্যার একমাত্র সমাধান।
হাকান ডেরিয়াল

1
এটি একটি কার্যকরী পদ্ধতির বর্ণনা দেয়: একটি লাইব্রেরি উত্তোলন এমন কিছু কাজের জন্য অনুরোধ করে যা অপের সময়সীমাবদ্ধতার অধীনে সম্ভব বা সম্ভব না হয় যাতে এই পদ্ধতির যোগ্যতা থাকে।
ফ্রান্সেসকো

2
+1 লিঙ্কের জন্য ধন্যবাদ! যদি ভাগ করা উপাদানটি সক্রিয় বিকাশের অধীনে থাকে তবে ভাগ করা লাইব্রেরি সমাধানের তুলনায় এই সমাধানটির (আইএমএইচও) সুস্পষ্ট সুবিধা রয়েছে।
জানডটনেট

5

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

এটি করার জন্য কয়েকটি বিকল্প রয়েছে: 1) এমন একটি বেস প্রকল্প তৈরি করুন যা অন্যরা নির্ভর করে। এই প্রকল্পটি বাইনারি বিতরণ তৈরি করতে পারে যা অন্যান্য প্রকল্পগুলি গ্রাস করে। 2) আপনার সংস্থার মধ্যে একটি ওপেন সোর্স মডেল টানুন। সাধারণ কোডের নিজস্ব কোড শাখা হয়ে উঠুন এবং অন্যান্য প্রকল্পগুলিকে কোড একইভাবে টানুন আপনি কোনও ওএসএস থেকে অনলাইনে সোর্স কোড নিতে পারেন।

এখন এখানে যেখানে তরোয়াল আসে ...

এমন একটি সাধারণ জায়গায় কোড স্থাপন করা যা অন্যান্য প্রকল্পগুলি / লোকেরা নির্ভর করে বরং ব্যয়বহুল হয়ে উঠতে পারে। ধরা যাক আপনার একটি কোডের টুকরা রয়েছে এবং অন্যান্য 4 টি প্রকল্প এতে নির্ভর করে। আপনার গ্রাহকদের মধ্যে একটি যা প্রকল্প এ ব্যবহার করে একটি বাগ খুঁজে পায় এবং আপনাকে একটি সমাধান করতে হবে। আপনি ফিক্স আউট তাড়াতাড়ি এবং গ্রাহক খুশি। তবে আপনি কেবল এমন কিছু কোড সংশোধন করেছেন যা অন্য 3 টি প্রকল্পের উপর নির্ভর করে। কোনও প্রান্ত শর্ত চালু হয়নি তা নিশ্চিত করার জন্য আপনি কি তাদের সবার পরীক্ষা করেছেন?

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

যদি আপনার প্রকল্পগুলি বিভিন্ন প্রকাশের চক্রগুলিতে থাকে তবে আপনার প্রচলিত কোড পরিচালনা করার বিষয়ে আরও সতর্ক হওয়া দরকার। আপনি কেবল সাধারণ কোডটিতে পরিবর্তন করতে পারবেন না কারণ প্রকল্প বি এর নতুন কার্যকারিতা প্রয়োজন, যদি আপনি প্রকল্প সি এর চূড়ান্ত চিত্রটি কাটা থেকে 3 দিন দূরে থাকেন if

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

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

আমি কিছু প্রস্তাব দিতে পারি:

  1. অটোমেটেড ইউনিট পরীক্ষাগুলি দ্বারা আচ্ছাদিত সাধারণ কোডটি আপনাকে অনেক দূর যেতে পারে এবং আপনাকে কিছুটা মনের ধারণা দিতে পারে যে আপনি যখন কোনও পরিবর্তন করেন, আপনি কেবল অন্য কোনও প্রকল্প ভাঙেন নি।
  2. আমি কেবল সাধারণ কোডে খুব স্থিতিশীল কার্যকারিতা রাখি। আপনি যদি টাইমার ম্যানেজমেন্ট করতে গত বছর কোনও ক্লাস লিখেছিলেন এবং আপনি 9 মাসে এটি পরিবর্তন করেন নি এবং এখন আপনার কাছে আরও 3 টি প্রকল্প রয়েছে যার টাইমার প্রয়োজন, তবে নিশ্চিত হন যে এটি একটি ভাল প্রার্থী। তবে আপনি যদি কেবল গত সপ্তাহে কিছু লিখেছিলেন, ভাল ... আপনার কাছে এমন অনেকগুলি বিকল্প নেই (এবং আমি পরবর্তী লোকের চেয়ে কপি / পেস্টিং কোডটি ঘৃণা করি) তবে আমি এটিকে সাধারণ করার বিষয়ে দু'বার চিন্তা করব।
  3. কোডের টুকরটি যদি তুচ্ছ হয় তবে আপনি এটি বেশ কয়েকটি স্থানে ব্যবহার করেছেন, সম্ভবত বুলেটটি কামড়ান, ডিআরওয়াইকে একা রেখে একাধিক অনুলিপিগুলিকে বাঁচতে দেওয়া ভাল।
  4. কখনও কখনও এটি সাধারণ কোডটি কেবল একটি সাধারণ স্থানে না রাখার এবং প্রত্যেককে এটির রেফারেন্স দেওয়ার জন্য অর্থ প্রদান করে। বরং সাধারণ কোডটিকে সংস্করণ, প্রকাশের তারিখ এবং সমস্ত কিছুর সাথে তার নিজের পুনরায় প্রকাশযোগ্য হিসাবে গণ্য করুন। এইভাবে প্রকল্প সি বলতে পারে, "আমি সাধারণ লাইব্রেরি v1.3 ব্যবহার করি" এবং যদি প্রকল্প ডিতে নতুন কার্যকারিতা প্রয়োজন হয় তবে আপনি v1.3 একা ছেড়ে যান, ভি 1.4 ছেড়ে দিন এবং প্রকল্প সি প্রভাবিত হবে না। মনে রাখবেন, সাধারণ কোডটিকে সাধারণ জায়গায় পরীক্ষা করে দেখার চেয়ে সাধারণ কোডটিকে নিজস্ব পণ্য হিসাবে বিবেচনা করা আরও ব্যয়বহুল।

1

এটি একটি আদর্শ সমাধান, এবং কাজ করার জন্য কিছু প্রচেষ্টা নিতে পারে।

ডিআরওয়াই নীতিতে বলা হয়েছে যে সত্যের একক কর্তৃত্বের উত্স থাকতে হবে। এটি কোনও প্রোগ্রামের যুক্তির জন্য কোনও নকল ছাড়াই একক উত্সের সংগ্রহস্থল ব্যবহারের নির্দেশ দেয় ; ফাইলগুলি ডকুমেন্টগুলির ভাগ করে নেওয়ার এবং পুনঃব্যবহারের প্রচারের জন্য সংগঠিত।

বিতরণকৃত, বহু-দলীয় পরিবেশে যোগাযোগের ব্যবহারিক প্রয়োজনীয়তা পরামর্শ দেয় যে প্রতিটি প্রকল্প বা সহযোগিতার জন্য একাধিক স্বতন্ত্র সংগ্রহস্থল থাকা উচিত boration

আমি অনিবার্যতার কাছে জমা দিয়ে এই সমস্যার মুখোমুখি হব: আপনাকে উভয় পন্থাকে একযোগে গ্রহণ করতে হবে এবং আমরা দৃষ্টিভঙ্গিগুলি বিরোধী তা নিশ্চিত করার জন্য আমরা স্ক্রিপ্টিং এবং অটোমেশন ব্যবহার করব।

:-)

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

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

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

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