ডোমেন চালিত নকশা একটি বিরোধী এসকিউএল নিদর্শন?


44

আমি ডোমেন চালিত ডিজাইনে (ডিডিডি) ডুব দিচ্ছি এবং আমি যখন এটি আরও গভীরভাবে যাচ্ছি তখন এমন কিছু জিনিস রয়েছে যা আমি পাই না। যেহেতু আমি এটি বুঝতে পারি, একটি মূল বিষয়টি অবকাঠামো (ডিবি, ফাইল সিস্টেম ইত্যাদি) থেকে ডোমেন লজিক (বিজনেস লজিক) বিভক্ত করা।

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

অবকাঠামোতে এই গণনাগুলি করা খুব বেশি ঘটতে পারে না, কারণ ডিডিডি প্যাটার্নটি ডোমেন স্তর পরিবর্তন না করে এবং মংগাডিবির যেমন এসকিউএল সার্ভারের একই ক্ষমতা নেই তা জেনেও অবকাঠামোগত পরিবর্তন করার অনুমতি দেয় that এটি ঘটতে পারে না।

এটিই কি ডিডিডি প্যাটার্নের ক্ষতি?


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

30
@ জ্যারেডগোগুয়েন তবে এটি আপনার এসকিউএল বিশেষজ্ঞ না এবং প্রযুক্তির কারণে নয়
লিওনার্দো ম্যাঙ্গানো

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

7
... is like throwing away the SQL technologyএকটি নির্দিষ্ট প্রযুক্তি কিছু করতে পারে বলেই এটি সেরা পছন্দ is এটি অবিসংবাদযুক্ত প্রমাণ, তবে আমি অনেক বেশি ব্যবসায়ের সাথে দেখা করেছি যেগুলি ডাটাবেসে ব্যবসায়িক যুক্তি সঞ্চয় করতে ব্যবহার করত এবং দীর্ঘমেয়াদে রক্ষণাবেক্ষণের কারণে এটির মাথাব্যথার কারণ হতে এ থেকে দূরে সরে চলেছে। ওভারসিম্প্লিফাইটিং, তবে ডাটাবেসগুলি ডেটা সংরক্ষণের জন্য এবং প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি ডেটা ট্রান্সফর্ম করার জন্য বোঝানো হয়। আমি সরাসরি আমার ডেটা সঞ্চয় করার জন্য আমার অ্যাপ্লিকেশনটি ব্যবহার করার চেষ্টা করতে চেয়ে ব্যবসায়িক যুক্তির জন্য আমি আর কোনও ডিবি ব্যবহার করতে চাই না।
কনর ম্যানকোন

8
এসকিউএল নিজেই ডিডিডির একটি দুর্দান্ত উদাহরণ। সম্পর্কিত ডেটা সংগঠিত করার সময় লোকেরা প্রথমে এটি করার জন্য একটি ভাষা নির্দিষ্ট করে: এসকিউএল। বাস্তবায়ন আসলে খুব বেশি গুরুত্বপূর্ণ নয়। একটি ডিবি প্রশাসকের ডাটাবেসটি জিজ্ঞাসা করার জন্য সি / সি ++ জানতে হবে না। একইভাবে ইভেন্টগুলির সময় নির্ধারণের কাজটি যখন মুখোমুখি হয়েছিল তখন কেউ সিআরএন সিনট্যাক্স (এমএইচডিএমডাব্লু) নিয়ে এসেছিল একটি সাধারণ ডোমেন মডেল যা তফসিলি সমস্যাগুলির 99% ফিট করে। ডিডিডিটির মূল বিষয়টি ক্লাস বা সারণী ইত্যাদি তৈরি করা নয়, এটি আপনার সমস্যাটি বোঝা এবং আপনার সমস্যার ডোমেনে কাজ করার জন্য একটি সিস্টেম নিয়ে আসা
স্লাইটব্যাটম্যান

উত্তর:


