'লিমিটারের আইন' কি পাবলিক / এপিআই পদ্ধতি স্বাক্ষরগুলির জন্য প্রযোজ্য?


10

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

একটি সহজ উদাহরণ:

class Account() {
   double balance;
   public void debit(Transaction t) {
      balance -= t.getAmount();
   }
}

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

এটি কি তখন এটিকে বোধগম্য পছন্দ করে? নাকি আমি কিছু মিস করছি?

উত্তর:


3

তবে এটি লিমিটারের আইন লঙ্ঘন করে না।

আরও আনুষ্ঠানিকভাবে, ফাংশনগুলির জন্য লিমিটার অফ লিমিটেডের জন্য আবশ্যক যে কোনও বস্তুর ওপেনের একটি পদ্ধতি এম কেবলমাত্র নিম্নলিখিত ধরণের অবজেক্টগুলির পদ্ধতির জন্য প্রার্থনা করতে পারে:

  • ও নিজেই
  • এম এর পরামিতি
  • এম এর মধ্যে যে কোনও বস্তু তৈরি / তাত্ক্ষণিক
  • ও এর সরাসরি উপাদান উপাদান
  • এম এর স্কোপে বিশ্বব্যাপী পরিবর্তনশীল, ও দ্বারা অ্যাক্সেসযোগ্য

উইকিপিডিয়া: ডেমিটারের আইন

লেনদেন ডেবিট পদ্ধতির আর্গুমেন্ট, তাই t.getAmount () কল করা ভাল।

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

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


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

সম্পাদনা 2 বিষয়গত, আমি সম্মত।
শান

0

আপনি যদি Accountভবিষ্যতে শ্রেণি সম্প্রসারণের পরিকল্পনা করে থাকেন তবে আমি বলব এটি এমন একটি পরিস্থিতি যেখানে Transactionবস্তুকে আরও সাধারণ উদ্দেশ্য করা আইনটির নিয়মের একটি ভাল বাঁকানো হতে পারে।

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

public class Amount {

    public void process( Transaction t ) {
        ....
    }
}

public abstract class Transaction {

    public String getType();

}

আমি মনে করি আমি আসল প্রশ্ন থেকে এক প্রকার বিপথগামী, তবে আমার বক্তব্যটি হ'ল আপনি যখন উদ্বিগ্ন হয়ে পড়তে পারেন যে আপনি ডেমিটারের আইন থেকে বিপথগামী হয়ে যাচ্ছেন তবে এমনটি করার সুবিধাটি নেতিবাচকতা ছাড়িয়ে যাবে।

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