খাঁটি পোকো মডেল থাকার সুবিধা কী?


16

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

public class ClassA
{
    public string MyProp { get; set; }
    public IEnumerable<ClassB> Children { get; }

    public void AddChild(ClassB newChild) { /*... */ }
    public void RemoveChild(ClassB child) { /* ... */ }
}

public class ClassB
{
    public string SomeProp { get; set; }
} 

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

কোন সাহায্য প্রশংসা করা হয়। ধন্যবাদ।


আমি অ্যাড / অপসারণ পদ্ধতিগুলি মুছে ফেলব যদি না তারা কিছু মান যোগ করে, যেমন শূন্য শ্রেণীর যুক্তিটি অবজেক্টের নালবজেক্ট প্যাটার্ন সংস্করণে অনুবাদ করে:AddChild(ClassB newChild) => Children.Add(newChild ?? new NullClassB())
গ্রাহাম

আপনি যদি কখনও শত শত পদ্ধতি নিয়ে অ্যাক্টিভেকর্ড ক্লাসের মাথা ব্যাথা নিয়ে কাজ করে থাকেন তবে যে কোনও সময় আপনি যা চান তা হতে পারে বা নাও পারে বলে আমি মনে করি আপীল বুঝতে সহজ হবে easier
কেসি

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

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

উত্তর:


43

আপনার দুটি প্রশ্ন সম্পর্কিত নয়।

খাঁটি পোকো মডেল থাকার সুবিধা কী?

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

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

আমি ফোলারকে মূলটি ব্যাখ্যা করতে দেব:

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

মার্টিনফোলার ডটকম: পোজো

আপনার অন্যান্য প্রশ্নের হিসাবে:

অ্যাড এবং মুছে ফেলার পদ্ধতিগুলি সহজাতভাবে কিছু ভুল আছে?

আমি Aসরাসরি সম্পর্কে জানতে পছন্দ করি না B। তবে এটি কোনও ডিআইপি জিনিস, পওজো জিনিস নয়।


Bসরলতার জন্য আমার সরাসরি নির্ভরতা ছিল , আদর্শভাবে এগুলি উভয়ই ইন্টারফেস প্রয়োগ করে। তবে Aএখনও একটি তালিকা আছে IInterfaceBAddChildযদি ইন্টারফেসের রেফারেন্সের মাধ্যমে বাচ্চাদের lyিলে ?ালাভাবে জুড়ে দেওয়া হয় তবে এই পদ্ধতিতে কিছু ভুল আছে ?
জেসি

6
সরলতার জন্য আমি মূর্খ জিনিসগুলির পুরো হোস্টটি করতে পারি। আমি যা পছন্দ করি না তা হল বি সম্পর্কে জ্ঞান এটি A ব্যবহার করে না যাতে বি এর সাথে কথা বলার জন্য উপযুক্ত এ-এর মালিকানাধীন ইন্টারফেসটি সংজ্ঞায়নের প্রয়োজন হয় না। আমি যতদূর বলতে পারি একটি সংগ্রহ। সুতরাং A কে <টি> এর মাধ্যমে বিয়ের সাথে লেনদেন করা উচিত যাতে এটি সম্পর্কে কোনও জিনিস জানতে হবে না।
candied_orange

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

2
আমি ভাবছি ফোলারের যদি তিনি পিইও ডাকতেন তবে তার উপস্থাপনা কতটা ভাল হত?
অলিভার

3

অ্যাড এবং রিমুভের সাহায্যে আপনি Collection<T>বৈশিষ্ট্যগুলি প্রয়োগ করছেন । নিজেকে জিজ্ঞাসা করুন আপনি কেন বা অন্য কোনও পরিবর্তনীয় শ্রেণীর IEnumerable<T>পরিবর্তে ব্যবহার করছেন List<T>? সম্ভবত আপনার সংগ্রহটি কেবল পঠনযোগ্য হওয়া উচিত নয়।

আমি ভাবতে পারি একমাত্র কারণ আপনি কোন অ্যাক্সেস পদ্ধতি প্রকাশ করতে চান তা নিয়ন্ত্রণ করতে চান। সেক্ষেত্রে আপনার নিজের সংগ্রহের ক্লাস তৈরি করা, একটি তালিকা এনক্যাপসুলেট করা, আপনার নির্বাচিত পদ্ধতিগুলি প্রয়োগ করুন এবং অপসারণ এবং বাস্তবায়ন করা ভাল লাগবে IEnumerable<T>। তারপরে IEnumerable<T>আপনার বাচ্চাদের সংগ্রহের ধরণের পরিবর্তে এটি ব্যবহার করুন।

তবে আমার List<ClassB>কাছে মনে হয় সম্ভবত আপনাকে ভালভাবে পরিবেশন করবে।


0

কি AddChildযুক্ত করে, এবংRemoveChild থেকে সরান? যদি এটি ডাটাবেস থেকে (বা যে কোনও ধরণের স্ট্রাইন্ড স্টোর) থেকে থাকে তবে আপনার বাছাইটি একটি সক্রিয় রেকর্ড পেয়েছে। অগত্যা সর্বদা কোনও খারাপ জিনিস নয়, তবে এটি অবশ্যই আপনাকে ফ্রেডওয়ার্ক, কনভেনশন, নির্ভরতা ইত্যাদি সম্পর্কে উদ্বিগ্ন হওয়ার কাছাকাছি পৌঁছে দেবে, যেমন @ ক্যান্ডিওড ওরেঞ্জ উল্লেখ করেছেন।

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

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

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


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

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

আমি মনে করি সক্রিয় রেকর্ডটি কেবল একটি খারাপ প্যাটার্ন।
কেসি

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