39

এই দিনগুলিতে আপনি সম্ভবত লেখাগুলি (কমান্ডগুলি) চেয়ে আলাদাভাবে পঠিত (ক্যোয়ারী) পরিচালনা করেছেন see একটি জটিল প্রশ্নের সাথে সাথে একটি ব্যবস্থায়, ক্যোয়ারী নিজেই ডোমেইন মডেল (যার দৃঢ়তা বজায় রাখার জন্য প্রাথমিকভাবে দায়ী মধ্য দিয়ে পাস করার সম্ভাবনা কম লিখেছেন )।

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


13
+1 ভাল উত্তর, তবে আপনার এই ধারণার যথাযথ নাম, কমান্ড-কোয়েরি বিভাজন দেওয়া উচিত।
মাইকে 14

6
@ মাইক পড়ার এবং লেখার জন্য সম্পূর্ণ আলাদা মডেল থাকা সিকিউএসের চেয়ে সিকিউআরএসের মতো is
অ্যান্ডি

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

হাই পারফরম্যান্স মার্ক কোনও টাইপের দিকে মনোযোগ দিচ্ছিল বুঝতে পেরে আমাকে অনেক দীর্ঘ সময় নিয়েছে।
ভয়েসফুউনরেজন

@ ডকব্রাউন - আপনার জন্য এখানে আমার স্পষ্ট করার চেষ্টা -> ক্যাসকেডেফালিওর.ভোকামসাইনরাটিও ডটকম
২০১/0 /

21

যেহেতু আমি এটি বুঝতে পারি, একটি মূল বিষয়টি অবকাঠামো (ডিবি, ফাইল সিস্টেম ইত্যাদি) থেকে ডোমেন লজিক (বিজনেস লজিক) বিভক্ত করা।

এটি ভুল বোঝাবুঝির ভিত্তি: ডিডিডি এর উদ্দেশ্য হ'ল হার্ড লাইনের সাথে জিনিসগুলি আলাদা করা নয় যেমন "এটি এসকিউএল সার্ভারে রয়েছে, সুতরাং বিএল হওয়া উচিত নয়", ডিডিডিটির উদ্দেশ্য ডোমেনগুলি পৃথক করা এবং এর মধ্যে বাধা তৈরি করা is এগুলি যে কোনও ডোমেনের ইন্টার্নালগুলি অন্য ডোমেনের ইন্টার্নাল থেকে সম্পূর্ণ পৃথক হতে দেয় এবং তাদের মধ্যে ভাগ করা বহিরাগতকে সংজ্ঞায়িত করে।

বিএল / ডিএল বাধা হিসাবে "এসকিউএল থাকা" -র কথা ভাববেন না — এটাই তা নয়। পরিবর্তে, "বাধা হিসাবে" এটি অভ্যন্তরীণ ডোমেনের সমাপ্তি of

প্রতিটি ডোমেনের বহিরাগত-মুখোমুখি এপিআই থাকা উচিত যা এটি অন্য সমস্ত ডোমেনের সাথে কাজ করার অনুমতি দেয় : ডেটা স্টোরেজ স্তরটির ক্ষেত্রে এটি সংরক্ষণ করা ডেটা-অবজেক্টগুলির জন্য পড়া / লেখার (সিআরইউডি) ক্রিয়া থাকা উচিত have এর অর্থ এসকিউএল নিজেই আসলে বাধা নয়, VIEWএবং PROCEDUREউপাদানগুলি। : আপনি সরাসরি টেবিল থেকে কখনোই পড়া উচিত যে বাস্তবায়ন বিস্তারিত DDD আমাদের বলে যে, একটি বহিস্থিত ভোক্তা হিসেবে আমরা সম্পর্কে চিন্তা করা উচিত নয়।

আপনার উদাহরণ বিবেচনা করুন:

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

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

