এমভিভিএম, ডিডিডি এবং ডাব্লুপিএফ স্তরযুক্ত অ্যাপ্লিকেশন প্রকল্পের কাঠামো গাইডেন্স


17

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

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

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

আমি যখন এমভিভিএম অনুসরণ করি তখন আমার ফোল্ডারটির কাঠামোটি দেখতে দেখতে এমন হতে পারে:

Views
Models
ViewModels
Helpers

তবে কীভাবে এটি আমার সরল প্রকল্পের কাঠামোটির সাথে সাদৃশ্যপূর্ণ একটি সরল ডিডিডি স্তরযুক্ত পদ্ধতির সাথে খাপ খায়:

MyApp.UI
MyApp.Domain
MyApp.Data

আমি Modelsকি ডোমেন স্তরটিতে রাখি বা আমার কাছে বলার 3 সংস্করণ রয়েছে Person? এটি অন্য প্রশ্নটির দিকে নিয়ে যায় যেখানে আমি আমার ডিপোজিটকে আমার ডিপোজিটরি এবং ম্যাপিংগুলি ডোমেন অবজেক্টে রাখব? আমি ডেটা ধরে নিব ...

Viewsআমি ইউআই যেতে হবে পেতে কিন্তু হবে ViewModels?

অবশেষে, আমি কোথায় আমার ব্যবসায়িক যুক্তি এম্বেড করব?

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

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

আমার প্রশ্নের হৃদয়টি এভাবে প্রদর্শিত হতে পারে।
আমি tblPersonদ্বারা উত্পাদিত বস্তু আছে *.dbml। এটি সুস্পষ্ট এবং এটি আমার "ডেটা" স্তরের অন্তর্ভুক্ত।
এখন আমার কাছে মডেল, ডিটিও, ডোমেন মডেল বা যা কিছু বলা উচিত সেগুলি পৃথক স্তর (প্রকল্প?) বলা হবে Person। আমি প্রয়োজন হবে Mapperজন্য Personকরতে tblPersonযে আমি নিশ্চিত নই যেখানে করা।
তারপরে, এর জন্য আমার কাছে একটি ভিউমোডেল থাকবে, বলুন EditPersonযে এটির নিজস্ব বৈশিষ্ট্য যা এটি থেকে টানছে Personতবে সম্ভবত আরও ভাল।
অবশেষে আমার কাছে এমন ভিউ থাকবে যা সেই ভিউমোডেলের সাথে আবদ্ধ ছিল ....

অনুচ্ছেদে আমার অনুমান এবং অনুমানগুলি পূর্ণ হয়েছে এবং আমি আশা করছি যে কেউ আমার জন্য বাতাস পরিষ্কার করতে সহায়তা করবে বা সেখানে অন্তর্দৃষ্টি দেবে যাতে এখন থেকে 6 মাস থেকে এক বছর পর্যন্ত আমি আমার প্রয়োজনের চেয়ে বেশি লাথি দিচ্ছি না।


লিনক টু এসকিউএল বড় প্রকল্পগুলির জন্য উপযুক্ত নয়। হয় সত্তা ফ্রেমওয়ার্ক বা nHibernate মত আলাদা ORM ব্যবহার করুন। এছাড়াও, এই ক্লায়েন্ট-কেবল অ্যাপ্লিকেশন, বা ক্লায়েন্ট-সার্ভার?
ইওফোরিক

এটি একটি ডাব্লুপিএফ ক্লায়েন্ট-কেবল অ্যাপ্লিকেশন। এছাড়াও, আপনি যখন ব্যাখ্যা করতে পারেন যে আমার একমাত্র ডেটাসোর্স এমএস এসকিউএল হয় তখন কেন আপনি এল 2 এস মাঝারি বা বড় আকারের অ্যাপের জন্য অনুপযুক্ত বলে মনে করেন?
পাল্টা দিন পালাদিন

উত্তর:


5

এমভিভিএম একটি ইউআই প্যাটার্ন এবং এটি ক্লায়েন্টে ব্যবহৃত হয়।

ডিডিডিতে ডোমেনের যে অংশগুলি ক্লায়েন্টে ব্যবহৃত হয় সেগুলি সম্ভবত মডেলের (একটি অংশ)

ভিউ এবং ভিউমোডেল কেবল ক্লায়েন্ট।

আমি মডেলগুলিতে (বা কাছাকাছি) রিপোজিটরিগুলি রেখেছি কারণ তারা মডেলটিকে ব্যাক-এন্ডে সিঙ্ক্রোনাইজ করে।

হ্যাঁ, অনেক সময় এর ফলে বিভিন্ন নেমস্পেসে একাধিক ব্যক্তি ক্লাস হয়। এগুলি খুব অনুরূপ শুরু হতে পারে তবে বেশ কয়েকবার পুনরাবৃত্তি বা প্রকাশের পরে খুব আলাদা হতে পারে।

সম্পাদনা

ভাণ্ডার সম্পর্কিত অংশটি স্পষ্ট করতে এবং ব্যবসায় যুক্তির অবস্থান সম্পর্কে আরও ব্যাখ্যা করতে

আপনি যদি এমন একটি সিস্টেম তৈরি করেন যা পৃথক ক্লায়েন্ট এবং সার্ভার-সাইড / ব্যাক-এন্ড রিপোজিটরিগুলি ধারণ করে ক্লায়েন্ট এবং সার্ভারে ব্যবহার করা যেতে পারে। ক্লায়েন্টে সার্ভারের একটি বিমূর্ততা সরবরাহ করতে এবং সার্ভারে অন্যান্য সার্ভার এবং ডেটা উত্সগুলির বিমূর্ততা সরবরাহ করতে। এটি কেবল একটি নিদর্শন is

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

