যেখানে একটি ডেটাবেস দুর্বলভাবে নকশা করা হয়েছে সেখানে কোনও সম্পর্কিত ডেটাবেস চালিত অ্যাপ্লিকেশনটিতে আরও ওও কোড কীভাবে তৈরি করা যায়


19

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

আমি মাইবাটিসকে ওআরএম হিসাবে ব্যবহার করছি, যা আমার ক্ষেত্রে সেরা পছন্দ নাও হতে পারে, যেহেতু ডাটাবেসটি খারাপভাবে ডিজাইন করা হয়েছে এবং মাইবাটিস একটি আরও ডাটাবেস ভিত্তিক সরঞ্জাম।

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

পেতে একটি ডেটা (P1, ..., পাই);

পেতে বি ডেটা (P1, ..., পাই);

পেতে সি ডেটা (P1, ..., পাই);

পেতে ডি ডেটা (P1, ..., পাই); ...

এবং শীঘ্রই এটি বিস্ফোরণ ঘটে যখন আমাদের বিভিন্ন কলাম সহ বিভিন্ন টেবিল রয়েছে।

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

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

সম্পাদনা: ডাটাবেস সম্পর্কে আরও তথ্য

ডাটাবেসটিতে মূলত ফোন কল সম্পর্কিত তথ্য থাকে। দরিদ্র নকশাটি রয়েছে:

প্রাথমিক কী হিসাবে একটি কৃত্রিম আইডি সহ টেবিলগুলির ডোমেন জ্ঞানের সাথে কোনও সম্পর্ক নেই।

কোনও অনন্য, ট্রিগার, চেক বা বিদেশী কীগুলি নেই।

জেনেরিক নামের ক্ষেত্রগুলি যা বিভিন্ন রেকর্ডের জন্য বিভিন্ন ধারণার সাথে মেলে।

রেকর্ডগুলি যা কেবলমাত্র বিভিন্ন শর্তের সাথে অন্য টেবিলগুলির সাথে ক্রস করে শ্রেণিবদ্ধ করা যায়।

কলামগুলি স্ট্রিং হিসাবে সঞ্চিত সংখ্যা বা তারিখ হওয়া উচিত।

এটি সংক্ষেপে বলতে গেলে চারদিকে একটি অগোছালো / অলস নকশা।


7
ডাটাবেস ডিজাইন সংশোধন করা একটি বিকল্প?
আরমালকে

1
দয়া করে ব্যাখ্যা করুন কীভাবে ডেটাবেসটি খারাপভাবে ডিজাইন করা হয়েছে।
তুলিনাস কর্ডোভা

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

1
এই বইটি আপনাকে কীভাবে ডেটাবেস সমস্যাটি সমাধান করতে শুরু করতে এবং লিগ্যাসি কোডটি কাজ করতে শুরু করতে পারে তার কয়েকটি স্বল্প স্থান দিতে পারে: amazon.com/…
এইচএলজিইএম

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

উত্তর:


53

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

এখানে আসল প্রশ্নটি হল, আপনি কোথায় এই জটিলতাটি আবদ্ধ করেন?

সুতরাং আমাকে এক মুহূর্ত পিছিয়ে যেতে এবং আমি এখানে 'জটিলতা' উল্লেখ করছি। আপনার সমস্যা (যেমনটি আমি এটি বুঝতে পারি; আমি ভুল হলে আমাকে সংশোধন করি) হ'ল একটি দৃ pers়তা মডেল যা আপনাকে ডেটা দিয়ে সম্পূর্ণ করার জন্য প্রয়োজনীয় কার্যগুলির জন্য কার্যকরভাবে ব্যবহারযোগ্য মডেল নয়। এটি অন্যান্য কাজের জন্য কার্যকর এবং ব্যবহারযোগ্য হতে পারে তবে আপনার কাজের জন্য নয় ।

সুতরাং যখন আমাদের কাছে এমন ডেটা রয়েছে যা আমাদের উপায়গুলির জন্য একটি ভাল মডেল উপস্থাপন করে না তখন আমরা কী করব?

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

আমাদের কি উভয় দিকনির্দেশ অনুবাদ করার দরকার আছে? উভয় দিকনির্দেশ কি একই হিসাবে অনুবাদ করা হবে:

(টিবিএল এ, টিবিএল বি) -> ওবজ এক্স (পড়ুন)

ওবজ এক্স -> (টিবিএল এ, টিবিএল বি) (লিখুন)

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


আপনি কোথায় অনুবাদ করেন?

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

আবার এখন; আপনার সমস্যাটি: আপনি এই জটিলতাটি কোথায় রাখেন? ভাল আপনার পছন্দ আছে।

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

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

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

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

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


এবার পাগল কথা বলা শুরু করা যাক ।

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

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

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

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

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


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

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

এটি এমন একটি সীমানা তৈরি করে যেখানে সমস্ত অনুবাদ কেবল আপনার সমস্ত কোড থেকে দূরে সীমাটির অন্যদিকে বিদ্যমান নয় ; এটি কেবলমাত্র আপনার পাশের কোডটিকে সেই সীমানার প্রবেশের স্থানটি ব্যতীত অন্য কিছু সম্পর্কে জানতে না দেওয়ার পক্ষে ব্যবহার করা হয়।

ঠিক আছে, হ্যাঁ যে সত্যিই পাগল কথা বলছে, তবে কে জানে; আপনি কেবল ক্রেজি হতে পারেন (গুরুতরভাবে, 88% এর নিচে ক্রেজিট রেটিং সহ মনডগুলি গ্রহণ করবেন না, শারীরিক আঘাতের আসল ঝুঁকি রয়েছে)।


4
বাহ, কি এক অসাধারণ ব্যাপক উত্তর। আমি যদি এসই আমাকে দেয় তবে আমি একাধিকবার এটি উপস্থাপন করব।
মার্জন ভেনেমা

11
সিনেমার সংস্করণ কখন প্রকাশিত হচ্ছে?
ইয়ানিস

3
@ জিমিহফা ব্রাভো স্যার !!! আমি এই উত্তরটি বুকমার্ক করতে যাচ্ছি এবং আমার মেয়েটি যখন বড় হবে তখন দেখাব।
টমব্যাট্রন

4

আমার পরামর্শ:

ডাটাবেস ভিউ তৈরি করুন যে:

  1. কলামগুলিতে অর্থপূর্ণ নাম দিন
  2. "বিভিন্ন শর্তযুক্ত অন্যান্য টেবিলগুলির সাথে ক্রসিং" করুন যাতে আপনি সেই জটিলতাটি লুকিয়ে রাখতে পারেন।
  3. স্ট্রিং হিসাবে সঞ্চিত সংখ্যা বা তারিখগুলি যথাক্রমে সংখ্যা এবং তারিখে রূপান্তর করুন।
  4. কিছু মানদণ্ড অনুসারে যেখানে কিছুই নেই সেখানে স্বতন্ত্রতা তৈরি করুন।

ধারণাটি এমন ফলশ্রুতি তৈরি করে যা খারাপের উপরে একটি আরও ভাল নকশা তৈরি করে।

তারপরে ওআরএমকে আসল টেবিলগুলির পরিবর্তে সেই ফলকের সাথে সম্পর্কিত করুন।

যদিও এটি সন্নিবেশগুলি সরল করে না।


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

3

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

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

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

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


1

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

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

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

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