.NET অ্যাপ্লিকেশনগুলির মধ্যে কোড ভাগ করার সবচেয়ে কার্যকর উপায় কী?


15

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

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

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

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

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

আমি আমাদের বিভিন্ন সোর্স কোড শাখার সাথে নুগেটকে বুদ্ধিমান রাখার উপায়গুলি খুঁজছি। আমরা দুর্ঘটনাক্রমে উন্নয়ন কোডটিকে উত্পাদনে ঠেলাতে চাই না কারণ আমরা ভুল নুগেট প্যাকেজটি উল্লেখ করি।


এছাড়াও, যদি এটির মতো আলোচনার জন্য এটি কোনও ভাল ফোরাম না হয় তবে কেউ কি আরও ভাল প্রস্তাব দিতে পারেন?
জোশ

উত্তর:


9

আমরা ফাউন্ডেশন (ফাউন্ডেশন-এ) এ পরিবর্তনগুলি করি এবং অস্থির প্যাকেজ হিসাবে সেগুলি নুগেট ফিডে ঠেলে দেই।

এখানেই আপনার সমস্যাটি শুরু হয় ... এটি করবেন না।

ফাউন্ডেশন v1.0 এ যে কোনও পরিবর্তন করা ফাউন্ডেশনের সমস্ত গ্রাহকের জন্য সহজাতভাবে মূল্যবান হওয়া উচিত, অন্যথায় এটি ফাউন্ডেশনের অন্তর্ভুক্ত নয়। সুতরাং, নুগেট প্যাকেজটি তৈরি করার সময়, এটি ফাউন্ডেশনের অফিশিয়াল, স্থিতিশীল সংস্করণ হিসাবে (যেমন v1.1) করুন, বা একেবারেই করবেন না।

প্রকল্প বি এর ফাউন্ডেশন বর্ধন সাধারনত গড়ে তুলতে হবে তবে (ভাল উত্স ব্যবস্থাপনার ফ্যাশনে) ট্র্যাঙ্ক পরিবর্তনগুলিতে (v1.1) একত্রিত হওয়া উচিত স্থিতিশীল ফাউন্ডেশন (v1.2) ধীরে ধীরে ধাক্কা দেওয়ার আগে।

অন্যান্য প্রকল্পগুলি যা ফাউন্ডেশন বর্ধনগুলি ব্যবহার করতে পারে উপযুক্ত হলে তাদের নুগেট রেফারেন্সগুলি আপগ্রেড করতে পারে বা তাদের প্রয়োজনে পুরানো সংস্করণগুলি আটকে রাখতে পারে।

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


হ্যাঁ, এটি অর্থবোধ করে। ব্যবহারিক প্রয়োগে সমস্যা। আপনি ফাউন্ডেশনে v1.1 এর জন্য আপডেটগুলি করার সাথে সাথে আপনি প্রকল্প বিতে এই পরিবর্তনগুলি আপনি বিকাশের সাথে সাথে ব্যবহার করতে চান। আপনি যদি সেই কোডটি ভাগ করে নিচ্ছেন তবে সেগুলি নুগেটের মাধ্যমে হয় তবে আপনার বিকল্পগুলি হ'ল: 1) নতুন নুগেট প্যাকেজ প্রকাশ করুন, বা 2) ম্যানুয়ালি dll এর চারপাশে অনুলিপি করুন। এগুলির কোনওটিই পছন্দ মতো পছন্দ বলে মনে হচ্ছে না।
জোশ

এর কয়েকটি কার্যকর টেস্ট স্যুট থাকার মাধ্যমে হ্রাস করা যায়, তবে আপনি বৈশিষ্ট্যগুলি যুক্ত করার পরে এখনও পিছনে পিছনে থাকবে।
জোশ

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

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

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

4

আপনার সদৃশ কোডটি আরও বিমূর্ত পদ্ধতিতে প্রযোজ্য ফাংশনে রিফ্যাক্টর করুন এবং তাদের নিজস্ব লাইব্রেরি বা ফ্রেমওয়ার্কগুলিতে রাখুন। এগুলি আলগাভাবে মিলিত এবং আর্কিটেকচার-অজোনস্টিক করুন এবং আপনার কোনও সমস্যা হবে না। আপনি অনুপ্রেরণার প্রয়োজন হলে, অধ্যয়ন কিভাবে .NET Framework যেমন ইন্টারফেস, জেনেরিক্স, এবং সফটওয়্যার নিদর্শন ভালো জিনিস ব্যবহার করে এই ধারণার বিমূর্ত Dispose()

