আমি উভয় না করার পরামর্শ দিতে হবে।
একটি প্যাকেজ কাঠামো সহ কোনও প্রযুক্তিগত স্তর প্রয়োগের চেষ্টা করা আপনার আবেদনে প্রচুর জড়িয়ে পড়ে। এই সত্যটি উল্লেখ করার দরকার নেই যে আমরা কোনও পরিষেবা ইন্টারফেসের পিছনে সমস্ত কিছু আড়াল করার জন্য এতটা চেষ্টা করি এবং আমরা যে প্রথম জিনিসটি করি (বেশিরভাগ প্যাকেজিংয়ের কারণে) সবকিছুকে একটি করে তোলে public class
। যখন একটি মধ্যবর্তী একটি প্রযুক্তিগত বিচ্ছেদ হয় এই বেদনাদায়ক হয়ে x.y.z.service
এবং x.y.z.repository
প্যাকেজ, সবকিছু এখন সংগ্রহস্থলের অ্যাক্সেস করতে পারেন। বুম সেখানে পরিষেবা স্তর ভিতরে আপনার encapsulation যায়।
পরিবর্তে আপনার আরও কার্যকরী এবং পেঁয়াজ ভিত্তিক পদ্ধতির ( পরিষ্কার আর্কিটেকচার , ষড়ভুজ আর্কিটেকচার ) অনুসরণ করা উচিত । এটি একক দায়িত্বের নীতিমালা (যখন কোনও প্যাকেজের ক্ষেত্রে প্রয়োগ করা হয়) এর সাথে মিল রেখে এবং প্যাকেজিং নীতিমালা অনুসারে হয়
- একসাথে পরিবর্তিত জিনিসগুলি এক সাথে প্যাকেজ করা হয়
- যে জিনিসগুলি একসাথে ব্যবহৃত হয় সেগুলি একসাথে প্যাকেজ করা হয়
অলিভার জিয়ার্ক জাভাতে একত্রে প্যাকেজিং উপাদানগুলির জন্য একটি সুন্দর পোস্ট লিখেছেন । সাইমন ব্রাউন এই বিষয়টিতে আরও একটি সাধারণ গল্প লিখেছেন ।
আপনার অ্যাপ্লিকেশনটির মূলটি ধরে রাখার জন্য আমি নীচের মতো একটি মূল প্যাকেজ কাঠামোর জন্য প্রচেষ্টা করব:
x.y.z.area1
x.y.z.area2
এখন আপনার যদি কোনও ওয়েব ইন্টারফেস থাকে তবে উদাহরণস্বরূপ, একটি web
উপ- প্যাকেজ, কেবলমাত্র এটির জন্য ওয়েব সার্ভিস এ ws
বা rest
প্যাকেজটির জন্য। এটি মূলত মূলটির সাথে সংযোগ স্থাপন করে।
x.y.z.area1.web
x.y.z.area1.ws
x.y.z.area2.rest
এখন আপনি আপনার মূলের ভিতরে থেকে অন্য স্তরগুলিতে পুনরায় ব্যবহারের বিষয়টি বিবেচনা করতে পারেন তবে IMHO সেই স্তরের জন্য একটি নির্দিষ্ট ডোমেন ব্যবহার করা ভাল better যেমনটি, এসকিউএল ম্যাপিংয়ের সাথে অবজেক্টের মতো (প্রায়শই) আমরা কী স্ক্রিনে প্রদর্শন করতে চাই বা ওয়েবসার্ভিসে এক্সএমএল হিসাবে ব্যবহার করতে পারি এবং কীভাবে ব্যবসায়ের যুক্তি প্রয়োগ করা হয় তার মধ্যে একটি মিল নেই। ব্যবসায় এবং ওয়েব ডোমেনগুলির জটিলতার উপর নির্ভর করে আপনি এগুলি সমাধানের জন্য পৃথক সমস্যা ডোমেন হিসাবে বিবেচনা করতে পারেন, যা মূলত 2 টি পৃথক সীমিত প্রসঙ্গ ।
সিকিউআরএস সংস্থান থেকে একটি উদ্ধৃতি ব্যবহার করতে ote
একক মডেল ব্যবহার করে অনুসন্ধান, প্রতিবেদন করা এবং লেনদেন প্রক্রিয়াজাতকরণের জন্য সর্বোত্তম সমাধান তৈরি করা সম্ভব নয়।
সবকিছুকে একটি একক (ডোমেন) মডেলে রাখার চেষ্টা করবেন না, দায়িত্বগুলি আলাদা করুন। আপনি সম্ভবত আরও (ছোট) ক্লাস দিয়ে শেষ করতে পারেন তবে আপনার অ্যাপ্লিকেশন এর স্তরগুলির মধ্যে একটি ক্লিনার পৃথকীকরণ।
চূড়ান্ত নোট
মনে রাখবেন একটি আর্কিটেকচার তৈরির সিদ্ধান্ত অন্য একটি সমাধানের ট্রেড-অফের বিষয়ে সিদ্ধান্ত নিয়েছে। এটি ডোমেনের জটিলতার উপর অত্যন্ত নির্ভর করে এবং মূলত আপনার আবেদনের কার্যকরী প্রয়োজনীয়তা দ্বারা চালিত হওয়া উচিত। তবে এটি অ-কার্যকরী (কর্মক্ষমতা, সুরক্ষা) এবং পরিবেশগত বাধা (ব্যবহারের ভাষা, প্ল্যাটফর্ম, অভিজ্ঞতা) দ্বারা প্রভাবিত হয়। এবং আর্কিটেকচার, কোডিংয়ের মতো, প্রতিটি নতুন প্রয়োজনীয়তা কখনই শেষ হয় না (এবং হতে পারে?) অ্যাপ্লিকেশনটির নতুন ডিজাইন করতে পারে।
দাবি পরিত্যাগী
হ্যাঁ আমি সবকিছুকে একটি একক মডেলের মধ্যে রাখার চেষ্টা করেছি এবং হ্যাঁ আমি আমার অ্যাপ্লিকেশনগুলিতে একটি প্রযুক্তিগত বিভাজনও ব্যবহার করার চেষ্টা করেছি। তবে আটকে থাকা অ্যাপ্লিকেশন লেয়ারিং তৈরির অভিজ্ঞতা অর্জনের কয়েক বছর পরে (প্রথমে এটি একটি ভাল ধারণা বলে মনে হয়, তারপরে অ্যাপ্লিকেশনটি বাড়তে শুরু করে ...) আমি বুঝতে পেরেছিলাম অন্য উপায় থাকতে হবে।
লিংক
- ক্লিন আর্কিটেকচার, চাচা বব মার্টিন
- ষড়ভুজ আর্কিটেকচার (ওরফে পোর্টস এবং অ্যাডাপ্টার), অ্যালিস্টার ককবার্ন b
- ওফ, আমার আর্কিটেকচার কোথায় গেল, অলিভার জিয়ার্ক
- ওওডির মূলনীতি, চাচা বব মার্টিন
- ডিডিডি প্রয়োগ করার সময় ভুল, উদি দহন
- বাউন্ডেড কনটেক্সটস, মার্টিন ফওলার
- আর্কিটেকচারাল এভিডেন্ট কোডিং স্টাইল, সাইমন ব্রাউন
বই
- ক্রমবর্ধমান অবজেক্ট-ওরিয়েন্টড সফ্টওয়্যার, পরীক্ষার দ্বারা পরিচালিত
- জাভা অ্যাপ্লিকেশন আর্কিটেকচার: ওএসজি (রবার্ট সি মার্টিন সিরিজ) ব্যবহার করে উদাহরণ সহ মডুলারিটি প্যাটার্নস
- ডোমেন-চালিত ডিজাইন: সফ্টওয়্যার হার্টে জটিলতা মোকাবেলা
- বিকাশকারীদের জন্য সফ্টওয়্যার আর্কিটেকচার
- ডোমেন চালিত নকশা বাস্তবায়ন করা হচ্ছে