সলিড বনাম অকাল বিমূর্ততা এড়ানো


27

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

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

  • এটি আমার কোডকে আরও ভার্বোজ করে তোলে, বোঝা শক্ত হয়ে যায় ইত্যাদি এবং যদি কোনও সদৃশতা দূর না করে তবে তার পক্ষে নিজের পক্ষে ক্রমবর্ধমান মডুলারালিটি প্রমাণ করা আমার পক্ষে কঠিন। আমি সহজ, দৃly়ভাবে মিলিত প্রক্রিয়াজাতীয় বা objectশ্বর অবজেক্ট কোডটি কখনও কখনও খুব ভাল ফ্যাক্টরযুক্ত রেভিওলি কোডের চেয়ে বোঝা সহজ বলে মনে করি কারণ প্রবাহটি সহজ এবং রৈখিক। এটি লিখতেও অনেক সহজ।

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

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


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

3
@ এস.লোট: এটি প্রসঙ্গ থেকে সুস্পষ্ট হওয়া উচিত। আমি যেমন এটি পড়েছি, কমপক্ষে, "বর্তমানে প্রশ্নযুক্ত কোডের চেয়ে বেশি উপস্থিত রয়েছে।"
ম্যাসন হুইলারের

3
@ এস.লট: আপনি যদি পেডেন্টিক হওয়ার প্রতি জোর দেন, "" আরও বেশি কিছু বর্তমানে বিদ্যমান উপস্থিতিকে বোঝায়। এর অর্থটি হ'ল কোড বা মোটামুটি নকশা যা কিছু ইতিমধ্যে বিদ্যমান এবং আপনি কীভাবে এটি রিফ্যাক্টর করবেন তা ভাবছেন।
dsimcha

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

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

উত্তর:


8

আপনার সিস্টেম ডিজাইনের ভারসাম্য কীভাবে বজায় রাখতে হয় তা বুঝতে আপনাকে সহায়তা করার জন্য নীচেরগুলিতে সহজ নীতিগুলি প্রয়োগ করা যেতে পারে:

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

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


3
ভাল মন্তব্য। অন্যান্য উত্তরে যেমন আলোচনা করা হয়েছে, "একক দায়বদ্ধতা" নিয়ে একটি সমস্যা হ'ল শ্রেণীর দায়িত্ব বিভিন্ন বিমূর্ত স্তরে বর্ণিত হতে পারে।
dsimcha

5

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

অন্যান্য সমস্ত সৃজনশীল শাখার মতো এখানে কোনও বিস্মৃততা নেই - কেবল ট্রেড অফস। আপনি যত বেশি এটি "সহজ" করেন তা আপনার বর্তমান সমস্যা ডোমেন বা প্রয়োজনীয়তার জন্য কখন পর্যাপ্ত তা সিদ্ধান্ত নেওয়া যায়।

এই বলে যে - বিমূর্ত করা সফ্টওয়্যার বিকাশের হৃদয় - তাই যদি এটি না করার কোনও ভাল কারণ না থাকে তবে অনুশীলন আপনাকে এটিকে আরও উন্নত করে তুলবে এবং আপনি ব্যবসায়ের জন্য অন্ত্র অনুভূতি পাবেন। সুতরাং এটির পক্ষপাতিত্ব করুন যদি না তা ক্ষতিকর হয়।


5
I want to avoid premature abstraction.In my experience drawing abstraction lines without concrete use cases... 

এটি আংশিকভাবে সঠিক এবং আংশিক ভুল is

ভুল
এটি ওও নীতিগুলি / সলাইড প্রয়োগ করতে বাধা দেওয়ার কোনও কারণ নয়। এটি কেবল খুব তাড়াতাড়ি প্রয়োগ করা বাধা দেয়

যা হলো...

রাইট
করবেন না refactor কোড পর্যন্ত এটি refactorable হয়; যখন এটি প্রয়োজনীয়তা সম্পূর্ণ হয়। অথবা, যখন আপনি যা বলছেন তেমন "ব্যবহারের কেস" থাকে।

I find simple, tightly coupled procedural or God object code is sometimes easier to understand than very well-factored...

একা বা সিলোতে
কাজ করার সময় OO না করার সমস্যাটি তাত্ক্ষণিকভাবে সুস্পষ্ট নয়। আপনি কোনও প্রোগ্রামের প্রথম সংস্করণটি লেখার পরে:

