আপনি কীভাবে উচ্চ কাস্টমাইজড সফ্টওয়্যার সংগঠিত করবেন?


28

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

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

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

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

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

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

আমি নিশ্চিত যে আমরা এই সমস্যা নিয়ে লড়াই করা একমাত্র দল নই এবং এই বিষয়টিতে এত কম উপাদান খুঁজে পেয়ে আমি হতবাক।

সুতরাং আমার প্রশ্নগুলি নিম্নলিখিত:

  1. অত্যন্ত স্বনির্ধারিত সফ্টওয়্যার নিয়ে আপনার কী অভিজ্ঞতা রয়েছে, আপনি কোন পদ্ধতিটি বেছে নিয়েছেন এবং এটি আপনার পক্ষে কীভাবে কাজ করে?
  2. আপনি কোন পদ্ধতির প্রস্তাব দেন এবং কেন? একটি ভাল পদ্ধতির আছে কি?
  3. আপনি সুপারিশ করতে পারেন যে বিষয়ের উপর কোন ভাল বই বা নিবন্ধ আছে?
  4. আমাদের প্রযুক্তিগত পরিবেশের (। নেট, সত্তা ফ্রেমওয়ার্ক, ডাব্লুপিএফ, ডিআই) জন্য আপনার কি নির্দিষ্ট প্রস্তাবনা রয়েছে?

সম্পাদনা:

সমস্ত পরামর্শ জন্য ধন্যবাদ। আমাদের দলে ইতিমধ্যে আমাদের ধারণাগুলির সাথে বেশিরভাগ ধারণাগুলি মেলে তবে তাদের সাথে আপনার অভিজ্ঞতা এবং সেগুলি আরও ভালভাবে বাস্তবায়নের জন্য টিপসগুলি পাওয়া সত্যিই সহায়ক।

আমি এখনও নিশ্চিত নই যে আমরা কোন পথে যাব এবং আমি সিদ্ধান্ত নিচ্ছি না (একা), তবে আমি আমার দলের সাথে এটি পাস করব এবং আমি নিশ্চিত যে এটি সহায়ক হবে।

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

সুতরাং, সমস্ত প্রতিক্রিয়া জন্য আবার ধন্যবাদ!


কোড হিসাবে ডাটাবেস টেবিল চিকিত্সা বিবেচনা করুন।

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

উত্তর:


10

দেখে মনে হচ্ছে যে মৌলিক সমস্যাটি কেবল কোড ভান্ডার রক্ষণাবেক্ষণ নয়, উপযুক্ত কাঠামোর অভাব

  1. সিস্টেমের মূল / সার কী, যা সবসময় সব সিস্টেমই ভাগ করে নেবে?
  2. প্রতিটি গ্রাহকের কী বর্ধন / বিচ্যুতি প্রয়োজন?

একটি কাঠামো বা স্ট্যান্ডার্ড গ্রন্থাগারটি পূর্ববর্তীকে ঘিরে রেখেছে, তবে পরবর্তীটি অ্যাড-অন হিসাবে ব্যবহার করা হবে (প্লাগইনস, সাবক্লাস, ডিআই, কোড কাঠামোর জন্য যা কিছু বোঝায়)।

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

সিস্টেমটি প্রয়োগ করার জন্য ব্যবহৃত নির্দিষ্ট প্রযুক্তিগুলি (। নেট, ডাব্লুপিএফ, যাই হোক না কেন) মূলত গুরুত্বহীন।

এই অধিকার পাওয়া সহজ নয় , তবে এটি দীর্ঘমেয়াদী বাস্তবতার জন্য গুরুত্বপূর্ণ । এবং অবশ্যই আপনি যতক্ষণ অপেক্ষা করবেন তত বেশি প্রযুক্তিগত debtণ আপনাকে মোকাবেলা করতে হবে।

আপনি সফ্টওয়্যার আর্কিটেকচার: সাংগঠনিক নীতি ও প্যাটার্নস বইটি পেতে পারেন ।

শুভকামনা!


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

আমি মনে করি আমাদের অনেকগুলি শাখার (> 90%) এর মধ্যে একটি বৃহত্তর অংশীদারি অংশ রয়েছে, তবে শেষ 10% সর্বদা বিভিন্ন স্থানে থাকে, তাই খুব কম উপাদান রয়েছে যেখানে আমি কিছু ইউটিলিটি লাইব্রেরি ব্যতীত গ্রাহকের নির্দিষ্ট পরিবর্তনগুলি কল্পনা করতে পারি না যা কোনও ব্যবসায়িক যুক্তি না রাখুন।
একেজেন্ট

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

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

11

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

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

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

সম্পাদনা: এটি আরও বোধগম্য করার একটি উপাখ্যান:

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

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

