এএসপিএনটি 5 এবং ইএফ 7-এ কি আর স্টোরগুলির দরকার হয়?


9

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

প্রশ্ন: আমি কিছু গবেষণা করছিলাম এবং কেউ দেখিয়েছিল যে ডিবিসিএনটেক্সট ক্লাসের লাইন 24 বলেছে

ডিবিকনটেক্সট হ'ল ইউনিট অফ ওয়ার্ক এবং সংগ্রহস্থল নিদর্শনগুলির সংমিশ্রণ।

এর অর্থ কি এই যে আমাদের আর কোনও রিপোজিটরিতে EF বিমূর্ত করা এবং তারপরে এটি নিয়ন্ত্রণকারীগুলিতে ইনজেক্ট করতে ইন্টারফেস এবং ইন্টারফেস ব্যবহার করার দরকার নেই?

গিথুব-এ আসল পোস্ট: https://github.com/aspnet/EntityFramework/issues/4899

আমি এটি জিজ্ঞাসা করার কারণটি হ'ল আমি এমন একটি জায়গায় toোকা যাচ্ছি যেখানে আমি getById, GetByName, GetWithIncludesABC, GetWithIncludes123 ইত্যাদি ইত্যাদির মতো ভাণ্ডারগুলিতে প্রচুর পদ্ধতি যুক্ত করছি এবং মনে হচ্ছে এটি আমার মনে রেপোটিকে নষ্ট করছে seems


1
রোয়ানমিলার যে উত্তর দিয়েছিল তা সম্পর্কে আপনি কী ভাবেন ? আমার কাছে একেবারে যুক্তিযুক্ত বলে মনে হচ্ছে।
রবার্ট হার্ভে

@ রবার্তাহারভে হ্যাঁ এটি একটি ভাল উত্তর ছিল তবে আমি দেখতে চাই যে আমি সংগ্রহশালার সিদ্ধান্ত নেওয়ার আগে অন্যরা কীভাবে বিষয়টি নিয়ে
অনুভূত হয়

এছাড়াও লস্টেচিজ.com/jimmybogard/2009/09/11/wither-the-repository দেখুন যেখানে বোগার্ড একইভাবে তর্ক করে।
mcknz

EF (এবং অন্যান্য ওআরএম) কেন সংগ্রহস্থল নয় তা আমার গ্রহণ ।
এরিক কিং

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

উত্তর:


12

আপনি যদি কোনও সংগ্রহস্থলে পদ্ধতি যুক্ত করে থাকেন

GetById 
GetByName 
GetWithIncludesABC
GetWithIncludes123

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

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

আপনি যেখানে আলাদা রেপোজিটরি স্তর রাখতে চান তা কেবলমাত্র বাধ্য করার কারণেই আপনি সেই সংগ্রহস্থল স্তরটিকে উপহাস করতে পারেন বা পরীক্ষার উদ্দেশ্যে অন্য কোনও ডেটা উত্সকে বিকল্প হিসাবে স্থাপন করতে পারেন।


তবে তা নিয়ে ব্যঙ্গ করতে dbset ... msdn.microsoft.com/en-us/library/dn314429(v=vs.113).aspx
S1r-Lanzelot

4

রবার্ট হার্ভে তার উত্তরে বলেছিলেন:

আপনি যেখানে আলাদা রেপোজিটরি স্তর রাখতে চান তা কেবলমাত্র বাধ্য করার কারণেই আপনি সেই সংগ্রহস্থল স্তরটিকে উপহাস করতে পারেন বা পরীক্ষার উদ্দেশ্যে অন্য কোনও ডেটা উত্সকে বিকল্প হিসাবে স্থাপন করতে পারেন।

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

যদি আপনি "ভাণ্ডার" এর বাইরে EF কোয়েরি এপিআই ব্যবহার করে থাকেন তবে কোনও ধরণের পরিষেবা অবজেক্টের মতো, আমি বলব আপনি প্যাটার্নটি ভঙ্গ করছেন।

এখন, যদি আপনার অন্যান্য কোডের মধ্যে কার্যকারিতার মতো ডাটাবেসের কোনও বিপর্যয়কর সমস্যা না হয় এবং আপনি গ্যারান্টি দিতে পারেন যে আপনার ভবিষ্যতে আপনার কিছু সিআরইউডি অপারেশন একটি ওয়েব পরিষেবাতে স্থানান্তরিত করতে হবে না, তবে EF সরাসরি ব্যবহার করা হবে ঠিক আছে.

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


পরিষেবা স্তর দিক থেকে কীভাবে সংগ্রহস্থল পৃথক হয়? আমি যদি আইকুয়ারেবল ফিরিয়ে দিচ্ছি তা থেকে আমি কী সন্ধান করতে পারি তবে আমি মূলত একটি স্টোর ব্যবহার করে আইএমনুয়ারেবল ফিরিয়ে দিচ্ছি যদি একটি রিপোজিটরি হয় Rep এটা কি সঠিক? পরিষেবা স্তর এবং সংগ্রহস্থলের ধরণগুলি কি একই রকম?
লরেন.ডোরেজ

@ লরেন.ডোরেজ: একটি পরিষেবা স্তরটিতে ব্যবসায় ডোমেন-নির্দিষ্ট পদ্ধতি রয়েছে, যেমন TransferFunds()এবং BuildWidget()। একটি সংগ্রহস্থলে কেবল CRUD পদ্ধতি রয়েছে।
রবার্ট হার্ভে

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

সার্ভিস লেয়ারটি সরাসরি EF এর পরিবর্তে আপনার কাছে থাকলে, রেপোজিটারি অ্যাক্সেস করতে পারে।
রবার্ট হার্ভে

@ রবার্টহার্ভে আপনি উপরের পান পদ্ধতিগুলি ব্যবহার করে আমাকে একটি উদাহরণ দেখাতে পারেন? আমি এখন কিছুটা বিভ্রান্ত দুঃখিত।
লরেন.ডোরেজ

1

সংগ্রহস্থলগুলির প্রয়োজন নেই বলে মনে হয় - মাইক্রোসফ্ট তাদের নমুনা ব্যাকএন্ড মাইক্রোসার্চেস অ্যাপ্লিকেশনগুলিতে সেগুলি ব্যবহার করে না:

https://github.com/Microsoft/BikeSharing360_BackendServices

কানেক্ট () এ নমুনা বাইক শেয়ারিং অ্যাপটি প্রদর্শিত হয়েছিল; ইভেন্ট (আমার ধারণা এটি এপিআই প্রকল্পগুলির জন্য একটি টেম্পলেট হিসাবে ব্যবহার করা যেতে পারে):

https://blogs.msdn.microsoft.com/visualstudio/2016/12/14/connectdemos-2016-bikesharing360-on-github/

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