বিনা পদ্ধতিতে আপনি কী ক্লাস বলছেন?


10

বিনা পদ্ধতিতে আপনি কী ক্লাস বলছেন?

উদাহরণ স্বরূপ,

class A
{
  public string something;
  public int a;
}

উপরে কোনও পদ্ধতি ছাড়াই একটি শ্রেণি রয়েছে। এই ধরণের শ্রেণীর কোনও বিশেষ নাম আছে?


1
কোন মেথড-ক্লাস কম?
কেওসপ্যান্ডিয়ন

11
প্রযুক্তিগত শব্দটি রেকর্ড বা কাঠামো
কিলিয়ান ফুট

4
একটি "প্রপার্টি ব্যাগ"
মার্টিন ইয়র্ক

কিলিয়ান: আমি যুক্ত হওয়া অর্থের জন্য "গৌরবময় স্ট্রাক্ট" পছন্দ করি।
জেসন

উত্তর:


23

বেশিরভাগ সময়: একটি অ্যান্টি প্যাটার্ন।

কেন? কারণ এটি "অপারেটর" ক্লাস এবং ডেটা স্ট্রাকচারের সাথে প্রসেসরিয়াল প্রোগ্রামিং সংযুক্ত করে। আপনি ডেটা এবং আচরণ পৃথক করেন যা একেবারেই ভাল না।

প্রায়শই সময়: একটি ডিটিও (ডেটা ট্রান্সফার অবজেক্ট)

কোনও ব্যবসায় / ডোমেন অবজেক্ট থেকে উত্পন্ন ডেটা আদান-প্রদানের জন্য শুধুমাত্র ডেটাস্ট্রাকচারগুলি পড়ুন।

কখনও কখনও: শুধু তথ্য কাঠামো।

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


4
আমি সবাইকে জাভাতে পাবলিক গেটার / সেটার দিয়ে ক্লাস করতে নিরুৎসাহিত করি, এটি মস্তিষ্কে মৃত এবং কিছু পাত্রে এমনকি সেটার / গেটর কোডটিও চালানো হবে না (গ্লাসফিশের দিকে তাকানো ...), সুতরাং হয় এটি ডিফল্ট বা আপনার একটি বাগ। আমি বিশ্বাস করি না যে ওওপি এনক্যাপসুলেশন সঠিক ছিল, এটি দেখা যায়, বেশিরভাগ সময় অ্যাপ্লিকেশনগুলিতে ডিটিও কেবল প্রয়োজন হয় না, তবে তারা বেশিরভাগ ক্ষেত্রে ব্যবহৃত ক্লাস হয়। সুতরাং এন্টিপ্যাটার্ন ছাড়াও তারা কিছু, আমি এর পরিবর্তে "বেসিক বিল্ডিং ব্লক" শব্দটি ব্যবহার করব।
আজাদাম

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

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

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

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

9

আমি এটি কল করেছি structবা recordকারণ এটি ডেটা সঞ্চয় করার জন্য ব্যবহৃত হয় এবং এটি Cআপনি যেমন দেখতে পান তেমন ভাষায় এটি খুব সাধারণ : কাঠামো (সি প্রোগ্রামিং ভাষা) । সুতরাং ব্যক্তিগতভাবে আমি structআরও উপযুক্ত এবং পাঠযোগ্য এমন শ্রেণীর পরিবর্তে একটি ব্যবহার পছন্দ করব :

struct A
{
  public string something;
  public int a;
}

অন্যরা যেমন বলেছিল তারা সাধারণত ডিটিও (ডেটা ট্রান্সফার অবজেক্ট) হিসাবে ব্যবহৃত হয় ।


4
স্ট্রাক্টের সমস্যাটি হ'ল, "স্ট্রাক্ট" হ'ল বহু ভাষায় একটি কীওয়ার্ড। সি # উদাহরণস্বরূপ স্ট্রাক্টকে মান ধরণের হিসাবে গণ্য করে যার বিভিন্ন শব্দার্থবিজ্ঞান রয়েছে। এটি কয়েকটি ভাষায় (পিএল / এসকিউএল) "রেকর্ড" করার ক্ষেত্রেও সত্য।
ফ্যালকন

5

এগুলি সমান ওল্ড __ অবজেক্টস (PO_Os) হিসাবে খালি যেখানে জাভা বা সি বা সিআইএল বা আপনি যে কোনও ভাষা ব্যবহার করছেন known

যদি সেগুলি যোগাযোগের জন্য সাধারণ ডেটা ব্লক হিসাবে ব্যবহার করা হয়, তবে তারা ডেটা স্থানান্তর অবজেক্টস (ডিটিও) হিসাবে পরিচিত হতে পারে ।

যদি তারা কিছু বাহ্যিকভাবে সরবরাহিত ডেটা উপস্থাপন করে তবে তারা সত্তা হিসাবে পরিচিত হতে পারে ।


6
আপনি PODs সম্পর্কে ভাবছেন - একটি খুব আলাদা ধারণা। POJO গুলি স্পষ্টভাবে "ব্যবসায়িক যুক্তি" অন্তর্ভুক্ত করে তবে নির্দিষ্ট ফ্রেমওয়ার্কের উপর নির্ভরতা বাদ দেয়।
টম হাটিন -

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

2

আমি এই জাতীয় শ্রেণিকে একটি পরিবর্তনীয় ডেটা হোল্ডার বলব এবং কখনও কখনও জেনেরিক ফর্ম ব্যবহার করেছি:

class DataHolder<T>
{
   public T dat;
}

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

মনে রাখবেন যে পরিবর্তনীয় ডেটা হোল্ডারগুলি এমন ধরণের (মুটোটেবল বা না) জন্য দরকারী হতে পারে যা ডেটা ধরে রাখা দরকার , তারা নিরাপদে ডেটা এক্সচেঞ্জের জন্য একইভাবে ব্যবহার করতে পারবেন না যেমন অপরিবর্তনীয় টাইপগুলি। উদাহরণস্বরূপ, একটি বিবৃতি যেমন:

myData = myCollection.GetData(myKey);

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

কেউ যদি কোনও মিউচ্যুয়াল অবজেক্টে সংগ্রহের তথ্য ফেরত পেতে চান তবে সঠিক দৃষ্টান্তটি প্রায়শই এমন কিছু হতে পারে:

var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);

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


0

প্রসঙ্গের উপর নির্ভর করে, আমি তাদের সত্ত্বা বলি। আমার বিরক্তিকর ব্যবসায়ের অ্যাপ্লিকেশনগুলিতে, তারা সাধারণত আমার ডিআর 1: 1 এ ম্যাপ করে।


0

আমি এটি একটি কল করবে Schema

এটিতে ডেটাবেস টেবিলের প্রতিনিধিত্বকারী, বা একটি ডিসিরিয়ালাইজড রেকর্ড, বা একটি ডিটিও ইত্যাদির মতো একাধিক ব্যবহার রয়েছে

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