অবকাঠামোতে এই গণনাগুলি করা খুব বেশি ঘটতে পারে না, কারণ ডিডিডি প্যাটার্নটি ডোমেন স্তর পরিবর্তন না করে এবং মংগাডিবির যেমন এসকিউএল সার্ভারের একই ক্ষমতা নেই তা জেনেও অবকাঠামোগত পরিবর্তন করার অনুমতি দেয় that এটি ঘটতে পারে না।

এটি অন্য একটি ভুল বোঝাবুঝি: এটি বলে যে অন্যান্য ডোমেন স্তর পরিবর্তন না করে অভ্যন্তরীণভাবে প্রয়োগের বিশদ পরিবর্তন করতে পারে । এটি বলে না যে আপনি কেবল একটি পুরো অবকাঠামো টুকরো প্রতিস্থাপন করতে পারেন ।

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

মোংগোডিবি-র সাথে এমএসএসকিউএল প্রতিস্থাপনের অনুমতি দেওয়ার জন্য ডিডিডি সেটআপ নেই — এগুলি দুটি সম্পূর্ণ ভিন্ন অবকাঠামোগত উপাদান।

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


1
ব্যাখ্যা করার জন্য ধন্যবাদ. আমার জন্য খুব শক্ত বিষয়, সবার দৃষ্টিভঙ্গি আলাদা। কেবলমাত্র আমি সম্মত নই এমএসএসকিউএল (গাড়ি) এবং মঙ্গোডিবি (মোটরসাইকেল) এর মধ্যে তুলনা, আমার কাছে সঠিক তুলনাটি হ'ল এটি একই গাড়ির জন্য দুটি ভিন্ন ইঞ্জিন, তবে এটি কেবল একটি মতামত।
লিওনার্দো ম্যাঙ্গানো

8
@ লিওনার্দো ম্যাঙ্গানো আহ, কিন্তু তারা তা নয়। এমএসএসকিউএল একটি সম্পর্কিত সম্পর্কিত ডাটাবেস, মঙ্গোডিবি একটি নথি ডাটাবেস। হ্যাঁ, "ডাটাবেস" উভয়ের বর্ণনা করে তবে এটি যতদূর যায়। পড়ার / লেখার কৌশলগুলি সম্পূর্ণ আলাদা। মঙ্গোডিবি এর পরিবর্তে আপনি পোস্টগ্র্রে বা মাইএসকিউএলকে বিকল্প হিসাবে ব্যবহার করতে পারেন এবং এটি একটি বৈধ তুলনা হবে।
410_

3
"আপনার কখনই টেবিল থেকে সরাসরি পড়া উচিত নয় ..." উন্মাদতা।
jpmc26

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

@ লুসিফারসাম আয়ে বাস্তবায়ন বিশদ এবং ডোমেন সীমানার মধ্যে বিচ্ছিন্নতা পরিচালনা করা এটি আরও সহজ করে তোলে। ডোমেনের একটি "অবজেক্ট" 5 টি টেবিল দ্বারা প্রতিনিধিত্ব করা হতে পারে, সুতরাং আমরা সেই অবজেক্টটি encapsulate করতে একটি ভিউ ব্যবহার করি।
410_ 13

18

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

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

একটি স্থাপত্য নিদর্শন থেকে বিচ্যুতি

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

  • এটা কি সঠিক প্যাটার্ন? (অনেক সময় এটি হয় তবে কখনও কখনও এটি কেবল খারাপ ফিট হয়)
  • আমার কি এই এক পথে বিচ্যুত হওয়া উচিত?
  • আমি এখন পর্যন্ত কতদূর বিচ্যুত হয়েছি?

আপনি দেখতে পাবেন যে কিছু আর্কিটেকচারাল নিদর্শনগুলি আপনার অ্যাপ্লিকেশনটির 80-90% এর জন্য বেশ উপযুক্ত তবে বাকী বিটের জন্য তেমন কিছু নয়। নির্ধারিত প্যাটার্ন থেকে মাঝে মধ্যে বিচ্যুতি কর্মক্ষমতা বা লজিস্টিকাল কারণে কার্যকর for