কয়েক বছর পরে, এই মডিউলটি মূলত যেখানে ব্যবহৃত হয়েছিল সেই গুদামের বিন্যাস পরিবর্তিত হয়েছিল এবং এর সমস্ত নমনীয়তা সহ মডিউলটি নতুন প্রয়োজনীয়তার সাথে মেলে না; সুতরাং আমি এটিও একটি কাস্টম অ্যালগরিদম দিয়ে প্রতিস্থাপন করেছি।

আমি জানি যে এলওসি একটি ভাল পরিমাপ নয়, তবে যাইহোক: "নমনীয়" মডিউলটির আকার ছিল ~ 3000 এলওসি (পিএল / এসকিউএল), যখন একই কাজের জন্য একটি কাস্টম মডিউল ~ 100..250 এলওসি লাগে। অতএব, নমনীয় হওয়ার চেষ্টাটি আমরা আশা করেছিলাম পুনর্ব্যবহারযোগ্যতা অর্জন না করেই কোড বেসের আকারটি অত্যন্ত বৃদ্ধি করে।


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

3
অগণিত "ifs" এড়ানোর জন্য আমাদের ধারণা হ'ল নির্ভরতা ইনজেকশনের ব্যাপক ব্যবহার করা এবং বিভিন্ন গ্রাহকের জন্য সম্পূর্ণ মডিউল আদান প্রদান। এটি কীভাবে কার্যকর হবে তা নিশ্চিত নয়। এই পদ্ধতিটি আপনার পক্ষে কীভাবে কাজ করেছিল?
akzenT

+1, এটি মূলত আমার এই প্রকল্পগুলির অভিজ্ঞতার সাথে মেলে যা এটি ভালভাবে পরিচালনা করেছে। যদি আপনি 'বিভিন্ন গ্রাহকের জন্য আইএফএস' ব্যবহার করতে চলেছেন, 2 পয়েন্ট: ১ (গ্রাহক 1) ... করবেন না, পরিবর্তে যদি (কনফিগারেশন অপশন 1) করুন ... এবং প্রতি গ্রাহক কনফিগারেশন অপশন রয়েছে। 2. এটি না করার চেষ্টা করুন! হতে পারে যে সময়ের 1% সময় কনফিগারেশন-নির্দিষ্ট মডিউলগুলির চেয়ে ভাল (আরও বোধগম্য / সহজেই বজায় রাখা যায়) বিকল্প হবে।
ভৌগানড্রয়েড

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

হ্যাঁ, প্রতি-বৈশিষ্ট্য মডিউল এবং তারপরে প্রতি গ্রাহক কনফিগারেশন / বৈশিষ্ট্যগুলির নির্বাচন। ডিআই আদর্শ হবে। দুর্ভাগ্যক্রমে আমি কখনই আপনার একক ডেটা লাইব্রেরির সাথে গ্রাহক প্রতি গ্রাহক কাস্টমাইজেশনের প্রয়োজনীয়তাগুলি একত্রিত করতে পারি নি, তাই আমি নিশ্চিত হতে পারি না যে আমি সেখানে খুব বেশি সহায়তা করতে পারি ...
ভৌগান্ড্রয়েড

5

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

আমাদের কাঠামোটি আপনার অনুরূপ, তবে আমাদের কোডের জন্য আমাদের একক ভান্ডার ছিল। প্ল্যাটফর্ম নির্দিষ্ট কোড কোড গাছের মধ্যে তাদের নিজস্ব প্রকল্প ফোল্ডারে গিয়েছিল। কমন কোডটি গাছের মধ্যে বসবাস করত এটি কোন স্তরের উপর নির্ভর করে।

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

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

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

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

সুতরাং, আপনার প্রশ্নের উত্তর দিতে:

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

আপনার অভিজ্ঞতা ভাগ করার জন্য ধন্যবাদ। কেবল আরও ভালভাবে বুঝতে: আপনার ক্ষেত্রে কীভাবে একটি প্ল্যাটফর্ম সংজ্ঞায়িত করা হয়। উইন্ডোজ, লিনাক্স, এক্স 86 / এক্স 64? বা বিভিন্ন গ্রাহক / পরিবেশের সাথে আরও কিছু সম্পর্কিত? আপনি 4-তে একটি ভাল বক্তব্য দিচ্ছেন) আমি মনে করি এটি আমাদের অন্যতম সমস্যা। আমাদের কাছে প্রচুর স্মার্ট ও যোগ্য লোকের একটি দল রয়েছে তবে কীভাবে কীভাবে কাজ করা যায় সে সম্পর্কে প্রত্যেকেরই ধারণা কিছুটা আলাদা। আর্কিটেকচারের দায়িত্বে নিযুক্ত কাউকে ছাড়াই সাধারণ কৌশল নিয়ে একমত হওয়া শক্ত এবং আপনি কোনও পরিবর্তন না করেই নিজেকে আলোচনায় হারানোর ঝুঁকিপূর্ণ।
একেজেন্ট

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

