সলিড নীতিগুলি ব্যবহার করার সময় কি ডেভেলপারদের জন্য আবিষ্কারের সমস্যা?


10

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

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

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

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

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

আমি গুগল করেছি / বেঞ্জ করেছি এমনকি ইয়াহু! ডি কিন্তু আমি এই সমস্যার কোনও স্বীকৃতি পাইনি।

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

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

SOLID এর প্রকৃত বাস্তবায়ন ঘটে যেখানে মধ্যম স্তর সম্পর্কে অন্তরঙ্গ জ্ঞান প্রয়োজন হয় না এর চেয়ে ভাল উপায় কি?

মূলত যা আমি জিজ্ঞাসা করছি সেগুলি একটি অত্যন্ত জটিল সিস্টেমে CRUD ধরণের বিকাশকারীদের CRUD বিকাশকারী হিসাবে চালিয়ে যাওয়ার অনুমতি দেওয়ার একটি উপায় রয়েছে


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

হুম। ধরণ. আমি এটির বিষয়ে যত বেশি চিন্তা করি ততই আমি বিশ্বাস করি যে এখানে একটি ব্যবসায়ের সুযোগটি ঘিরে রয়েছে।
এলগ্রিঙ্গো গ্র্যান্ডে

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

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

@ জানহুদেক এটি "যদি" নয় তবে "কখন" রয়েছে। বিকাশকারীদের ডকুমেন্টেশন পড়তে হবে। আপনি যদি তাদের "প্রদত্ত টাস্কের জন্য তাদের প্রয়োজনীয় কী তাড়াতাড়ি খুঁজে বের করতে" চান তবে আপনার সেরা বাজি হ'ল ডকুমেন্টেশনকে কার্যকর করার জন্য ফোকাস করা। কোনও প্রযুক্তিগত সমাধান দিয়ে কোনও লোকের সমস্যা (যোগাযোগের মতো) সমাধান করার চেষ্টা করবেন না। এটা তোলে। করে। না. ওয়ার্ক।
রেন হেনরিচস

উত্তর:


4

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

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

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

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

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

BEGIN_COMMAND_MAP()
    COMMAND_ENTRY( CChangeDeviceState )
    COMMAND_ENTRY( CSetConfiguration )
    ....
END_COMMAND_MAP()

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

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

(*) আমি খুব বেশি বিশদ পেতে চাইনি, তবে আমার কাছে আসলে "কমান্ড" এবং "কমান্ড হ্যান্ডলার" ক্লাসের সেট ছিল। প্রকৃতপক্ষে সেই আদেশগুলি "পরিচালিত" ক্লাস থেকে প্যারামিটারগুলিতে / আউট / প্যারামিটার পরিচালনা / ক্রুইং / সিরিয়ালাইজ করার এই পৃথক দায়িত্ব।


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

0

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

সমস্যাটিকে সহজ করার জন্য নেমস্পেস (সি #) বা প্যাকেজগুলি (জাভা), বা আপনার ভাষায় যা কিছু অনুরূপ ধারণা রয়েছে তা ব্যবহার করার চেষ্টা করুন sp

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

আপনি যদি এটি সঠিকভাবে করেন তবে আপনি খুব আবিষ্কারযোগ্য আইটেমগুলি দিয়ে শেষ করবেন।

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

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

তবে যে জিনিসগুলি আমি মনে করতে পারি না, সেগুলি খুঁজে পাওয়া এখনও সহজ। এবং যখন আমি করি, আমি নামস্থান উপসর্গটি সরিয়ে ফেলতে পারি।


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

0

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

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

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


না। CRUD এর অর্থ এই নয় যে তারা কোনও ভাল নয়। তারা বিকাশকারী যা সর্বদা বুনিয়াদি ডেটা অ্যাপ্লিকেশনগুলির সাথে কাজ করে। CRUD = তৈরি করুন, পড়ুন, আপডেট করুন এবং মুছুন। এটি কীভাবে তাদের খারাপ প্রোগ্রামার করে তোলে তা দেখতে আমি ব্যর্থ।
এলগ্রিঙ্গো গ্র্যান্ডে

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