বৈশিষ্ট্য বিন্দু কি?


11

এখানে সম্পত্তি এবং আমার পাল্টা-যুক্তি সম্পর্কিত কিছু আর্গুমেন্ট রয়েছে:

লেখক এবং সেটটার পদ্ধতি লেখার চেয়ে ব্যবহার করা সহজ

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

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

তারা ভোক্তাদের কর্মক্ষমতা সম্পর্কে মোটামুটি ইঙ্গিত দেয়

এটি এমন কোনও যা ভবিষ্যতে পরিবর্তিত হতে পারে যে কোনও প্রদত্ত সম্পত্তির জন্য। ধরুন 1.0 এর রিলিজে, প্রপার্টি এক্স অ্যাক্সেস করলে কেবল একটি ক্ষেত্র ফিরে আসে। প্রকাশের ১.৫ তে, ক্ষেত্রটি শূন্য হলে, প্রপার্টিএক্স একটি নাল অবজেক্ট প্যাটার্নটি একটি নতুন নাল অবজেক্ট তৈরি করতে ব্যবহার করে। রিলিজ ২.০ এ, ক্ষেত্রটি প্রপার্টিএক্স-এ প্রাপ্ত পদ্ধতি দ্বারা আরও বৈধ হয়ে উঠছে।

সম্পত্তি যত বেশি জটিল হয়ে ওঠে, কোনও সম্পত্তি ব্যবহারের পারফরম্যান্সের ইঙ্গিতটি কম-বেশি সত্যবাদী বলে মনে হয়।

তারা সরকারী ক্ষেত্রের চেয়ে ভাল're

এটা সত্য. তবে পদ্ধতিগুলিও তাই।

তারা কোনও পদ্ধতির চেয়ে কোনও অবজেক্টের মৌলিকভাবে পৃথক দিক উপস্থাপন করে এবং অবজেক্টের সমস্ত গ্রাহককে এটির যত্ন নেওয়া উচিত

আপনি কি নিশ্চিত যে উপরের দুটি বিবৃতি সত্য?

তারা টাইপ করা সহজ, মানুষ

অবশ্যই, টাইপিং টাইপিংয়ের myObject.Lengthচেয়ে সহজ myObject.Length(), তবে এটি কি সামান্য সিনট্যাকটিক চিনির সাথে স্থির করা যায় না?


সম্পত্তি পরিবর্তে পদ্ধতি ব্যবহার করবেন কেন?

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

  • ভোক্তা সম্পর্কে চিন্তাভাবনা কম। এই সম্পত্তি একটি সেটর আছে? একটি পদ্ধতি নিশ্চিত না।

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

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


সুতরাং আমি আপনাকে জিজ্ঞাসা, কেন পদ্ধতির পরিবর্তে সম্পত্তি ব্যবহার? এমএসডিএন- এর বেশিরভাগ পয়েন্টগুলি কোড এবং তাদের মধ্যে গন্ধযুক্ত এবং এগুলি কোনও বৈশিষ্ট্য বা পদ্ধতিতে অন্তর্ভুক্ত নয়।

(সিকিউএস সম্পর্কে চিন্তাভাবনা করার পরে এই চিন্তাগুলি আমার কাছে এসেছিল))


5
+1 টি। বৈশিষ্ট্য ক্ষেত্রগুলির বাক্য গঠন সহ এমন পদ্ধতি যা কেবল অর্থবোধ করে না।
নেমানজা ত্রিফুনোভিচ

23
@ নিমঞ্জা ত্রিফুনোভিচ: আপনি যদি type GetFoo() void SetFoo()দশ হাজার বার লিখে থাকেন তবে তা সঠিকভাবে বোঝায় । আমার সমস্ত সময় সি # কোড লেখার সময় আমি কোনও সম্পত্তি দ্বারা কখনও বিভ্রান্ত হইনি।
এড এস

23
আমার মনে হচ্ছে আপনি ইতিমধ্যে আপনার মন তৈরি করেছেন। প্রশ্নটি কি?
ডিন হার্ডিং

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

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

উত্তর:


44

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

গেটর এবং সেটার পদ্ধতির জোড়গুলি একটি কোড গন্ধ।

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

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