তবে, যদি আপনি দেখতে পান যে আপনার ক্রমবর্ধমান বিচ্যুতির পরিমাণ আপনার অ্যাপ্লিকেশন আর্কিটেকচারের 20% এরও বেশি পরিমাণে রয়েছে তবে এটি সম্ভবত খুব খারাপ।

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


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

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

7

এসকিউএল ভাল যে সেট ম্যানিপুলেশন যুক্তি DDD সঙ্গে একীকরণ করা যেতে পারে কোন সমস্যা নেই।

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

আমি কেবল নতুন ডোমেন অবজেক্টটি প্রবর্তন করি,

ProductInventory
{
    ProductType
    TotalCount
    DateTimeTaken
}

এবং আমার সংগ্রহস্থলের একটি পদ্ধতি

ProductRepository
{
    List<ProductInventory> TakeInventory(DateTime asOfDate) {...}
}

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


ঠিক আছে, এতক্ষণ আমি স্মরণ করছি। ভান্ডারগুলি Queryপ্যারামিটার হিসাবেও পাওয়ার কথা । repository.find(query);। আমি Specs. That opens a door to leave একইটি পড়েছি তবে ক্যোয়ারি with সহ একটি বিমূর্ততা QueryImplবা অবকাঠামো স্তরে নির্দিষ্ট-ক্যোয়ারী বাস্তবায়ন হিসাবে।
লাইভ

5
ওহ godশ্বর, আমি জানি কিছু লোক এটি করে তবে আমি মনে করি এটি অত্যন্ত খারাপ। আপনি এই ধরণের জিনিসটিকে সেই রাস্তা থেকে নামার পদক্ষেপ হিসাবে দেখতে পারেন। তবে আমি মনে করি এটি সাবধানতার সাথে নেওয়া যেতে পারে।
ইভান

I know some people do thatকিছু লোকেরা মূল এবং এর কাঠামো। স্প্রিংফ্রেমওয়ার্কটিতে এর অনেকগুলি রয়েছে :-)। যাইহোক, @ ভয়েসঅফউনরাইজন যেমন পরামর্শ দিয়েছে, ডিডিডি-র চার্জ কীগুলি লেখার ধারাবাহিকতা বজায় রাখছে। আমি ডোমেন মডেলগুলির সাথে নকশাকে জোর করা সম্পর্কে অনিশ্চিত, যার উদ্দেশ্য কেবল অনুসন্ধান করা বা প্যারামিট্রাইজিং কোয়েরি। এটি ডেটা স্ট্রাকচার (পোকো, পোজোস, ডিটিওস, সারি ম্যাপার্স, যাই হোক না কেন) এর সাথে ডোমেনের বাইরে যেতে পারে।
লাইভ

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

1
@ লিওনার্দো ম্যাঙ্গানো আপনার প্রয়োগ এবং প্রয়োগের উপর নির্ভর করে। উপলব্ধি করার প্রধান বিষয়টি হল আপনি নিজের ডোমেনটিকে ব্যবহারিক করে তুলতে পুনরায় ব্যাখ্যা করতে পারেন।
ইভান

3

এই দ্বিধা সমাধানের সম্ভাব্য উপায়গুলির মধ্যে একটি হ'ল এসকিউএলকে অ্যাসেম্বলি ভাষা হিসাবে ভাবা: আপনি খুব কমই, যদি এটি সরাসরি কোড করেন তবে যেখানে পারফরম্যান্সের বিষয়টি গুরুত্বপূর্ণ, আপনি আপনার সি দ্বারা উত্পাদিত কোড বুঝতে সক্ষম হতে হবে / সি ++ / গোলাং / মরিচা সংকলক এবং এমনকি সমাবেশে একটি ক্ষুদ্র স্নিপেট লিখতে পারেন, যদি আপনি পছন্দসই মেশিন কোড তৈরি করতে উচ্চ স্তরের ভাষায় কোডটি পরিবর্তন করতে না পারেন।