4

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

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

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

মূল অ্যাপ্লিকেশন (সমস্ত ক্লায়েন্টের জন্য একটি অ্যাপ্লিকেশন), যখন ক্লায়েন্টের জন্য একটি অনুরোধ আসে তখন সমস্ত ক্লায়েন্ট নির্দিষ্ট স্টাফকে ক্যাশে করে দেয় এবং এটি একটি সাধারণ ডেটা অবজেক্ট তৈরি করে (যেমন রিমোট এডিও রেকর্ড সেটের মতো), যা ক্রমিক এবং উত্তীর্ণ হতে পারে কাছাকাছি.

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

কোর সিস্টেম কোড এবং বাস্তবায়ন কোডের জন্য আমাদের পৃথক উত্স সংগ্রহস্থল ছিল।

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

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


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

2

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

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


আপনি গ্রাহকদের মধ্যে একই একই কোর লাইব্রেরিগুলির মধ্যে পার্থক্য করেছেন বা আপনি পুরো গাছটি কাঁটাচামচ করেন? আপনি কি মেইনলাইন থেকে আলাদা কাঁটাচামচগুলিতে নিয়মিত একীভূত হন? এবং যদি হ্যাঁ, দৈনিক সংশ্লেষের রুটিন ব্যয়টি কত সময় নিয়েছে এবং সময় চাপ শুরু হওয়ার সাথে সাথে এই পদ্ধতিটি বিচ্ছিন্ন হওয়ার বিষয়টি আপনি কীভাবে এড়িয়ে গেছেন (যেমন এটি প্রকল্পের এক পর্যায়ে সর্বদা হয়)? অনেক প্রশ্নের জন্য দুঃখিত: p
aKzenT

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

আমি কৌতূহলী: আইআইআরসি মারিউরিয়াল হ'ল গিটের মতো একটি ডিভিসিএস। সাবভার্সন বা অন্যান্য traditionalতিহ্যবাহী ভিসিএসের তুলনায় শাখাগুলির মধ্যে এই একীকরণগুলি করার কোনও সুবিধা কী আপনি লক্ষ্য করেছেন? আমি মাত্র 2 সম্পূর্ণ পৃথক উন্নত শাখাগুলি subversion ব্যবহার করে একটি বেদনাদায়ক মার্জ প্রক্রিয়া শেষ করেছি এবং ভাবছিলাম যে যদি আমরা গিট ব্যবহার করি তবে এটি আরও সহজ হত।
akzenT

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

2

আমি ভীত যে আপনার বর্ণিত সমস্যার সরাসরি অভিজ্ঞতা আমার কাছে নেই, তবে আমার কিছু মন্তব্য আছে।

কোডটি কেন্দ্রীয় সংগ্রহস্থল (যতটা সম্ভব অনুভবযোগ্য) এ একত্রে আনার দ্বিতীয় বিকল্প এবং কাস্টমাইজেশনের জন্য আর্কিটেকচার (আবার, যতটা সম্ভব অনুভবযোগ্য) প্রায় দীর্ঘমেয়াদে যাওয়ার উপায় is

সমস্যাটি হ'ল আপনি কীভাবে সেখানে যাওয়ার পরিকল্পনা করছেন এবং এটি কত দিন নিচ্ছে।

এই পরিস্থিতিতে, সম্ভবত একবারে (অস্থায়ীভাবে) আবেদনের একাধিক অনুলিপি জমা দেওয়া ঠিক আছে।

এটি আপনাকে ধীরে ধীরে এমন একটি আর্কিটেকচারে স্থানান্তরিত করতে সক্ষম করবে যা সরাসরি পতন ছাড়াই সরাসরি কাস্টমাইজেশন সমর্থন করে।


2

দ্বিতীয় পদ্ধতিরটি আরও মার্জিত বলে মনে হচ্ছে, তবে আমাদের এই পদ্ধতির মধ্যে অনেকগুলি অমীমাংসিত সমস্যা রয়েছে।

আমি নিশ্চিত যে এই সমস্যাগুলির যে কোনও একটি সমাধান করা যেতে পারে, একের পর এক। যদি আপনি আটকে যান তবে নির্দিষ্ট সমস্যা সম্পর্কে এখানে বা এসও তে জিজ্ঞাসা করুন।

