লুক টেবিল: এগুলি কি ডোমেন মডেলটিতে ফাঁস হয়?


10

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

ডোমেন চালিত ডিজাইন এবং একটি পেঁয়াজ আর্কিটেকচার ব্যবহার করে, আমি নিম্নলিখিত ধরণের সাথে এটি মডেল করেছি:

  • প্রতিষ্ঠান
    • যোগাযোগ আছে
  • যোগাযোগ
    • যোগাযোগের প্রকার রয়েছে
  • যোগাযোগের টাইপ ( এনাম )
  • কোম্পানির রিপোজিটরি (ইন্টারফেস)
  • EFCompanyRepository (একটি বহিরাগত সমাবেশে সংজ্ঞায়িত, সত্ত্বা ফ্রেমওয়ার্ক ব্যবহার করে, সংস্থাপন্থী প্রয়োগ করে)

এই অ্যাপ্লিকেশনটির জন্য কীভাবে ডেটাবেসকে মডেল করা যায় সে সম্পর্কে আমাদের দলের বিভাজন মতামত রয়েছে।

সাইড এ: লিন ডিডিডারস:

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

সাইড বি: ট্র্যাডিশনালিস্টরা [এটি সম্ভবত মোটামুটি নাম নয়। ডিবিসিএন্ট্রিস্টস?]:

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

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


আমি ডেটাবেজে লুকিং টেবিলগুলি পছন্দ করি এবং কোড (.NET এ টি 4 টেমপ্লেট) রাখতে পারি যা আমার অ্যাপ্লিকেশন কোডটিতে লুকিং টেবিলের উপর ভিত্তি করে আমার জন্য এনাম তৈরি করে।
প্রোগ্রামার

@ জেসনহোল্যান্ড কি টি 4 টেমপ্লেটটি আসলে কোনও কোয়েরি সম্পাদন করে? অন্যথায় আমি নিশ্চিত নই যে এটি কীভাবে প্রত্যাশিত নামের খালি এনামের চেয়ে বেশি উত্পন্ন করে।
ড্রিউ

2
হ্যাঁ এটি একটি কোয়েরি সম্পাদন করে। কটাক্ষপাত developerhandbook.com/c-sharp/t4-templates-for-lookup-tables এবং erraticdev.blogspot.com/2011/01/...
প্রোগ্রামার

স্থির মান সহ একটি টেবিলের জন্য আপনার কতটা CRUD কোড লিখতে হবে? এটি স্ক্রিপ্ট এবং সম্পন্ন করা।
জেফো

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

উত্তর:


4

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

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


2

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

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

কে এই প্রতিবন্ধকতার পরিচয় দিয়েছিল যে এই সমস্ত বিভিন্ন উদ্বেগের একটিই একটি ডাটাবেস দ্বারা সমর্থন করা প্রয়োজন ? আপনি যদি এটির পিছনে ধাক্কা দেন তবে কী হবে।

কীওয়ার্ড অনুসন্ধান করুন: সিকিউআরএস।


1

আমি এনামগুলিকে স্ট্রিংয়ের উপস্থাপনা হিসাবে ডেটাবেজে সংরক্ষণ করতে এবং সন্ধানের টেবিলটি অন্তর্ভুক্ত না করা ভাল বলে মনে করেছি।

স্পষ্টতই এর নেতিবাচক দিকটি হ'ল এটি বেশি ডিস্ক স্পেস ব্যবহার করে এবং এটি স্বাভাবিক করা হয় না।

প্লাস পাশটি হ'ল ক্ষেত্রটি ডিবিতে তার অর্থ ধরে রাখে, উদাহরণস্বরূপ এনামের অন্তর্নির্মিত মানটির সাথে আপনি জাদু সংখ্যার সমাপ্তি ঘটবেন না এবং এনাম পরিবর্তিত হলে আপনি কোনও অনুসন্ধানের টেবিলের সংস্করণ পরিচালনা করতে পারবেন না।

নিশ্চিত না যদিও আমি এটি ডিডিডি বনাম ট্রেড পার্থক্য হিসাবে চিহ্নিত করব। এটি আরও একটি ডাটাবেস-কেন্দ্রবাদী বনাম কোড আমার দৃষ্টিতে সেরা



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

@herzmeister <3 পোস্টগ্রি postgresql.org/docs/9.4/static/datatype-enum.html , একবার আপনি সঞ্চিত পদ্ধতি আলিঙ্গন ইওয়ান দ্য ডিবি কোড। (পিএলভি 8 দুর্দান্ত।
সিরিসিয়ান

@ সিরিসিয়ান আপনি কি জানেন যে এটি জিনিস মিশিয়ে দেয়? আমার এইরকম একটি প্রশ্ন আছে। "এটি স্কেল করে?"
ইয়ান

আপনার অর্থ কি এনামকে স্ট্রিংয়ে পরিণত করার জন্য এটি কোনও ক্রস পণ্য করে? সম্ভবত না. এটি কীভাবে বাস্তবায়ন করা হয়েছে তা সম্পর্কে আমি নিশ্চিত নই, তবে এটি পৃথক টেবিল ব্যবহার করার চেয়ে দ্রুত। এটি স্কেল করে। এটিও পেয়েছি: stackoverflow.com/questions/2318123/… এখনও 5 বছর পরে একটি বৈধ মূল্যায়ন বলে মনে হচ্ছে। (আমি পোস্টগ্র্রেএসকিউএলএর সাথে মিলিত প্রোগ্রামগুলি লেখার প্রবণতা রাখি যাতে আমি সমস্ত বৈশিষ্ট্য ব্যবহার করি তবে সবাই তা করতে পারে না)।
সিরিসিয়ান

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