একটি অত্যন্ত প্রশ্নবিদ্ধ মনোভাব। জিইউআই যদি কোনও দ্বারা আটকানো ডেটা আউটপুট করতে চায় DataStuffManagerImpl, তবে এটির কোনওরকমভাবে এটির নম্বর নেওয়া দরকার (এবং না, অ্যাপ্লিকেশনটির অর্ধেকটি উইজেট শ্রেণিতে ক্র্যামিং করা কোনও বিকল্প নয়)।

সম্পত্তি যত বেশি জটিল হয়ে ওঠে, কোনও সম্পত্তি ব্যবহারের পারফরম্যান্সের ইঙ্গিতটি কম-বেশি সত্যবাদী বলে মনে হয়।

[পদ্ধতিগুলি] কোনও পারফরম্যান্সের গ্যারান্টি নেই। পদ্ধতিটি আরও জটিল হয়ে উঠলেও এপিআই সত্যবাদী থাকবে। গ্রাহক যদি তাদের পারফরম্যান্স ইস্যুতে চালিত হয় এবং ওয়ার্ড-অফ-এপিআইয়ের উপর নির্ভর না করে তবে তাদের কোডটি তাদের প্রোফাইল করতে হবে।

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

অবশ্যই, myObject.Length টাইপ করা myObject.Length () টাইপ করার চেয়ে সহজ, তবে এটি কি সামান্য সিনট্যাকটিক চিনির সাথে স্থির করা যায় না?

প্রোপার্টি হয় যে অন্বিত চিনি।

ভোক্তা সম্পর্কে চিন্তাভাবনা কম। এই সম্পত্তি একটি সেটর আছে? একটি পদ্ধতি নিশ্চিত না।

"এই গেটারের জন্য কোনও সেটার আছে?" একই পার্থক্য.

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

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


3
+1, এবং এটি একটি অলিখিত আইন নয়। এমএসডিএন-তে সম্পত্তি ব্যবহারের নির্দেশিকাতে এটি অন্য অনেকের সাথে লেখা রয়েছে। আমি মনে করি নিজেকে অনেক সন্দেহ থেকে পরিষ্কার করার জন্য ওপি তাদের উচিত। এবং আমি এখানে কোনও লিঙ্ক পোস্ট করতে পারি না যেহেতু আমি এটি আমার ফোন থেকে লিখছি তবে গাইডলাইনগুলি খুঁজে পাওয়া সহজ should
ডেস্কলোন


@ ডেলান: সম্পত্তিগুলি সিনট্যাকটিক চিনি নয়। বৈশিষ্ট্যগুলি ক্ষেত্রগুলির মতো চিকিত্সা করা যেতে পারে (সেটার থাকলে সেগুলি একটি নিয়োগ লক্ষ্য হিসাবে ব্যবহার করা যেতে পারে)। পদ্ধতিগুলি পারে না।
xofz

1
@ সাম্পিয়ারস: obj.x = yমানচিত্র obj.setX(y)এবং obj.xমানচিত্র obj.getX()। কীভাবে আলাদা?

1
@ সাম্পিয়ারসন আপনি সম্পত্তি সেটারের দৃশ্যমানতা এবং একে অপরের থেকে পৃথক হয়ে উঠতে পারেন। আমি এটি আমার অস্তিত্ব ফ্রেমওয়ার্ক অবজেক্টগুলির সাথে সর্বদা ব্যবহার করি: আমার সেটারগুলি সুরক্ষিত রয়েছে (যাতে কেবল ফ্রেমওয়ার্ক কোনও মান সেট করতে পারে)। সুতরাং এটি অনুমতি ছাড়া বলতে int- দ্বারা = myObject.Length পুরোপুরি টেকসই এর myObject.Length = 10
মাইকেল ব্রাউন

19

গেটর এবং সেটার পদ্ধতির জোড়গুলি একটি কোড গন্ধ।

এটি একটি ত্রুটিযুক্ত অনুমান এবং সম্পূর্ণ ভুল। গেট / সেট পদ্ধতিগুলি কোনও ডেটা সদস্যকে encapsulate করার একটি উপায় এবং কোনওভাবেই "কোড গন্ধ" নয়। কিছু লোক "কোড গন্ধ" শব্দটি প্রায় উপেক্ষা করে আমি সত্যিই ঘৃণা করি তবে যাইহোক ...

