ক্ষেত্র বনাম পদ্ধতি আর্গুমেন্ট [বন্ধ]


9

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

এটি করার অর্থ হল যে প্রচুর পদ্ধতিতে কোনও আর্গুমেন্ট থাকতে পারে না এমন এক, দু'জন বা তিনটি দিয়ে শেষ হয়।

আপনি এই বাণিজ্য সম্পর্কে কী ভাবেন সে সম্পর্কে আপনার মতামত শুনতে চাই এবং কোন পরিস্থিতিতে কোন পদ্ধতির সিদ্ধান্ত নেওয়ার বিষয়ে আপনি কীভাবে সিদ্ধান্ত নেবেন?

যেহেতু কোড বর্ণনা করার সময় কোডটি ইংরেজী তুলনায় প্রায়শই বোঝা সহজ হয়, তাই আমি একটি সামান্য সূচক তৈরি করেছি যার উভয় রূপ রয়েছে: https://gist.github.com/JeroenDeDauw/6525656


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

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

উত্তর:


2

যেহেতু আপনার উদাহরণের একমাত্র বাহ্যিকভাবে দৃশ্যমান পদ্ধতি তাই updateTableআমি মনে করি পদ্ধতি পরামিতিগুলির পরিবর্তে ক্ষেত্রগুলি ব্যবহার করা ভাল।

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

সিউডো-কোড উদাহরণ:

class TableTools {
    ...
    public void updateTable(currentTable, newTable) {
        TableUpdater u = new TableUpdater(schemaModifier, currentTable, newTable);
        u.removeRemovedFields();
        u.addAddedFields();
     }

     private class TableUpdater { ... }
}

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


7

ক্ষেত্রগুলি ব্যবহার করে সেই ক্ষেত্রগুলি যে পদ্ধতিগুলি ব্যবহার করে সেগুলির জন্য মাল্টিথ্রেডিং উপলব্ধ করার ক্ষমতা সহশক্ত হয়।

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


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

7

সাধারণ মানুষের কথায়:

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

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


1

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

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


0

আমি মনে করি, পছন্দটি আসল পরিস্থিতি অনুসারে হওয়া উচিত, যেমন আপনি এটি দেখেন। যদি কোনও আইটেম কোনও উদাহরণের সাথে সম্পর্কিত হয় তবে এটিকে তার ক্ষেত্র হিসাবে দেখা উচিত। আইটেমটি উদাহরণের বাইরে থাকলে, এটি একটি পদ্ধতি প্যারামিটার হিসাবে পাস করা উচিত।

আমাদের এই ক্ষেত্রে কার্যকর হওয়া উচিত (পার্থক্য যাইহোক তুচ্ছ নয়), বা (saveশ্বর রক্ষা করুন!) টাইপিংয়ের স্বাচ্ছন্দ্য নয়, কোডের বোধগম্যতা এবং স্বাভাবিকতার দ্বারা be


0

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

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

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

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

আপনি পূর্বাবস্থাপন করতে পারেন এবং অ্যাকশন করতে পারেন তবে কোনও ফাংশন নয়

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