java - রহম - জাভা স্টোরেজ বাস্তবায়ন করার সেরা উপায় কি?




বাংলা জাভা (19)

জাভা স্টোরেজ বাস্তবায়ন করার সেরা উপায় কি?

এক পন্থা যা আমাদের এড়িয়ে চলতে হবে : স্ট্রাক্ট সংজ্ঞায়িত করতে ইন্টারফেস ব্যবহার করে।

বিশেষ করে স্ট্রাকচার ঘোষণা করার জন্য একটি ইন্টারফেস তৈরি করা সত্যিই সবচেয়ে খারাপ জিনিস: ইন্টারফেস ডিজাইন করা হয়েছে কেন এটি হারাচ্ছে: পদ্ধতি (গুলি) চুক্তি সংজ্ঞায়িত করা।

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

সহজ করার জন্য, আমরা ব্যাপকভাবে 4 বৈধ পন্থা আছে

static final String/Integer ক্ষেত্রের সাথে:

  • 1) একটি বর্গ ব্যবহার করে যা কেবলমাত্র ভিতরের ধ্রুবক ঘোষণা করে।
  • 1 বৈকল্পিক) শুধুমাত্র একটি স্ট্রাকচার ঘোষণা উত্সর্গীকৃত ক্লাস তৈরি।

Java 5 enum :

  • 2) Enum একটি সম্পর্কিত উদ্দেশ্য বর্গ (তাই একটি নিস্তেজ শ্রেণীর) ঘোষণা।
  • 2 বৈকল্পিক) একটি স্বতন্ত্র বর্গ হিসাবে enum তৈরি (তাই তার নিজস্ব ক্লাস ফাইল সংজ্ঞায়িত)।

টিএলডিআরঃ কোনটি সর্বোত্তম উপায় এবং কোস্টেন্টগুলি কোথায় অবস্থিত?

বেশিরভাগ ক্ষেত্রে, enum উপায় সম্ভবত static final String/Integer পথের তুলনায় আরও সূক্ষ্ম এবং ব্যক্তিগতভাবে আমি মনে করি static final String/Integer শুধুমাত্র ব্যবহার করা উচিত যদি আমাদের কাছে ম্যানামগুলি ব্যবহার করার ভাল কারণ না থাকে।
এবং যেখানে আমরা ধ্রুবক মানগুলি ঘোষণা করতে পারি, ধারণাটি হল যে একটি বিদ্যমান বিদ্যমান শ্রেণী রয়েছে যা স্থির মানগুলির সাথে একটি নির্দিষ্ট এবং দৃঢ় কার্যকরী সমন্বয়ের মালিক। যদি আমরা এমন একটি শ্রেণী খুঁজে পাই, তবে আমাদের এটি স্টোনস্ট হোল্ডার হিসাবে ব্যবহার করা উচিত । অন্যথায়, ধ্রুবক কোন এক বিশেষ শ্রেণীর সাথে যুক্ত করা উচিত।

static final String / static final Integer বনাম enum

Enums ব্যবহার সত্যিই দৃঢ়ভাবে বিবেচনা করার একটি উপায়।
Enums String বা Integer ধ্রুবক ক্ষেত্রের উপর একটি দুর্দান্ত সুবিধা আছে।
তারা একটি শক্তিশালী সংকলন সীমাবদ্ধতা সেট। যদি আপনি একটি পদ্ধতি নির্ধারণ করেন যা enum কে প্যারামিটার হিসাবে লাগে তবে আপনি কেবল enum শ্রেণী (বা নাল) এ একটি enum মান নির্ধারণ করতে পারেন।
স্ট্রিং এবং ইন্টিগ্রারের সাহায্যে আপনি তাদের সামঞ্জস্যপূর্ণ প্রকারের যেকোন মানগুলির সাথে প্রতিস্থাপন করতে পারেন এবং সংকলন static final String / static final Integer ক্ষেত্রগুলিতে সংজ্ঞায়িত ধ্রুবক না থাকলেও ভাল হবে।

উদাহরণস্বরূপ, static final String ক্ষেত্র হিসাবে একটি শ্রেণিতে সংজ্ঞায়িত দুটি স্থির সংহত করুন:

public class MyClass{

   public static final String ONE_CONSTANT = "value";
   public static final String ANOTHER_CONSTANT = "other value";
   . . .
}

এখানে এমন একটি পদ্ধতি যা অনুমান হিসাবে এই স্থিরগুলির মধ্যে একটি থাকতে পারে:

public void process(String constantExpected){
    ...    
}

আপনি এভাবে এটিকে আহ্বান করতে পারেন:

process(MyClass.ONE_CONSTANT);

অথবা

process(MyClass.ANOTHER_CONSTANT);

কিন্তু কোন সংকলন সীমাবদ্ধতা আপনাকে এভাবে এটিকে আহ্বান করতে বাধা দেয় না:

process("a not defined constant value");