Code is fresh in your head
Code is familiar
Code is easy to mentally compartmentalize
You wrote it

এই ভাল জিনিসগুলির 3/4 দ্রুত অল্প সময়ের মধ্যেই মারা যায়।

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

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


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

এনক্যাপসুলেশন এবং বিমূর্তি দুটি পৃথক ধারণা। এনক্যাপসুলেশন হল একটি প্রাথমিক ওও ধারণা যা মূলত আপনার ক্লাস করে। ক্লাসগুলি নিজের মধ্যে এবং সামঞ্জস্যতা এবং পাঠযোগ্যতা সরবরাহ করে। এটি দরকারী।
পি.ব্রেইন.ম্যাকি

সঠিকভাবে প্রয়োগ করার পরে বিমূর্ততা রক্ষণাবেক্ষণ হ্রাস করতে পারে। ভুলভাবে প্রয়োগ করা এটি রক্ষণাবেক্ষণ বাড়িয়ে তুলতে পারে। কখন এবং কোথায় রেখাগুলি আঁকতে হবে তা জানতে কীভাবে প্রতি সেয়ে "ফ্যাক্টরি প্যাটার্ন প্রয়োগ করতে হবে" তার মূল প্রযুক্তিগত দিকগুলি ছাড়াও ব্যবসায়, কাঠামো, গ্রাহক সম্পর্কে একটি গভীর বোঝাপড়া দরকার।
পি.ব্রেইন.ম্যাকি

3

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

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


1
+1 টি। "উপযুক্ত" অর্থ কী তার এখনও একটি ভাল সংজ্ঞা দরকার।
jprete

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

4
হ্যাঁ, তবে কোনও ধরণের বিস্তৃত সংজ্ঞাটি এখনও কার্যকর।
jprete

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

1
আমি কাউকে অন্ধভাবে স্প্যাগেটি কোড লেখার পরিবর্তে ডিকোপলড কোড লিখতে পছন্দ করি :)
বরিস ইয়ানকভ

2

আমি আপনার কাছে এটির দরকার নেই এমন দিক থেকে আরও যোগাযোগ করতে চাই। এই পোস্টটি বিশেষত একটি আইটেমের উপর ফোকাস করবে: উত্তরাধিকার।

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

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


1

কোডের ভবিষ্যতের কারণে নীতিগুলি কখন প্রয়োগ করবেন না আপনি যদি বিকাশকারী হিসাবে জানেন তবে আপনার পক্ষে ভাল।

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

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

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

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

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


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

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

1

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

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


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

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

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

1

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

এর বাইরে, আপনার সলাইড মনে রাখা উচিত, তবে একটি নিয়মের চেয়ে গাইডলাইন হিসাবে বেশি।


0

আপনার যদি স্পষ্টভাবে আরও পরিমিতরতার প্রয়োজন না হয়, উল্লেখযোগ্য নকল না থাকে এবং কোডটি পঠনযোগ্য হয় তবে Godশ্বরের অবজেক্টস এবং শক্তভাবে সংযুক্ত কোডের সাথে কী ঘটছে?

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


0

আমি অতিরিক্ত এবং অনুপযুক্ত বিমূর্ততা সম্পর্কে আপনার উদ্বেগগুলি ভাগ করি, তবে আমি অকাল বিমূর্ততা সম্পর্কে অতোটা উদ্বিগ্ন নই।

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

এটি যা বোঝায় তা হ'ল কোডটিতে প্রোটোটাইপিং, পরীক্ষা-নিরীক্ষা এবং ব্যাকট্র্যাকিংয়ের কিছু ডিগ্রি।

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

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

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


0

উপযুক্ত বিমূর্ততা রেখাগুলি আঁকাই এমন কিছু যা অভিজ্ঞতা থেকে আঁকে। আপনি এটি করতে ভুল করবেন যে অনস্বীকার্য।

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

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

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

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


0

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


1
আপনার উত্তর উপর প্রসারিত বিবেচনা করুন। যেমনটি দাঁড়িয়েছে, আপনি দুটি অরথোগোনাল ধারণা একসাথে নিয়ে আসছেন এবং ফলাফল কীভাবে ওপি'র উদ্বেগকে মোকাবেলা করবে তা পরিষ্কার নয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.