এটি এমন কোনও যা ভবিষ্যতে পরিবর্তিত হতে পারে যে কোনও প্রদত্ত সম্পত্তির জন্য। ধরুন 1.0 এর রিলিজে, প্রপার্টি এক্স অ্যাক্সেস করলে কেবল একটি ক্ষেত্র ফিরে আসে। প্রকাশের ১.৫ তে, ক্ষেত্রটি শূন্য হলে, প্রপার্টিএক্স একটি নাল অবজেক্ট প্যাটার্নটি একটি নতুন নাল অবজেক্ট তৈরি করতে ব্যবহার করে। রিলিজ ২.০ এ, ক্ষেত্রটি প্রপার্টিএক্স-এ প্রাপ্ত পদ্ধতি দ্বারা আরও বৈধ হয়ে উঠছে।

সম্পত্তি যত বেশি জটিল হয়ে ওঠে, কোনও সম্পত্তি ব্যবহারের পারফরম্যান্সের ইঙ্গিতটি কম-বেশি সত্যবাদী বলে মনে হয়।

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

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


1
আমি কোড গন্ধের চেয়ে আরও ভাল শব্দটি দিয়ে একটি অনুগ্রহ দিতে যাচ্ছি। সবেমাত্র রিফেক্টর সম্পর্কিত একটি বই পড়ুন যেখানে এটি প্রায় হাজার বার ব্যবহৃত হয়। এটি চকবোর্ডে নখের মতো।
জেফো ২ '

1
@ জেফ ও: হ্যাঁ, আমি দেখতে পেয়েছি যে লোকেরা এই শব্দটিকে সবচেয়ে বেশি প্রায় ছড়িয়ে দেয় বলে মনে হয় তাদের খুব বেশি অভিজ্ঞতা হয় না।
এড এস

6
@ জেফ ও এবং এড এস: আইএমই, "কোড গন্ধ" শব্দটি পরিণত হওয়া শব্দে পরিণত হয়েছে যা লোকেরা যখন তাদের সত্যিকার অর্থে "আমার পছন্দ হয় না তবে তার আসলে কোনও কারণ নেই" বলতে বোঝায়
স্টিভেন ইভার্স

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

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

10

আপনার ভিত্তি ভুল।

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

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


6

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

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

একটি সেটার বা গেটারে খুব বেশি পরিমাণে (কতটা নির্ভর করে) কোড লাগানো ভুল, তবে কেবলমাত্র এটি সম্ভব হওয়ার কারণে সমস্ত ক্ষেত্রে প্যাটার্নটি ছড়িয়ে দেওয়ার কোনও কারণ নয়।


6

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

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

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

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

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

বৈশিষ্ট্যগুলির উলটোপথটি হ'ল অন্য কোনও বস্তু যাতে সেগুলি গ্রহণ করে তবে তা খুব সহজ। বৈশিষ্ট্যগুলির ক্ষয়ক্ষতিটি হ'ল এটি খুব সহজ যে অন্য কোনও বস্তু সেগুলির সুবিধা গ্রহণ করবে এবং আপনি সহজেই এটিকে আটকাতে পারবেন না।

অবজেক্ট মিউটেশন কন্ট্রোলার লেয়ারে বোঝায়, উদাহরণস্বরূপ, একটি এমভিসি আর্কিটেকচার। এটি আপনার সহযোগী। আপনার দৃষ্টিভঙ্গিও একজন সহযোগী, তবে এটি সরাসরি আপনার অবজেক্টগুলিকে পরিবর্তিত করা উচিত নয়, কারণ এর বিভিন্ন দায়িত্ব রয়েছে। আপনার ব্যবসায়িক বিষয়গুলিতে প্রেজেন্টেশন কোডের ঘূর্ণায়মানভাবে গিটার / সেটারগুলি এড়ানোর জন্য সঠিকভাবে সঠিক উপায় নয়।

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


5

সম্পত্তি ব্যবহারের জন্য আমার বইয়ের আর একটি গুরুত্বপূর্ণ কারণ হ'ল এগুলি পঠনযোগ্যতা বাড়িয়ে দিতে পারে।

account.setBalance(Account.getBalance()+deposit);

স্পষ্টতই তুলনায় অনেক কম পাঠযোগ্য

account.Balance += deposit;

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

9
অ্যাকাউন্ট নয় কেন? ডিপোজিট (পরিমাণ)?
xofz