আপনি শুধুমাত্র রানটাইম এ ত্রুটিটি পাবেন এবং শুধুমাত্র একবার যদি আপনি প্রেরিত মানের একটি চেক করেন।

Enum সঙ্গে, ক্লায়েন্ট শুধুমাত্র একটি enum পরামিতি একটি enum মান পাস করতে পারে হিসাবে চেক প্রয়োজন হয় না।

উদাহরণস্বরূপ, এখানে দুটি মান একটি enum শ্রেণীতে সংজ্ঞায়িত (তাই বক্সের বাইরে ধ্রুবক):

public enum MyEnum {

    ONE_CONSTANT("value"), ANOTHER_CONSTANT(" another value");

    private String value;

    MyEnum(String value) {
       this.value = value;
    }
         ...
}

এখানে একটি পদ্ধতি যা অনুমান হিসাবে এই enum মানগুলির মধ্যে একটি থাকতে পারে:

public void process(MyEnum myEnum){
    ...    
}

আপনি এভাবে এটিকে আহ্বান করতে পারেন:

process(MyEnum.ONE_CONSTANT);

অথবা

process(MyEnum.ANOTHER_CONSTANT);

কিন্তু সংকলন আপনাকে এভাবে এটিকে প্রকাশ করার অনুমতি দেবে না:

process("a not defined constant value");

কোথায় আমরা সংস্থিত ঘোষণা করা উচিত?

যদি আপনার অ্যাপ্লিকেশনটিতে একটি বিদ্যমান বিদ্যমান বর্গ থাকে যা স্থির মানগুলির সাথে একটি নির্দিষ্ট এবং দৃঢ় কার্যকরী সমন্বয়ের মালিক থাকে তবে 1) এবং 2) আরও স্বজ্ঞাত উপস্থিত হয়।
সাধারনত, এটি স্ট্রাইকগুলির ব্যবহারকে সহজ করে দেয় যদি এটি প্রধান শ্রেণীতে ঘোষিত হয় যা তাদের ম্যানিপুলেশন করে বা এটির নামটি খুব স্বাভাবিক বলে মনে করা হয় যা আমরা এটির ভিতরে খুঁজে পাব।

উদাহরণস্বরূপ, জেডিকে লাইব্রেরীতে, সূচকীয় এবং পাই স্থির মানগুলি ক্লাসে ঘোষিত হয় যা কেবলমাত্র ধ্রুবক ঘোষণাগুলি ( java.lang.Math ) ঘোষণা করে না।

   public final class Math {
          ...
       public static final double E = 2.7182818284590452354;
       public static final double PI = 3.14159265358979323846;
         ...
   }

গণিত ফাংশন ব্যবহার করে ক্লায়েন্টরা প্রায়ই গণিতের উপর নির্ভর করে। সুতরাং, তারা সহজে পর্যাপ্ত সংকোচগুলি খুঁজে পেতে পারে এবং এটিও মনে রাখতে পারে যে E এবং PI একটি প্রাকৃতিক ভাবে কোথায় সংজ্ঞায়িত করা হয়।

যদি আপনার অ্যাপ্লিকেশনটিতে একটি বিদ্যমান বর্গ থাকে না যা ধ্রুবক মানগুলির সাথে একটি খুব নির্দিষ্ট এবং দৃঢ় কার্যকরী সমন্বয় থাকে, 1 বৈকল্পিক) এবং 2 বৈকল্পিক উপায়গুলি আরও স্বজ্ঞাত উপস্থিত হবে।
সাধারনত, এটি যদি এক শ্রেণীতে ঘোষিত হয় তবে এটি ধ্রুবকগুলির ব্যবহারকে সহজ করে দেয় না, যখন আমাদের 3 বা 4 টি অন্যান্য শ্রেণীও তাদের কাজে লাগায় এবং এদের মধ্যে কোনও শ্রেণী অন্যের চেয়ে বেশি স্বাভাবিক বলে মনে হয় না হোস্ট ধ্রুবক মান।
এখানে, শুধুমাত্র ধ্রুবক মান ধরে রাখার জন্য একটি কাস্টম ক্লাস সংজ্ঞায়িত জ্ঞান করে তোলে।
উদাহরণস্বরূপ, জেডিকে লাইব্রেরিতে java.util.concurrent.TimeUnit enum নির্দিষ্ট শ্রেণীতে ঘোষণা করা হয় না কারণ এটি সত্যিই এক এবং একমাত্র জেডিকে নির্দিষ্ট শ্রেণী নয় যা এটি ধারণ করার জন্য সবচেয়ে স্বজ্ঞাত বলে মনে হয়:

public enum TimeUnit {
    NANOSECONDS {
      .....
    },
    MICROSECONDS {
      .....
    },
    MILLISECONDS {
      .....
    },
    SECONDS {
      .....
    },
      .....
}      