অন্যরা যেমন উল্লেখ করেছে যে, একটি কেন্দ্রীয় কোডবেস / একটি সংগ্রহস্থল থাকা আপনার পছন্দ মতো বিকল্প should আমি আপনার উদাহরণ প্রশ্নের উত্তর দেওয়ার চেষ্টা করি।

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

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

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

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

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

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


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

@ একজেন্ট: কাস্টমাইজিবিলিটি নিখরচায় আসে না, আপনার ব্যবহারের স্বাচ্ছন্দ্যতা বনাম কাস্টমাইজিবিলিটি বাণিজ্য করতে হবে। আমার সাধারণ পরামর্শটি হ'ল আপনি নির্ভরতাগুলি প্রবর্তন করবেন না যেখানে সিস্টেমের মূল অংশটি কোনও কাস্টম অংশ থেকে কেবল অন্যভাবেই নির্ভর করে। উদাহরণস্বরূপ, গ্রাহক 1 এর জন্য এই "অতিরিক্ত টেবিলগুলি" প্রবর্তন করার সময়, আপনি কি সেই টেবিলগুলি এবং গ্রাহক 2 এর জন্য সম্পর্কিত কোড স্থাপন করা এড়াতে পারবেন? উত্তরটি যদি হ্যাঁ হয় তবে সমাধানটি ঠিক আছে।
ডক ব্রাউন

0

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

আর কোনও ছোট ছোট কাস্টম অনুরোধগুলি কেস লজিক প্রয়োগ করে পরিচালনা করা হয়েছিল।

যদি মোডগুলি দুটি র‌্যাডিক্যাল ছিল, আমরা আলাদা আলাদা মডিউল অন্তর্ভুক্ত করার জন্য একটি ক্লোন তৈরি করেছি (পৃথক অন্তর্ভুক্ত) এবং এর চারপাশে একটি CASE মোড়ানো।

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

আমাদের পরিবেশ ক্লাসিক এএসপি এবং এসকিউএল সার্ভার ছিল। আমরা কোনও স্প্যাগেটি কোডের দোকান ছিলাম না ... Includes, Subroutines এবং Funtions ব্যবহার করে সবকিছুই মডুলার হয়েছিল।


-1

যখন আমাকে বি এর বিকাশ শুরু করতে বলা হবে যা এ এর ​​সাথে ৮০% কার্যকারিতা ভাগ করে নিচ্ছে, আমি হয় করব:

  1. এটিকে ক্লোন করুন এবং এটি সংশোধন করুন।
  2. এ এবং বি উভয় যে সি ব্যবহার করবে সেটির কার্যকারিতাটি বের করুন।
  3. বি এবং নিজের উভয়ের চাহিদা পূরণের জন্য একটি কনফিগারযোগ্য যথেষ্ট করুন (অতএব বি এ তে এমবেড করা আছে)।

আপনি 1 টি বেছে নিয়েছেন এবং আপনার অবস্থার সাথে এটি উপযুক্ত নয় বলে মনে হচ্ছে। আপনার মিশনটি 2 এবং 3 এর মধ্যে কোনটি আরও ভাল ফিট pred


1
সহজ মনে হচ্ছে, তবে বাস্তবে এটি কীভাবে করবেন? আপনি যদি আপনার সফ্টওয়্যারটিকে "যদি (গ্রাহক 1)" দিয়ে ঝাঁকুনি না দিয়ে কীভাবে কনফিগার করতে পারেন যা কিছু সময়ের পরে অবিশ্বাস্য হয়ে যায়।
akzenT

@AKzenT এজন্য আপনার চয়ন করার জন্য আমি 2 এবং 3 রেখেছি। কনফিগারেশনের মাধ্যমে গ্রাহক 1 এর প্রজেক্টকে গ্রাহক 2 এর প্রয়োজনীয়তা তৈরি করার জন্য যদি ধরণের পরিবর্তনগুলি প্রয়োজন হয় কোডটি অবিস্মরণীয় করে তুলতে চলেছে তবে 3 করবেন না
মোশে রেভাঃ

আমি "যদি (গ্রাহক 1)" এর পরিবর্তে "if (বিকল্প 1)" করা পছন্দ করি। এন বিকল্পগুলির সাথে এইভাবে আমি প্রচুর সম্ভাব্য গ্রাহক পরিচালনা করতে পারি। উদাহরণস্বরূপ, এন বুলিয়ান বিকল্পগুলির সাহায্যে আপনি 2 manage N গ্রাহককে পরিচালনা করতে পারবেন, কেবলমাত্র 'এন' থাকলে '... "যদি (গ্রাহক 1)" কৌশলটি পরিচালনা করা অসম্ভব যার জন্য 2 ^ এন' যদি প্রয়োজন হয় '।
ফিল্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.