জাভা অ্যাপ্লিকেশন কাঠামো: অনুভূমিক বনাম উল্লম্ব বিভাজন


15

বড় জাভা অ্যাপ্লিকেশনটির জন্য প্রারম্ভিক প্রকল্পের কাঠামোটি (মাভেন / এক্সলিপস ব্যবহার করে) নিয়ে কিছুটা বিতর্ক।

বিকল্প 1:

entities (i.e. the whole database using Hibernate classes-first)
services (i.e. sets of read/write operations on the entities)
app (perhaps split up more further down the line)

বিকল্প 2:

area1-entities
area1-services
area1-app
area2-entities
area2-services
area2-app
...
(where area1, area2 etc. are functional areas of the system)

অপশন 2 স্পষ্টতই আরও বেশি পরিমাণে মাভেন প্রকল্প / মডিউল তৈরি করবে এবং এর অর্থ ক্লাসগুলি যা ডেটাবেস তৈরি করবে তা একাধিক প্রকল্পের মধ্যে বিতরণ করা হবে। কেউ কি প্রতিটি পদ্ধতির উপকার / পরামর্শ দিতে পারে?


3
আমরাও। আইএমএইচও (আমরা এখানে যাই) আমাদের প্রযুক্তিগত স্তরগুলিতে পৃথক হওয়া উচিত যা কেবল কাদা দিয়ে যায় ball পরিবর্তে প্যাকেজ কার্যত। কেবল অঞ্চল 1 / অঞ্চল 2 যাতে আপনার অ্যাপ্লিকেশনটির মূল অংশ থাকতে পারে (সত্তা, পরিষেবাগুলি (পাবলিক ইন্টারফেসে বিভক্ত এবং ব্যক্তিগত প্যাকেজ প্রাইভেট প্রয়োগকরণ), সংগ্রহস্থলগুলি (প্রয়োজন হলে)। এখন আপনার ওয়েব / ডাব্লু / মেসেজিং স্তরটিকে সেই কোরের সাথে সংযুক্ত করা উচিত You এখানে এবং এখানে একবার

এটি এখনও সমালোচিত :)। তবে আমি এর উত্তরে কিছু পোলিশিং করব।

আপনি চেক আউট করতে চাইতে পারেন stackoverflow.com/questions/11733267/...

ধন্যবাদ তবে এই প্রশ্নটি প্যাকেজ কাঠামোর চেয়ে প্রকল্প কাঠামো সম্পর্কে
স্টিভ চেম্বারস

উত্তর:


29

আমি উভয় না করার পরামর্শ দিতে হবে।

একটি প্যাকেজ কাঠামো সহ কোনও প্রযুক্তিগত স্তর প্রয়োগের চেষ্টা করা আপনার আবেদনে প্রচুর জড়িয়ে পড়ে। এই সত্যটি উল্লেখ করার দরকার নেই যে আমরা কোনও পরিষেবা ইন্টারফেসের পিছনে সমস্ত কিছু আড়াল করার জন্য এতটা চেষ্টা করি এবং আমরা যে প্রথম জিনিসটি করি (বেশিরভাগ প্যাকেজিংয়ের কারণে) সবকিছুকে একটি করে তোলে public class। যখন একটি মধ্যবর্তী একটি প্রযুক্তিগত বিচ্ছেদ হয় এই বেদনাদায়ক হয়ে x.y.z.serviceএবং x.y.z.repositoryপ্যাকেজ, সবকিছু এখন সংগ্রহস্থলের অ্যাক্সেস করতে পারেন। বুম সেখানে পরিষেবা স্তর ভিতরে আপনার encapsulation যায়।

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

  1. একসাথে পরিবর্তিত জিনিসগুলি এক সাথে প্যাকেজ করা হয়
  2. যে জিনিসগুলি একসাথে ব্যবহৃত হয় সেগুলি একসাথে প্যাকেজ করা হয়

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

আপনার অ্যাপ্লিকেশনটির মূলটি ধরে রাখার জন্য আমি নীচের মতো একটি মূল প্যাকেজ কাঠামোর জন্য প্রচেষ্টা করব:

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

একক মডেল ব্যবহার করে অনুসন্ধান, প্রতিবেদন করা এবং লেনদেন প্রক্রিয়াজাতকরণের জন্য সর্বোত্তম সমাধান তৈরি করা সম্ভব নয়।

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

চূড়ান্ত নোট

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

দাবি পরিত্যাগী

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

লিংক

  1. ক্লিন আর্কিটেকচার, চাচা বব মার্টিন
  2. ষড়ভুজ আর্কিটেকচার (ওরফে পোর্টস এবং অ্যাডাপ্টার), অ্যালিস্টার ককবার্ন b
  3. ওফ, আমার আর্কিটেকচার কোথায় গেল, অলিভার জিয়ার্ক
  4. ওওডির মূলনীতি, চাচা বব মার্টিন
  5. ডিডিডি প্রয়োগ করার সময় ভুল, উদি দহন
  6. বাউন্ডেড কনটেক্সটস, মার্টিন ফওলার
  7. আর্কিটেকচারাল এভিডেন্ট কোডিং স্টাইল, সাইমন ব্রাউন

বই

  1. ক্রমবর্ধমান অবজেক্ট-ওরিয়েন্টড সফ্টওয়্যার, পরীক্ষার দ্বারা পরিচালিত
  2. জাভা অ্যাপ্লিকেশন আর্কিটেকচার: ওএসজি (রবার্ট সি মার্টিন সিরিজ) ব্যবহার করে উদাহরণ সহ মডুলারিটি প্যাটার্নস
  3. ডোমেন-চালিত ডিজাইন: সফ্টওয়্যার হার্টে জটিলতা মোকাবেলা
  4. বিকাশকারীদের জন্য সফ্টওয়্যার আর্কিটেকচার
  5. ডোমেন চালিত নকশা বাস্তবায়ন করা হচ্ছে

1
উত্তম উত্তর :) এই বিষয়টি মোকাবেলায় আমি অবশ্যই একটি পঠন যুক্ত করব: amazon.com/Growing-Object-Orimented-Software-Guided-Tests/dp/…
Mik378

1
ভাল, আমার আসল উত্তরে আরও কয়েকজন যুক্ত করেছেন।

1
এটা তোলে দ্বারা পর্যন্ত আমি পড়েছি ডিজাইন সম্পর্কে ভাল বই কোনটি;) আপনি খুব ভাল এছাড়াও ভন ভারনন বই উল্লেখ করতে পারি,: amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/...
Mik378

@ এমডিনাম +1 রেফারেন্সের জন্য দুর্দান্ত!

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