একইভাবে, ডাটাবেস এবং এসকিউএল, বিভিন্ন এসকিউএল লাইব্রেরি (যা কিছু অন্তর্জগৎ মধ্যে ORM ), যেমন SQLAlchemy এবং পাইথন জন্য জ্যাঙ্গো ORM, LINQ .NET জন্য, যেখানে সম্ভব কর্মক্ষমতা অর্জন উচ্চ স্তরের বিমূর্ত এখনো ব্যবহার উত্পন্ন SQL কোড প্রদান। তারা ব্যবহৃত ডিবি হিসাবে কিছু বহনযোগ্যতা সরবরাহ করে, সম্ভবত বিভিন্ন পারফরম্যান্স রয়েছে, যেমন পোস্টগ্র্রেস এবং মাইএসকিউএল-তে কিছু অপটিমাল ডিবি-নির্দিষ্ট এসকিউএল ব্যবহারের কারণে কিছু অপারেশন রয়েছে।

এবং উচ্চ স্তরের ভাষাগুলির সাথে এসকিউএল কীভাবে কাজ করে তা বোঝার জন্য এটি সমালোচনাযোগ্য, এমনকি যদি এটি কেবল উল্লিখিত এসকিউএল লাইব্রেরিগুলির সাথে করা প্রশ্নগুলি পুনরায় সাজানো, পছন্দসই দক্ষতা অর্জনে সক্ষম হয়।

পিএস আমি বরং এটিকে একটি মন্তব্য করব তবে এর পক্ষে আমার যথেষ্ট খ্যাতি নেই।


2

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

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

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

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


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

@ স্টিভ আমি মনে করি আপনি এখানে ভুল হয়ে গেছেন ধরেই নিচ্ছে যে সেখানে অবশ্যই একটি একক কোর সিস্টেম থাকতে হবে যা অন্যরা 'হ্যাং অফ' করে।
জিমি জেমস

@ স্টিভ একটি উদাহরণ দেওয়ার জন্য, আপনি একটি সিঙ্গেল নো-এসকিউএল ডাটাবেস দিয়ে সিস্টেমগুলি পুরো ডাটাবেসকে প্রতিস্থাপন করতে পারেন (আমি এটি বলছি না যে এটি সর্বদা সঠিক পছন্দ, কেবল এটি করা যায়)) সেই ডাটাবেসটি তখন অনেকগুলি জুড়ে সংরক্ষণ করা যায় সিস্টেম, এমনকি ভৌগলিক অঞ্চল। এই ধরনের একটি ডিবি সহায়ক নয়, এটি এসকিউএল ডিবিরের পাইকারি প্রতিস্থাপন।
জিমি জেমস

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

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

2

এটিই কি ডিডিডি প্যাটার্নের ক্ষতি?

আমাকে প্রথমে কয়েকটি ভুল ধারণা পরিষ্কার করতে দিন।

ডিডিডি কোনও প্যাটার্ন নয়। এবং এটি সত্যিই নিদর্শনগুলি লিখে দেয় না।

এরিক ইভানের ডিডিডি বইয়ের প্রবন্ধে বলা হয়েছে:

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

[...]

সাফল্যের সাধারণ বৈশিষ্ট্যটি ছিল একটি সমৃদ্ধ ডোমেন মডেল যা ডিজাইনের পুনরাবৃত্তির মাধ্যমে বিকশিত হয়েছিল এবং প্রকল্পের ফ্যাব্রিকের অংশ হয়ে উঠল।

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

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