ArrayBlockingQueue<E> ঘোষিত অনেক ক্লাস তাদের ব্যবহার করে: ArrayBlockingQueue<E> , ArrayBlockingQueue<E> , CompletableFuture , ExecutorService ArrayBlockingQueue<E> , ... এবং সত্যিই তাদের মধ্যে কেউ ArrayBlockingQueue<E> ধরে রাখার জন্য বেশি উপযুক্ত বলে মনে হয় না।

আমি এই ধরনের উদাহরণ দেখেছি:

public class MaxSeconds {
   public static final int MAX_SECONDS = 25;
}

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


FWIW, সেকেন্ডের মধ্যে একটি সময়সীমা সম্ভবত একটি কনফিগারেশন সেটিং (একটি বৈশিষ্ট্য ফাইল থেকে বা স্প্রিং হিসাবে ইনজেকশন মাধ্যমে পড়া) হতে হবে এবং একটি ধ্রুবক নয়।


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

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

আমি ধ্রুবক পরিবর্তে getters ব্যবহার করতে পছন্দ। যারা public int getMaxConnections() {return 10;} ধ্রুবক মান ফিরে আসতে পারে, উদাহরণস্বরূপ public int getMaxConnections() {return 10;} , কিন্তু ধ্রুবক প্রয়োজন যে কিছু একটি গটার মাধ্যমে যেতে হবে।

এক সুবিধা হ'ল আপনার প্রোগ্রামটি ধ্রুবক বাড়িয়ে থাকলে - আপনি এটি কনফিগারযোগ্য হতে পারেন তা খুঁজে পেতে পারেন - আপনি কেবলমাত্র পরিবর্তনকারী ধ্রুবকটি কীভাবে পরিবর্তন করতে পারেন তা পরিবর্তন করতে পারেন।

অন্য সুবিধা হল ধ্রুবক সংশোধন করার জন্য আপনাকে এটি ব্যবহার করা সমস্ত কিছু পুনরায় কম্পাইল করতে হবে না। যখন আপনি একটি স্ট্যাটিক চূড়ান্ত ক্ষেত্র উল্লেখ করেন, তখন সেই ধ্রুবকটির মানটি যে কোন বাইটকোডে সংকলিত হয় যা উল্লেখ করে।


