ব্যবসায়ের নিয়ম সংরক্ষণের জন্য আমার কি কনফিগার ফাইল বা ডাটাবেস ব্যবহার করা উচিত?


41

আমি সম্প্রতি প্র্যাগমেটিক প্রোগ্রামারটি পড়ছি যা বলে যে:

বিশদগুলি আমাদের মূল কোডটি বিশৃঙ্খলা করে — বিশেষত যদি তারা প্রায়শই পরিবর্তন হয়। ব্যবসায়ের যুক্তি, বা আইনে, বা ম্যানেজমেন্টের ব্যক্তিগত স্বাদে কিছু পরিবর্তন করার জন্য আমাদের যখনই কোডটিতে যেতে হয়েছিল তখনই আমরা সিস্টেমটি ভাঙার ঝুঁকি নিয়ে চলি a নতুন বাগ প্রবর্তনের ঝুঁকি নিয়ে।

হান্ট, অ্যান্ড্রু; টমাস, ডেভিড (1999-10-20)। প্র্যাকমেটিক প্রোগ্রামার: জার্নিম্যান থেকে মাস্টার (কিন্ডল লোকেশন 2651-2653)। পিয়ারসন এডুকেশন (ইউএসএ) কিন্ডলে সংস্করণ.

আমি বর্তমানে একটি ওয়েব অ্যাপ্লিকেশন করছি যাতে এমন কিছু মডেল রয়েছে যাগুলির বৈশিষ্ট্যগুলি কেবলমাত্র মানগুলির সেট থেকে হতে পারে, যেমন (ওয়েব অ্যাপ্লিকেশন ডেটা গোপনীয় হিসাবে প্রকৃত উদাহরণ নয়):

আলোক-> প্রকার = গোলক / কিউব / সিলিন্ডার

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

আমি কি এইগুলির মতো সম্ভবত মানগুলি সংরক্ষণ করি:

  • একটি কনফিগার ফাইল:
    'light-types' => array(sphere, cube, cylinder),
    'other-type' => value,
    'etc' => etc-value

  • প্রতিটি কনফিগার আইটেমের জন্য একটি লাইন সহ একটি ডাটাবেসে একটি টেবিল

  • প্রতিটি কনফিগ আইটেমের জন্য একটি টেবিল সঙ্গে একটি ডাটাবেস (যেমন টেবিল: light_types; কলাম: id, name)

  • অন্য কিছু উপায়?

অফারকৃত কোনও সহায়তা / দক্ষতার জন্য অনেক ধন্যবাদ।

উত্তর:


45

আমি কাজ করি এমন বেশিরভাগ প্রকল্পে একই প্রশ্ন দেখা দেয়। সাধারণত, আমি এটি করি:

  1. যদি সম্ভাব্য মানগুলির সেটটি শীঘ্রই যে কোনও সময় পরিবর্তনের সম্ভাবনা না থাকে, আমি কোডে ক্লাস / ইন্টারফেস ধ্রুবক বা এনামগুলি এবং ডেটাবেজে অসংখ্য ক্ষেত্র ব্যবহার করি। উদাহরণ: ব্লগ এন্ট্রি প্রকাশের অবস্থা: 'প্রকাশিত নয়', 'সংযোজনাধীন', 'প্রকাশিত', ইত্যাদি etc.
  2. মানগুলি সম্ভবত পরিবর্তিত হবে, তবে পরিবর্তনগুলি প্রোগ্রাম লজিক - কনফিগারেশন ফাইলগুলিকে প্রভাবিত করবে না। উদাহরণ: "আপনি আমাদের ওয়েবসাইটটি কীভাবে খুঁজে পেয়েছেন?" এর তালিকা অনলাইন ক্রয় ফর্ম একটি ড্রপডাউন তালিকার বিকল্প।
  3. মানগুলি ঘন ঘন পরিবর্তিত হতে পারে এবং / অথবা অ-বিকাশকারীদের দ্বারা সম্পাদিত হতে বোঝানো হয় তবে তবুও এই পরিবর্তনগুলি যুক্তিকে প্রভাবিত করবে না - কোনও ডেটাবেস বা সম্পাদনা করার জন্য কিছু ব্যবহারকারী-বান্ধব ইন্টারফেসের সাথে কমপক্ষে একটি মূল-মান স্টোরেজ।
  4. মানগুলি পরিবর্তন করা যুক্তিটিকে প্রভাবিত করবে - সম্ভবত সিস্টেমটির পুনরায় নকশা (প্রায়শই সত্য) প্রয়োজন হয় বা কিছু ব্যবসায়িক বিধি ইঞ্জিন প্রয়োজন। এখনও অবধি দেখা সবচেয়ে কঠিন ঘটনাটি ছিল আমার সহকর্মী কাজ করা মনস্তাত্ত্বিক পরীক্ষাগুলি। প্রতিটি ধরণের পরীক্ষার নিজস্ব স্কোরিং সিস্টেম থাকতে পারে যা ইতিবাচক এবং নেতিবাচক মান বা উত্তরগুলির এমনকি মানবিক মূল্যায়ন সহ একাধিক বৈশিষ্ট্যের স্কেলগুলির চেয়ে সহজ সংযোজন থেকে পৃথক হতে পারে। এই প্রকল্প সম্পর্কে কিছু আলোচনা করার পরে, আমরা লুয়াটিকে স্ক্রিপ্টিং ইঞ্জিন হিসাবে ব্যবহার করে শেষ করেছি , যা অ-বিকাশকারীদের নতুন পরীক্ষা তৈরির ক্ষমতার সাথে পুরোপুরি দ্বন্দ্ব বোধ করে (যদিও লুয়া তুলনামূলক সহজ ভাষা যা আপনার আশা করা উচিত নয় যে একটি নন-প্রোগ্রামার এটি শিখতে হবে)।

টিপিপির উদ্ধৃতি সম্পর্কে। আমি মনে করি এটি আদি কোডের জন্য সত্য , তবে বাস্তব জীবনে আপনি আরও সহজ ( KISS নীতি ) শুরু করুন এবং যদি তাদের সত্যিকারের প্রয়োজন হয় তবে ( YAGNI ) পরে বৈশিষ্ট্যগুলি যুক্ত করুন ।


7

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

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

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

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


0

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

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

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


1
কনফিগারেশন কী এবং ডেটা কী তা আপনি কীভাবে নির্ধারণ করবেন?
এনএফজি

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

চাহিদা অনুযায়ী ডাটাবেসগুলি পরিবর্তন করতে পারে। আমরা তাদের মাইএসকিএলের মতো অ্যাসিঙ্ক্রোনাস হতে পারি। স্ট্যাটিক ফাইলগুলি কি এটি সমর্থন করে? কোনভাবেই না! সুতরাং আমি ডাউনভোট করছি :)
আমিরহসিন

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