বিভিন্ন প্রকল্পের মধ্যে ভাগ করে নেওয়া ক্লাস বা ইন্টারফেস


17

আমি এসও বা এখানে কিছু উত্তর খুঁজছিলাম, তবে কোনও ফলাফল ছাড়াই, আমি আপনাকে জিজ্ঞাসা করব।

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

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

আপনি আর কি সমাধানের পরামর্শ দেবেন? পেশাদার অ্যাপ্লিকেশনগুলিতে এই জাতীয় সমস্যাগুলি কীভাবে সমাধান করা হয়?


1
আপনি কিছু ভাগ করেছেন কিনা তা আপনার সংস্করণ নিয়ন্ত্রণ করা উচিত। আপনি কি বলছেন আপনি ক্লায়েন্ট এবং সার্ভার প্রকল্পগুলির জন্য সংস্করণ নিয়ন্ত্রণ ব্যবহার করছেন না ? যদি তা হয় তবে তাৎক্ষণিক প্রতিকার করুন।
সেবাস্তিয়ান রেডল

উত্তর:


15

একটি অতিরিক্ত প্রকল্প তৈরি করুন যাতে সমস্ত সাধারণ জিনিস সংজ্ঞায়িত হয়

এটি পুনরায় ব্যবহারযোগ্য অংশগুলি ভাগ করার ঠিক প্রথম পদক্ষেপ - এবং এটির সহজ অংশ। আরও চ্যালেঞ্জিং অংশটি সিদ্ধান্ত নেওয়া হয় যে দুটি প্রকল্প যা ভাগ করে নেওয়া গ্রন্থাগারটি ব্যবহার করছে তাদের স্বতন্ত্র প্রকাশের চক্র থাকবে (না), এবং যদি সম্ভব হয় যে "প্রকল্প এ" আপনার ভাগ করা ইচ্ছার 1.0 সংস্করণ ব্যবহার করে, যখন প্রকল্প বি ব্যবহার করে uses সংস্করণ 2.0 একই সাথে

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

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


13

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

libmyproject-shared-1.0.jar

এটি সংস্করণে সমস্যা প্রতিরোধ করে না তবে এটি সহায়তা করা উচিত। আমি কখনই মাভেনকে ব্যবহার করি নি, তবে আমি বুঝতে পারি এটি এই পরিস্থিতিতে সহায়তা করতে পারে।


2

একটি অতিরিক্ত প্রকল্প তৈরি করুন যাতে সমস্ত সাধারণ জিনিস সংজ্ঞায়িত হয়

ঠিক সেভাবেই। নেট আপনার কাছে এটি আশা করে।

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

সিরিয়ালাইজেশন জন্য সতর্কতা অবলম্বন করুন:

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

1

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

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