আমি মনে করি যে ডিডিডি সার্ভারের সাথে সম্পর্কিত এবং ক্লায়েন্টের কাছে 'ফাঁস'।


2

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

Do I put the Models in the Domain layer?

হ্যাঁ, আপনার মডেলগুলি ডোমেনে রাখা যেতে পারে

Where would I put my Repository and mappings of DB Object to Domain Object?

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

ViewModels also?

আপনার ভিউমোডেলগুলি আপনার ক্লায়েন্টের পাশে (স্তর) স্থাপন করা উচিত। আপনি আপনার মতামতের উপর নির্ভর করে এক বা একাধিক ডিটিও থেকে আপনার ভিউ মডেলগুলি তৈরি করতে পারেন।

সংক্রান্ত DDD , আমি এই সম্পর্কে পড়া এবং নির্মল আপনি কি সত্যিই ডোমেন চালিত নকশা প্যাটার্ন আছে প্রয়োজন সুপারিশ করবে। এখানে একটি আলোচনা রয়েছে যে সমস্ত সফ্টওয়্যার অ্যাপ্লিকেশনগুলির 95% "ডিডিডি ব্যবহারের জন্য এতটা ভাল নয়" বিভাগগুলিতে পড়ে।

সম্পাদনা করুন: উপরে রেফারেন্স যুক্ত করা হয়েছে, এবং ধন্যবাদ @ দেনের জন্য যান!


দয়া করে, ভোট দেওয়ার সময় মন্তব্য করুন।
ইউসুভভ

1
ডিডিডি ফ্যানবয়রা সর্বত্র এটি ব্যবহার করতে চায়। সম্পর্কিত লিঙ্ক: স্ট্যাকওভারফ্লো
ডেন

@ দিন, লিঙ্কের জন্য আপনাকে ধন্যবাদ! আমি এটি সন্ধান করার পরিকল্পনা ছিল।
ইউসুবভ

1

আমরা কোথায় যাচ্ছি তা আবিষ্কার করার আগে, প্রতিটি স্তরটি কী করা উচিত সে সম্পর্কে কথা বলি।

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

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

আমি আমার প্রকল্পটি এভাবে রাখি:

 project.Views
 project.ViewModel
 project.Model
 project.DataStructs

এবং এই স্তরটি প্রয়োজনীয় হিসাবে যুক্ত করা যেতে পারে:

 project.Helpers

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

দাবি অস্বীকার: আমি কোনও ডিডিডি বিশেষজ্ঞ নই, তবে আমি সাধারণ বক্তব্যটি বুঝতে পারি এবং পদ্ধতির মান দেখতে পাই।

আপনার ডোমেনটি এমন সমস্যা সেট হতে চলেছে যা আপনি বিবেচনা করছেন। ডোমেন মডেল ViewModels যা আপনি তৈরি করতে প্রাথমিকভাবে মিলা করতে যাচ্ছি; ভিউজের মধ্যে কিছুটা; এবং মডেল / ডেটাস্ট্রাক্টসের মধ্যে একটি ছোট অংশ।

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

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

আপনার প্রশ্নে:

  1. এমভিভিএমের উপরে ওভারলে ডিডিডি করার চেষ্টা করবেন না। এটা ঠিক কাজ করে না। ডিডিডি কোনও লেআউট প্যাটার্ন নয়, এটি আপনার সামগ্রিক সমস্যা দেখার জন্য একটি পদ্ধতির।
  2. সংগ্রহস্থল এবং ম্যাপিংস উভয়ই প্রজেক্টে থাকবে। ডেটা বা প্রকল্প od মডেল যথাযথ।
  3. আপনি প্রকল্পটি কল করতে না চাইলে UI নামে একটি স্তর নেই Don't
  4. বিজনেস লজিক ভিউ-মডেলটিতে যাবে।

1
ঠিক আছে, কিছু, সম্ভবত অজ্ঞ, প্রশ্নগুলি অনুসরণ করুন। (1) আপনি কি তাদের প্রত্যেককে একটি পৃথক প্রকল্প বা কেবল ফোল্ডার (উদাহরণস্বরূপ প্রকল্প.ভিউ ইত্যাদি ইত্যাদি) তৈরি করবেন? (২) ডেটাস্ট্রাক্টস হ'ল আপনি যেখানে * .dbML বা প্রকল্প.ডেটা রাখবেন? (3) সুতরাং, আপনার মতে, আমার কাছে কোন প্রজেক্ট নেই? ডোমেন? আমি দেখেছি যে কয়েকবার ব্যবহৃত হয়েছে তাই আমি জিজ্ঞাসা করি।
পাল্টা প্রতীক পালাদিন

@ রিফ্র্যাকডপালদিন - ১) প্রকল্পের মধ্যে কেবল ফোল্ডার। আপনি একটি তর্ক করতে পারেন যে ডেটা এর নিজস্ব প্রকল্প হতে হবে। রক্ষণাবেক্ষণের দিক থেকে, উভয় দিকই সমান। 2) হ্যাঁ, ঠিক 3) না, আমার কাছে একটি। ডোমেন ফোল্ডার নেই। আইএমও, আমাদের কাজটি ব্যবসায়ের সমস্যা ডোমেনে অ্যাপ্লিকেশনটি ম্যাপ করা। সুতরাং ডোমেনটি প্রকল্পের সমস্ত স্তরগুলিতে প্রবেশ করে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.