মনে রাখতে হবে যে আরেকটি বিষয় একটি ডোমেন মডেল হয় না শুধু একটা উপায় এটা প্রকাশ করার, অথবা এটি কিছু অংশ প্রকাশ করার যে - আপনার সিস্টেম খুঁজে পাওয়া যেতে পারে যে এটা OO যেমন পণ্য বাস্তবায়ন। একটি সফ্টওয়্যার দিয়ে আপনি যে সমস্যাটি সমাধান করার চেষ্টা করছেন তা সম্পর্কে একটি ডোমেন মডেল think আপনি কীভাবে জিনিসগুলি বুঝতে এবং বুঝতে পারছেন, সেগুলি সম্পর্কে আপনি কীভাবে কথা বলবেন তা এটি এটা ধারণাগত । তবে কিছু অস্পষ্ট অর্থে নয়। এটি গভীর এবং পরিশুদ্ধ, এবং কঠোর পরিশ্রম এবং জ্ঞান সংগ্রহের ফলাফল। এটি সময়ের সাথে আরও সংশোধিত এবং সম্ভবত বিকশিত হয়েছে এবং এটি বাস্তবায়নের বিবেচনার সাথে জড়িত (যার মধ্যে কিছু মডেলকে বাধা দিতে পারে)। এটি সমস্ত দলের সদস্যদের দ্বারা ভাগ করা উচিত (এবং জড়িত ডোমেন বিশেষজ্ঞদের), এবং এটি কীভাবে আপনি সিস্টেমটি প্রয়োগ করেন তা চালানো উচিত, যাতে সিস্টেমটি এটি ঘনিষ্ঠভাবে প্রতিফলিত করে।

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

আমি যা ভাবছি তা হ'ল, যখন আমার খুব জটিল প্রশ্ন আসে [...]?

ভাল, সাধারণত বলতে এখানে দুটি পরিস্থিতিতে আছে।

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

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


0

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

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

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

আপনি কি প্রিন্টার ড্রাইভারের মধ্যে পিডিএফ জেনারেটর এম্বেড করবেন বা এমন একটি ট্রিগার যুক্ত করবেন যা আমাদের প্রিন্টার থেকে মুদ্রিত প্রতিটি বিক্রয় আদেশের জন্য লগ পৃষ্ঠা মুদ্রণ করবে?

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

70 এর 90-এর এসকিউএল ডাটাবেস এখন দক্ষ ছিল? - নিশ্চিত নন, কিছু পরিস্থিতিতে এসিকিউএল কোয়েরিতে একাধিক যোগদানের চেয়ে অ্যাসিঙ্ক্রোনাস ডেটা ক্যোয়ারী প্রয়োজনীয় ডেটা দ্রুত ফিরিয়ে দেবে।

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

আমি বলব জটিল প্রশ্নগুলির সাথে সম্পর্কিত সম্পর্কিত মডেলকে ঘিরে আপনার অ্যাপ্লিকেশন তৈরি করা ডাটাবেস ইঞ্জিনের অপব্যবহার। অবশ্যই আপনি যখন তাদের ব্যবসায়ের সাথে শক্তভাবে আপনার ব্যবসায়ের সংযোজন করেন তখন ডাটাবেস ইঞ্জিন সরবরাহকারীরা খুশি হন - তারা আরও বেশি বৈশিষ্ট্য সরবরাহ করতে খুশি হবেন যা এই সীমাটিকে আরও শক্তিশালী করে।


1
তবে আমি ভাবতে থাকি যে অন্য যে কোনও ভাষার চেয়ে এসকিউএল সেট গণনার পক্ষে আরও ভাল। আমার দৃষ্টিকোণ থেকে. আপনার উদাহরণটি বিপরীত দিকে রয়েছে, লক্ষ লক্ষ সারি এবং এর সাথে যুক্ত হয়ে খুব জটিল সেট অপারেশনের জন্য সি # ব্যবহার করা ভুল সরঞ্জামটি ব্যবহার করছে, তবে আমি ভুল হতে পারি।
লিওনার্দো ম্যাঙ্গানো 21

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