এছাড়াও, মনে রাখবেন যে সমস্ত সদৃশ কোড সত্যই নকল নয়; এর কয়েকটি হ'ল আঠার কোড বা কোড যা অন্যথায় আর্কিটেকচার টিকিয়ে রাখার জন্য প্রয়োজনীয়, তাই খুব বেশি ডিআরআই হওয়ার বিষয়ে অবহেলা করবেন না।


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

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

4

কোড পুনরায় ব্যবহার

কোড পুনরায় ব্যবহারের জন্য বেশ কয়েকটি পন্থা রয়েছে যা বছরের পর বছর ধরে সমর্থন পেয়েছে। প্রতিটি পদ্ধতির এটির স্থান রয়েছে এবং আরও গুরুত্বপূর্ণ এটির সমস্যাগুলি but তবে নেট নেট কোডটি পুনরায় ব্যবহারের কার্যকর উপায়গুলি হ'ল:

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

  2. সাধারণ উত্স কোড। একাধিক স্থানে যে কোডটির প্রয়োজন হয় সেটি একবার লিখে একটি সাধারণ ডিরেক্টরি কাঠামোতে উত্স ফাইলে স্থাপন করা হয়। এই কোডগুলির প্রয়োজন এমন সমস্ত প্রকল্পগুলি এই ফাইলটিকে তাদের উত্স ফাইল হিসাবে অন্তর্ভুক্ত করে। এটি কোড পুনঃব্যবহার সরবরাহ করে এবং একবার লেখার সুবিধাগুলি অনেকগুলি ব্যবহার করে। যাহোক. এর খারাপ দিকটি হ'ল এই কোডের বিভিন্ন সংস্করণ দিয়ে এই প্রকল্পের বিভিন্ন অংশ সংকলন করা সম্ভব হয়েছে - যা এমন কিছু সূক্ষ্ম ত্রুটিগুলি প্রবর্তন করতে পারে যা গুণগত নিশ্চয়তার সাহায্যে সনাক্ত এবং সনাক্তকরণের জন্য খুব জটিল।

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

নিউগেট পরিচালনা করছেন

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


1

আমি মনে করি সমস্যাটি নুগেট / সোর্স কন্ট্রোল / ব্রাঞ্চিংয়ে নয়, তবে আঠালো কোডে কী পিছলে।

রবার্টের সুন্দর উত্তর রয়েছে, কেবল পুরো ছবিটি দেখার জন্য, আমি এই প্রকল্পগুলির মধ্যে এই সাধারণ ইউটিলিটিগুলি কী নির্ভরতা আনবে তা চিন্তা করার পরামর্শ দিচ্ছি:

http://ayende.com/blog/3986/let-us-burn-all-those-pesky-util-common-libraries http://blog.jordanterrell.com/post/CommonUtility-Libraries-Dead.aspx

আপনার যে নরকটি রয়েছে তা এড়ানোর সর্বোত্তম উপায় হ'ল আপনার আঠালো কোডটি উত্স করা। এইভাবে আপনি যত্ন নেওয়া শুরু করবেন, যে কোনও ব্যবসায়ের যুক্তি জনসাধারণের কাছে প্রকাশিত হবে না, সুতরাং কোনও কংক্রিট প্রকল্প নির্ভরতা আঠার কোডে পিছলে যাবে না, এমনকি এটি আপনার সংস্থার বাইরেও যে কেউ দ্বারা পুনরায় ব্যবহার করা যথেষ্ট বিমূর্ত হবে - এবং যদি সেই আঠালোতা থাকে কোড যথেষ্ট ভাল হবে - আপনি সম্প্রদায় ইনপুট এছাড়াও পাবেন।


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

0

সমাধানটি সহজ: এর জন্য পৃথক প্রকল্প তৈরি করুন এবং এটিকে পৃথক জিনিস হিসাবে পরিচালনা করুন: এটি নিজস্ব প্রয়োজনীয়তা, পরীক্ষা, কনভেনশন, ডকুমেন্টেশন, পরিকল্পনা, মানুষ, ইত্যাদি way এভাবে, আপনি নিশ্চিত করেন যে মানটি উচ্চমাত্রায় থাকবে এবং সম্ভাব্য ব্রেকিং পরিবর্তনগুলি আসবে তারা সমস্যা তৈরি করার আগে প্রথমে মূল্যায়ন করুন।

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

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