আমি সম্মত যে একটি ইন্টারফেস ব্যবহার করার উপায় নেই। এই প্যাটার্ন এড়ানো ব্ললো এর কার্যকরী জাভাতে নিজস্ব আইটেম (# 18) এমনকি রয়েছে।

একটি যুক্তি ব্লক ধ্রুবক ইন্টারফেস প্যাটার্নের বিরুদ্ধে তোলে যে স্টোনগুলির ব্যবহার বাস্তবায়ন বিস্তারিত, কিন্তু তাদের ব্যবহার করার জন্য একটি ইন্টারফেস বাস্তবায়ন আপনার এক্সপোর্ট করা API এ বাস্তবায়ন বিস্তারিত প্রকাশ করে।

public|private static final TYPE NAME = VALUE; প্যাটার্ন একটি ধ্রুবক ঘোষণা একটি ভাল উপায়। ব্যক্তিগতভাবে, আমি মনে করি আপনার সমস্ত স্টোনটেন্টগুলি ঘরে আলাদা শ্রেণী তৈরি করা এড়ানো ভাল, তবে ব্যক্তিগত পছন্দ এবং শৈলী ব্যতীত অন্যথায় এটি না করার কারণে আমি কখনও কোনও কারণ দেখিনি।

যদি আপনার স্থিরতা একটি গণনার হিসাবে ভালভাবে মডেল করা যেতে পারে, 1.5 বা তার পরে উপলব্ধ http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html কাঠামো বিবেচনা করুন।

আপনি যদি 1.5 এর আগের সংস্করণটি ব্যবহার করেন তবে আপনি স্বাভাবিক জাভা ক্লাসগুলি ব্যবহার করে টাইপসফেয়ার এনমুরেশানগুলি টেনে আনতে পারেন। (যে আরো জন্য এই সাইট দেখুন)।


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

public class Constants {

    private Constants() {
        throw new AssertionError();
    }

    public interface ConstantType {}

    public enum StringConstant implements ConstantType {
        DB_HOST("localhost");
        // other String constants come here

        private String value;
        private StringConstant(String value) {
            this.value = value;
        }
        public String value() {
            return value;
        }
    }

    public enum IntConstant implements ConstantType {
        DB_PORT(3128), 
        MAX_PAGE_SIZE(100);
        // other int constants come here

        private int value;
        private IntConstant(int value) {
            this.value = value;
        }
        public int value() {
            return value;
        }
    }

    public enum SimpleConstant implements ConstantType {
        STATE_INIT,
        STATE_START,
        STATE_END;
    }

}

তাই আমি তাদের মত উল্লেখ করতে পারেন:

Constants.StringConstant.DB_HOST

একটি একক, জেনারিক স্টোনেন্টস ক্লাস একটি খারাপ ধারণা। Constants তারা সবচেয়ে যুক্তিসঙ্গতভাবে সম্পর্কিত ক্লাস সঙ্গে একসঙ্গে গ্রুপ করা উচিত।

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


একটি কনস্ট্যান্ট, যেকোনো ধরনের, একটি শ্রেণীবিন্যাসের মধ্যে একটি অপরিবর্তনীয় সম্পত্তি তৈরি করে ঘোষণা করা যেতে পারে (যেটি final সংশোধনকারীর সাথে একটি সদস্য পরিবর্তনশীল)। সাধারণত static এবং public modifiers প্রদান করা হয়।

public class OfficePrinter {
    public static final String STATE = "Ready";  
}

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

public class OfficePrinter {
    public enum PrinterState { Ready, PCLoadLetter, OutOfToner, Offline };
    public static final PrinterState STATE = PrinterState.Ready;
}

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

আপনি যদি পরবর্তীতে 'কনস্ট্যান্টস ক্লাস' পরিবর্তন করেন এবং আপনি যে শ্রেণীটি রেফারেন্স করেন তার অন্যান্য ক্লাসগুলির উপর একটি হার্ড পুনরায় কম্পাইল করবেন না, তবে আপনি পুরানো এবং নতুন মানগুলি ব্যবহার করার সাথে সমন্বয় করবেন।

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


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


এটি কেবলমাত্র ধ্রুবক রাখার জন্য ইন্টারফেসগুলি ব্যবহার করার জন্য একটি বিএড অনুশীলন (জোশ ব্লোক দ্বারা ক্রমাগত ইন্টারফেস প্যাটার্ন নামকরণ করা হয়)। জোশ এই পরামর্শ দিয়েছেন:

যদি স্টোনগুলি একটি বিদ্যমান ক্লাস বা ইন্টারফেসের সাথে দৃঢ়ভাবে আবদ্ধ থাকে তবে আপনাকে অবশ্যই ক্লাস বা ইন্টারফেসে যুক্ত করতে হবে। উদাহরণস্বরূপ, বক্সযুক্ত সংখ্যাসূচক আদিম ক্লাসগুলি, যেমন ইন্টিগ্রার এবং ডাবল, MIN_VALUE এবং MAX_VALUE সংস্থিতির সমস্ত রপ্তানি। যদি সংশ্লেষগুলিকে একটি গাণিতিক টাইপের সদস্যদের হিসাবে ভালভাবে দেখা হয় তবে আপনাকে এনাম টাইপ দিয়ে তাদের রপ্তানি করা উচিত। অন্যথায়, আপনি একটি noninstantiable উপযোগ ক্লাস সঙ্গে সংস্থিত রপ্তানি করা উচিত।

উদাহরণ:

// Constant utility class
package com.effectivejava.science;
public class PhysicalConstants {
    private PhysicalConstants() { }  // Prevents instantiation

    public static final double AVOGADROS_NUMBER   = 6.02214199e23;
    public static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
    public static final double ELECTRON_MASS      = 9.10938188e-31;
}

নামকরণ কনভেনশন সম্পর্কে:

কনভেনশন অনুসারে, এই ক্ষেত্রগুলিতে আন্ডারস্কোর দ্বারা আলাদা শব্দগুলির সাথে মূলধন অক্ষরগুলি রয়েছে। এটি অত্যন্ত গুরুত্বপূর্ণ যে এই ক্ষেত্রগুলির মধ্যে অনাক্রম্য বস্তুগুলির আদিম মান বা রেফারেন্স রয়েছে।


কার্যকরী জাভা (২ য় সংস্করণ) -এ, এটি সুপারিশ করা হয়েছে যে আপনি স্থিরতার জন্য স্ট্যাটিক ইটগুলির পরিবর্তে enums ব্যবহার করুন।

এখানে জাভা এ Enums উপর একটি ভাল লেখা আছে: http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html

মনে রাখবেন যে প্রবন্ধের শেষে প্রশ্ন করা হয়েছে:

সুতরাং যখন আপনি enums ব্যবহার করা উচিত?

এর উত্তর দিয়ে:

যে কোন সময় আপনি সংস্থিত একটি নির্দিষ্ট সেট প্রয়োজন


পার্থক্য কি

1।

public interface MyGlobalConstants {
    public static final int TIMEOUT_IN_SECS = 25;
}

2।

public class MyGlobalConstants {
    private MyGlobalConstants () {} // Prevents instantiation
    public static final int TIMEOUT_IN_SECS = 25;
}

এবং MyGlobalConstants.TIMEOUT_IN_SECS ব্যবহার করে যেখানেই আমরা এই ধ্রুবকটি প্রয়োজন। আমি উভয় একই মনে করি।


যে পুরোপুরি গ্রহণযোগ্য, সম্ভবত এমনকি মান।

(public/private) static final TYPE NAME = VALUE;

যেখানে টাইপটি টাইপ হয়, NAME স্পেসগুলির জন্য আন্ডারস্কোর সহ সমস্ত ক্যাপের নাম এবং VALUE ধ্রুবক মান;

আমি অত্যন্ত তাদের নিজস্ব ক্লাস বা ইন্টারফেস আপনার স্টোনেন্ট নির্বাণ সুপারিশ।

একটি পার্শ্ব নোট হিসাবে: চূড়ান্ত ঘোষণা করা এবং পরিবর্তনযোগ্য যে পরিবর্তনশীল এখনও পরিবর্তন করা যেতে পারে; যাইহোক, পরিবর্তনশীল একটি ভিন্ন বস্তুর দিকে নির্দেশ করতে পারে না।

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

public static final Point ORIGIN = new Point(0,0);

public static void main(String[] args){

    ORIGIN.x = 3;

}

এটি বৈধ এবং ORIGIN তখন একটি পয়েন্ট (3, 0) হবে।


শুধু একটি ইন্টারফেস ব্যবহার এড়াতে:

public interface MyConstants {
    String CONSTANT_ONE = "foo";
}

public class NeddsConstant implements MyConstants {

}

এটা প্রলুব্ধকর, কিন্তু encapsulation লঙ্ঘন এবং বর্গ সংজ্ঞা পার্থক্য blurs।


static finalআমার পছন্দ, enumআইটেমটি প্রকৃতপক্ষে সংখ্যাবহুল ছিল যদি আমি শুধুমাত্র একটি ব্যবহার করতে চাই ।


Constants জন্য, Enum একটি ভাল পছন্দ IMHO হয়। এখানে একটি উদাহরণ

পাবলিক ক্লাস MyClass {

public enum myEnum {
    Option1("String1", 2), 
    Option2("String2", 2) 
    ;
    String str;
            int i;

            myEnum(String str1, int i1) { this.str = str1 ; this.i1 = i }


}

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

Enums একটি পরিমান মানের প্রতিনিধিত্ব করার জন্য একটি ভাল পছন্দ, তবে যদি আপনি পরম মান (উদাঃ টাইমউইটি = 100 এমএস) এর উপর জোর দিয়ে একক স্টোনেন্টগুলি সংরক্ষণ করছেন তবে আপনি কেবল static finalপদ্ধতির জন্য যেতে পারেন ।


এটি মৌলিক স্থল-শূন্য মৌলবাদকে বোঝার ব্যতীত যিহোশূয় ব্লোককে উদ্ধৃত করার জন্য বিএডি অভ্যাস এবং ভয়ঙ্কর অভ্যাস অনুশীলন

আমি যাইহোক, যিহোশূয় Bloch কিছু পড়া না

  • তিনি একটি ভয়ানক প্রোগ্রামার
  • অথবা যতদূর পর্যন্ত আমি তাকে উদ্ধৃত করে পাচ্ছি (যিহোশূয় আমার মনে হয় এমন ছেলেটির নাম) কেবল তার উপাদানগুলি ধর্মীয় স্ক্রিপ্ট হিসাবে ব্যবহার করছেন যা তাদের সফ্টওয়্যার ধর্মীয় আনুগত্যের ন্যায্যতা প্রমাণ করে।

বাইবেলের মৌলবাদ হিসাবে সমস্ত বাইবেলের আইন দ্বারা সংক্ষেপিত করা যেতে পারে

  • আপনার সমস্ত হৃদয় এবং আপনার সমস্ত মন সঙ্গে মৌলিক পরিচয় ভালবাসা
  • নিজেকে হিসাবে আপনার প্রতিবেশী প্রেম

এবং একইভাবে সফটওয়্যার ইঞ্জিনিয়ারিং মৌলবাদ দ্বারা সংক্ষেপিত করা যেতে পারে

  • আপনার সব প্রোগ্রামিং এবং মনের সঙ্গে স্থল-শূন্য মৌলিক অনুভূতি নিজেকে উত্সর্গ করুন
  • এবং আপনার সহকর্মী প্রোগ্রামারদের শ্রেষ্ঠত্বের প্রতি উৎসর্গ করুন যেমন আপনি নিজের জন্য করবেন।

এছাড়াও, বাইবেলের মৌলবাদী চেনাশোনাগুলির মধ্যে একটি শক্তিশালী এবং যুক্তিসঙ্গত সহনশীলতা টানা হয়

  • প্রথমে নিজেকে ভালোবাসো. কারণ আপনি যদি নিজেকে বেশি ভালোবাসেন না তবে "আপনার প্রতিবেশীকে নিজের মতো ভালোবাসেন" ধারণাটি ওজন বহন করে না, যেহেতু "আপনি নিজের প্রতি কতটা ভালোবাসেন" সেটি হ'ল সেই দাতাম লাইন যার উপরে আপনি অন্যদের ভালোবাসবেন।

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

সফ্টওয়্যার প্রোগ্রামিং মৌলিক আইন

  • অলসতা একটি ভাল প্রোগ্রামার এর গুণাবলী
  • আপনি আপনার প্রোগ্রামিং জীবনকে যত সহজ, অলস এবং যতটা সম্ভব কার্যকর হিসাবে সহজ করে তুলতে পারেন
  • আপনি আপনার প্রোগ্রামিং এর পরিণতি এবং প্রবেশগুলি সহজ, অলস এবং আপনার নেগবার-প্রোগ্রামারদের পক্ষে যতটা সম্ভব কার্যকর হিসাবে কাজ করে এবং আপনার প্রোগ্রামিং এন্ট্রিলগুলি চয়ন করুন।

ইন্টারফেস-প্যাটার্ন ধ্রুবক একটি খারাপ অভ্যাস ???

মৌলিকভাবে কার্যকরী এবং দায়িত্বশীল প্রোগ্রামিং কোন আইন অধীনে এই ধর্মীয় আদেশ পতিত হয়?

ইন্টারফেস-প্যাটার্ন স্টোনেন্টস ( https://en.wikipedia.org/wiki/Constant_interface ) এ কেবল উইকিপিডিয়া নিবন্ধটি পড়ুন , এবং ইন্টারফেস-প্যাটার্ন সংহতকারীদের বিরুদ্ধে এটি অযৌক্তিক অজুহাতগুলি পড়ে।

  • হ্যাটিফ-না আইডিই? কোন সফ্টওয়্যার প্রোগ্রামার হিসেবে পৃথিবীতে কে আইডিই ব্যবহার করবে না? আমাদের মধ্যে বেশিরভাগ প্রোগ্রামার যারা আইডিই ব্যবহার থেকে বিরত থাকাকালীন macho এ্যাসেটিক বেঁচে থাকা সততাবাদের প্রমাণ করতে চায় না।

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

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

    • যে "সংস্থিত" দেখতে না চুক্তি হিসাবে গণ্য করা আবশ্যক। এবং ইন্টারফেস প্রয়োগ বা চুক্তি সম্মতি প্রজেক্ট জন্য ব্যবহৃত হয়।
  • ভবিষ্যতে ইন্টারফেসগুলিকে বাস্তবায়িত ক্লাসগুলিতে রূপান্তর করা অসম্ভব না হলে এটি কঠিন। হাহ .... হুম্ম ... ???

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

অজুহাত যাই হোক না কেন, কার্যকরী সফ্টওয়্যার প্রকৌশলীর প্রতিনিধিত্ব বা সাধারণত ইন্টারফেস সংস্থিতির ব্যবহারকে নিরুৎসাহিত করার ক্ষেত্রে এটি কোনও কার্যকর সিদ্ধান্ত নয়।

যুক্তরাষ্ট্রের সংবিধান প্রণয়নকারী প্রতিষ্ঠাতা পিতাগুলির মূল উদ্দেশ্য এবং মানসিক অবস্থাগুলি কোন ব্যাপার না। আমরা প্রতিষ্ঠাতা পিতাদের মূল উদ্দেশ্য নিয়ে বিতর্ক করতে পারতাম কিন্তু আমি যা যত্নশীল তা হল মার্কিন সংবিধানের লিখিত বক্তব্য। এবং মার্কিন যুক্তরাষ্ট্রের সংবিধানের লিখিত সাহিত্য-মৌলবাদকে অকার্যকর প্রতিষ্ঠা-উদ্দেশ্যগুলি নয় এমন প্রতিটি মার্কিন নাগরিকের দায়িত্ব।

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

মৌলিক তথ্য-মডেল Normalization হয়

আপনার ডেটা-মডেল হোস্ট করা বা প্রেরিত হওয়া কোন ব্যাপার না। আপনি ইন্টারফেস বা enums বা whatevernots, রিলেশনাল বা নন-এসকিউএল ব্যবহার করেন, যদি আপনি তথ্য-মডেল স্বাভাবিকীকরণের প্রয়োজন এবং প্রক্রিয়া বুঝতে না।

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

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

EF Codd এর একটি ঝলকানি ত্রুটি এবং কার্যকর মানবিক বোঝার জন্য তার ভুল আচরণের কারণ তার বিশ্বাস যে মানবিক অনুভূতযোগ্য বহু-মাত্রিক, পরিবর্তনযোগ্য-মাত্রা তথ্য টুকরা টুকরা 2-মাত্রিক ম্যাপিংয়ের একটি সেট দক্ষতার সাথে অনুভূত হতে পারে।

তথ্য স্বাভাবিকীকরণের মূলনীতি

কি EF Codd প্রকাশ করতে ব্যর্থ হয়েছে।

প্রতিটি সুসংগত তথ্য-মডেলের মধ্যে, এটি অর্জনের জন্য তথ্য-মডেল সঙ্গতির অনুক্রমিক স্নাতকের ক্রম।

  1. ঐক্য এবং তথ্য উদাহরণ সনাক্তকরণ।
    • প্রতিটি ডাটা উপাদানের গ্র্যানুলারিটি ডিজাইন করুন, যার মাধ্যমে তাদের গ্র্যানুলারিটি একটি পর্যায়ে রয়েছে যেখানে একটি উপাদানটির প্রতিটি উদাহরণটি অনন্যভাবে সনাক্ত করা এবং পুনরুদ্ধার করা যেতে পারে।
    • অনুপস্থিতি এলিয়াসিং অনুপস্থিতি। অর্থাৎ, কোন উপায়ে অস্তিত্ব নেই যার দ্বারা একটি উপাদান একটি উপাদান এর একাধিক উদাহরণ উত্পন্ন করে।
  2. উদাহরণ crosstalk অনুপস্থিতি। একটি উপাদান একটি উদাহরণ সনাক্ত করতে অবদান একটি উপাদান বা আরো একটি অন্যান্য উদাহরণ ব্যবহার করার প্রয়োজন নেই।
  3. তথ্য উপাদান / মাত্রা ঐক্য এবং পরিচয়।
    • উপাদান de-aliasing উপস্থিতি। একটি উপাদান / মাত্রা অনন্যভাবে সনাক্ত করা যেতে পারে যার দ্বারা একটি সংজ্ঞা বিদ্যমান থাকতে হবে। একটি উপাদান প্রাথমিক সংজ্ঞা যা;
    • যেখানে প্রাথমিক সংজ্ঞা উপ-পরিমাপ বা সদস্য-উপাদানগুলি প্রকাশ করতে পারে না যা একটি উদ্দেশ্যে উপাদানটির অংশ নয়;
  4. উপাদান dealiasing অনন্য উপায়। একটি উপাদান, এবং শুধুমাত্র একটি, একটি উপাদান জন্য যেমন উপাদান ডি-আলাইজিং সংজ্ঞা বিদ্যমান থাকতে হবে।
  5. উপাদানগুলির একটি অনুক্রমিক সম্পর্কের মধ্যে একটি অভিভাবক উপাদান সনাক্ত করার জন্য এক, এবং কেবল একটি, সংজ্ঞা ইন্টারফেস বা চুক্তি বিদ্যমান।
  6. উপাদান crosstalk অনুপস্থিতি। কোনও উপাদানটির নির্দিষ্ট সনাক্তকরণে অবদান রাখতে অন্য উপাদানটির সদস্য ব্যবহার করার প্রয়োজনীয়তা নেই।
    • এই ধরনের অভিভাবক-সন্তানের সম্পর্কের ক্ষেত্রে, পিতামাতার শনাক্তকারী সংজ্ঞাটি সন্তানের সদস্য উপাদানগুলির সেটের উপর নির্ভর করে না। পিতামাতার পরিচয় একটি সদস্য উপাদান একটি বা শিশুর সব বা শিশুদের উল্লেখ করার resorting ছাড়া সম্পূর্ণ সন্তানের পরিচয় হতে হবে।
  7. একটি তথ্য-মডেলের দ্বি-মোডাল বা মাল্টি-মোডাল উপস্থিতিগুলি প্রিমেট করুন।
    • যখন কোনও উপাদানটির দুটি প্রার্থীর সংজ্ঞা উপস্থিত থাকে, তখন এটি একটি সুস্পষ্ট চিহ্ন যে দুটি পৃথক ডাটা-মডেল বিদ্যমান হিসাবে বিদ্যমান। তার মানে ডেটা-মডেল স্তর বা ক্ষেত্রের স্তরে অসঙ্গতি রয়েছে।
    • অ্যাপ্লিকেশনের একটি ক্ষেত্র অবশ্যই এক এবং একমাত্র ডাটা-মডেল ব্যবহার করতে হবে।
  8. সনাক্ত এবং উপাদান পরিবর্তন সনাক্ত। আপনি বিশাল তথ্য পরিসংখ্যানগত উপাদান বিশ্লেষণ সঞ্চালিত না হওয়া পর্যন্ত, সম্ভবত আপনি দেখতে না, বা চিকিত্সা পরিবর্তন, চিকিত্সা প্রয়োজন দেখতে।
    • একটি তথ্য-মডেলের তার কিছু উপাদান চক্রবৃদ্ধি বা ধীরে ধীরে পরিবর্তিত হতে পারে।
    • মোড সদস্য-ঘূর্ণন বা স্থানান্তর-ঘূর্ণন হতে পারে।
    • সদস্য-ঘূর্ণন মিউটেশন উপাদানগুলির মধ্যে শিশু উপাদানগুলির স্বতন্ত্র সোয়াপিং হতে পারে। অথবা যেখানে সম্পূর্ণ নতুন উপাদান সংজ্ঞায়িত করা হবে।
    • ট্রান্সপোজিশনাল মিউটেশনটি একটি মাত্রিক-সদস্য হিসাবে একটি উপাদানে রূপান্তরিত হবে, বিপরীতভাবে।
    • প্রতিটি পরিবর্তন চক্র একটি স্বতন্ত্র তথ্য-মোড হিসাবে চিহ্নিত করা আবশ্যক।
  9. প্রতিটি mutation সংস্করণ। যেমন ডেটা মডেলের একটি পূর্ববর্তী সংস্করণটি খুঁজে বের করতে পারে, যখন সম্ভবত ডেটা মডেলের 8 বছরের পুরানো রূপান্তরটির জন্য প্রয়োজন হয়।

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

আমরা এখনও জিজ্ঞাসা করছি যদি আমরা ইন্টারফেস কনস্ট্যান্ট ব্যবহার করতে পারে? সত্যিই?

তথ্য-স্বাভাবিকীকরণের সমস্যাগুলি এই বৃহত্তর প্রশ্নটির চেয়ে বেশি ফলপ্রসূ বিষয়গুলি রয়েছে। আপনি যদি সেই সমস্যাগুলি সমাধান না করেন তবে আপনি যে ইন্টারফেস স্ট্রাকচারগুলি মনে করেন তা বিভ্রান্তিকর তুলনামূলকভাবে কিছুই নয়। Zilch।

ডাটা-মডেল স্বাভাবিকীকরণ থেকে আপনি উপাদানগুলিকে ভেরিয়েবল হিসাবে নির্ধারণ করুন, যেমনটি বৈশিষ্ট্য ইন্টারফেস সংশ্লেষ হিসাবে।

তারপর আপনি মান ইনজেকশন, সম্পত্তি কনফিগারেশন স্থানধারক, ইন্টারফেস, চূড়ান্ত স্ট্রিং, ইত্যাদি মধ্যে যা নির্ধারণ নির্ধারণ।

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

সম্ভবত আপনি একটি VCS রিলিজ মধ্যে তথ্য মডেল কম্পাইল করতে চান। আপনি একটি ডেটা-মডেলের একটি স্বতন্ত্রভাবে সনাক্তকরণযোগ্য সংস্করণ টেনে আনতে পারেন।

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

তাই কেন এই একটি তথ্য মডেল চুক্তি প্রকাশ না? মানে আপনি যদি সাধারনভাবে পরিচালনা করতে পারেন এবং স্বাভাবিকভাবেই তা করতে পারেন তবে কেন? ...

public interface CustomerService {
  public interface Label{
    char AssignmentCharacter = ':';
    public interface Address{
      String Street = "Street";
      String Unit= "Unit/Suite";
      String Municipal = "City";
      String County = "County";
      String Provincial = "State";
      String PostalCode = "Zip"
    }

    public interface Person {
      public interface NameParts{
        String Given = "First/Given name"
        String Auxiliary = "Middle initial"
        String Family = "Last name"
      }
    }
  }
}

এখন আমি আমার অ্যাপস এর চুক্তিবদ্ধ লেবেলগুলিকে যেমন ভাবে উল্লেখ করতে পারি

CustomerService.Label.Address.Street
CustomerService.Label.Person.NameParts.Family

এই জার ফাইল বিষয়বস্তু বিভ্রান্ত? জাভা প্রোগ্রামার হিসেবে আমি জারের কাঠামোর যত্ন নিচ্ছি না।

এই osgi প্রেরিত রানটাইম swapping জটিলতা উপস্থাপন করে? Osgi প্রোগ্রামারদের তাদের খারাপ অভ্যাস অবিরত রাখতে অনুমতি একটি অত্যন্ত কার্যকর উপায়। Osgi চেয়ে ভাল বিকল্প আছে।

নাকি এটা না? প্রকাশিত চুক্তিতে ব্যক্তিগত কনস্ট্যান্টের কোন ফুটো নেই। সমস্ত ব্যক্তিগত সংস্থিতিকে "কনস্ট্যান্টস" নামে একটি ব্যক্তিগত ইন্টারফেসে গোষ্ঠীভুক্ত করা উচিত কারণ আমি স্থিরতার জন্য অনুসন্ধান করতে চাই না এবং আমি বার বার "ব্যক্তিগত চূড়ান্ত স্ট্রিং" টাইপ করতে খুব অলস।

public class PurchaseRequest {
  private interface Constants{
    String INTERESTINGName = "Interesting Name";
    String OFFICIALLanguage = "Official Language"
    int MAXNames = 9;
  }
}

সম্ভবত এমনকি এই:

public interface PurchaseOrderConstants {
  public interface Properties{
    default String InterestingName(){
       return something();
    }
    String OFFICIALLanguage = "Official Language"
    int MAXNames = 9;
  }
}

ইন্টারফেস স্ট্রাকচার প্রয়োগ করা হয় যখন বিবেচনা মূল্য ইন্টারফেস সংহত সঙ্গে একমাত্র সমস্যা।

এই ইন্টারফেসের "মূল উদ্দেশ্য" নয়? যেমন মার্কিন যুক্তরাষ্ট্রের সংবিধান প্রণয়ন করার জন্য সুপ্রিম কোর্ট মার্কিন সংবিধানের লিখিত চিঠিগুলি ব্যাখ্যা করবে তার পরিবর্তে আমি প্রতিষ্ঠিত পিতাদের "মূল উদ্দেশ্য" সম্পর্কে উদ্বিগ্ন হব।

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







constants