4
@ সাম পিয়ারসন: +1। কেন গ্রাহকরা / সেটটাররা প্রায়শই দুর্বল নকশাকে নির্দেশ করে তার একটি নিখুঁত উদাহরণ।
নেমানজা ত্রিফুনোভিচ

4

আপনার কাছে আমার কাছে প্রায় বিপরীত ধর্মীয় দৃষ্টিভঙ্গি রয়েছে :)

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

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


+1 এটি কোনও সম্পত্তির প্রকৃত ব্যবহার। দুর্দান্ত উত্তর। "এর অর্থ এইও ছিল যে আপনি বিমূর্ত বেস শ্রেণিতে সুরক্ষিত করে তাদের জনসমক্ষে নিয়ে যাওয়া বা উপশ্রেণীতে প্রকাশের মাধ্যমে সম্পত্তিগুলিতে অ্যাক্সেসকে সীমাবদ্ধ করতে পারেন " "
কার্তিক শ্রীনিবাসন

ডেল্ফি বৈশিষ্ট্য অ্যাড নোসাম ব্যবহার করে। আপনি তালিকাটি বাছাই করেন না, আপনি এর sorted সম্পত্তিটি এতে সেট করেছেন true। সুতরাং এটি সেট করা আপনাকে falseআসল তালিকা দেয়। : D নাকি এলোমেলোভাবে এলোমেলো করে? : ডি বা যাই হোক না কেন, এটি কেবল বোকা। অতিরিক্তভাবে, এটি সঠিক সাজানো সেটের তুলনায় ধীরে ধীরে ধীরে ধীরে। বৈশিষ্ট্যগুলি খারাপ নয়, তবে আমি এগুলিকে খুব অল্প পরিমাণে ব্যবহার করতে শিখেছি (গেটর এবং সেটারগুলি নিয়ে বেশ খুশি হওয়ার আগ পর্যন্ত; আমি বেশিরভাগ জাভা ব্যবহার করছি)।
মার্টিনাস

1

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

(তারপরে তারা কেবল নিয়মিত যাত্রী এবং সেটার ছিল - এবং কেবল নামকরণের সম্মেলন দ্বারা এটি সংজ্ঞায়িত হয়েছিল - এবং এটি সত্যই গন্ধ পায়)

আজ আরও অনেকগুলি মামলা রয়েছে যেখানে নিয়মিত কোডের মাধ্যমে সম্পত্তিগুলি অ্যাক্সেস করা হয় এবং সংশোধিত হয় না - যেমন ডিবাগ করার সময়।


1

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


1
অ্যান্ডার্স হেলজবার্গ সি # (এবং কিছু আইএল) ডিজাইন করেছিলেন এবং ডেল্ফিও ডিজাইন করেছিলেন - যার বৈশিষ্ট্য ছিল।
জেসি সি স্লিকার

1

সম্পত্তিগুলির জন্য কমপক্ষে দুটি উদ্দেশ্য রয়েছে:

  • তারা ভিন্নভাবে প্রয়োগ করা হলেও তারা ক্ষেত্রগুলির মত ধারণাগতভাবে অভিন্ন । একজন গেটারকে অবজেক্টের অবস্থা পরিবর্তন করা উচিত নয় এবং এর কোনও পার্শ্ব প্রতিক্রিয়াও হওয়া উচিত নয়। কোনও সেটারের ক্ষেত্রে ক্ষেত্রটি সংশোধন করার মতো ধারণামূলকভাবে একইভাবে রাষ্ট্র পরিবর্তন করা উচিত এবং এর অন্যান্য পার্শ্ব প্রতিক্রিয়াও না ঘটে।

  • এগুলি সর্বজনীন (সম্ভবত কেবলমাত্র পঠনযোগ্য) ক্ষেত্রগুলিতে সিন্টেক্সিকভাবে অভিন্ন। এর অর্থ উত্স স্তরে কলকারীদের না ভাঙ্গিয়ে কোনও সর্বজনীন ক্ষেত্রটি কোনও সম্পত্তিতে পরিবর্তন করা যেতে পারে।


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

1
কোনও সম্পত্তিতে একটি সর্বজনীন ক্ষেত্র পরিবর্তন করা বাইনারি সামঞ্জস্যতা ভঙ্গ করবে ,
গ্রাহক কোডটি

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