ইন্টারফেস এবং async ডিজাইনিং


9

ধরুন আমি এর IFolderRepositoryমতো পদ্ধতিগুলির সাথে ইন্টারফেস তৈরি করেছি :

IEnumerable<Folder> GetAllFolders();
Folder GetFolderWithId(int id);
void AddFolder(Folder newFolder);
void ModifyFolder(Folder folderToModify, Folder folderAfterModification);
void RemoveFolder(Folder folderToRemove);

এবং আমি বাস্তবায়ন করেছি DatabaseFolderRepositoryএবং বলি CacheFolderRepositoryDecorator। এখন 'কয়েকশ লাইন পরে' আমি স্কাইড্রাইভ ফোল্ডারগুলির কার্যকারিতা যুক্ত করতে চাই তাই আমি যুক্ত করতে প্রস্তুত SkyDriveFolderRepository। দুর্ভাগ্যবশত যখন DatabaseFolderRepositoryব্যবহৃত বাস্তবায়ন সমলয় পদ্ধতি ডাটাবেসের সাথে কথা বলার, স্কাইড্রাইভ এক অনেকটা ব্যবহার asyncএবং await। এমন ক্ষেত্রে কী করবেন? অকার্যকর পদ্ধতির ক্ষেত্রে এটি চিহ্নিত করে অ্যাসিঙ্ক কোনও সমাধান নয় (ব্যতিক্রম হ্যান্ডলিংয়ের প্রয়োজন)। ফিরতে Task<T>কি আমার ইন্টারফেস পরিবর্তন করা উচিত ? নিশ্চিত যে এটি উপরের উদাহরণে কাজ করবে তবে তারা কেবলমাত্র 2 ইন্টারফেস বাস্তবায়ন ক্লাস। অথবা আমার বেশিরভাগ ইন্টারফেসের Taskরিটার্ন টাইপ থাকা উচিত (আপনার বিপরীতে এটি নিয়মের দরকার নেই)?


আপনার প্রশ্নের সাথে সম্পর্কিত নয় (দুঃখিত) তবে আপনার যদি একটি IFolderইন্টারফেস থাকে তবে আপনি কেন আপনার Folderসমস্ত পদ্ধতিতে কংক্রিটের প্রয়োগের উপর নির্ভর করেন ?
কনরাড মোরাওস্কি

1
আপনার কলার কি আশা করে? ত্রুটি কোড, ব্যতিক্রম, কলব্যাকস বা কিসের উপর ভিত্তি করে আপনি যে এপিআই প্রয়োগ করেছেন তা কি? আপনি এটি পরিবর্তন করতে পারেন?
ডেভিড.পিএফএক্স

@ কনরাডমোরাউস্কি এটি টাইপ-ত্রুটি ছিল - দুঃখিত। এটি ব্যাতিক্রমের ভিত্তিতে এবং আমি এটি পরিবর্তন করতে পারি না।
ফেক্স

উত্তর:


10

অ্যাসিঙ্ক্রোনাস অনুশীলনগুলি সম্পর্কে আপনি সম্ভবত এই এমএসডিএন নিবন্ধটি ভাল পঠন করতে পাবেন।

তুমি জিজ্ঞেস করেছিলে:

দুর্ভাগ্যবশত যখন DatabaseFolderRepositoryব্যবহৃত বাস্তবায়ন সমলয় পদ্ধতি ডাটাবেসের সাথে কথা বলার, স্কাইড্রাইভ এক অনেকটা ব্যবহার asyncএবং await

Async All the Wayআমি এখানে লিঙ্কিত এমএসডিএন নিবন্ধের উপ-বিভাগটি আপনার পরিস্থিতির জন্য উপযুক্ত।

বিশেষত, Task.Wait বা Task.Result কল করে অ্যাসিঙ্ক কোডটি ব্লক করা সাধারণত খারাপ ধারণা। এটি প্রোগ্রামারদের ক্ষেত্রে একটি সাধারণ সমস্যা যারা "আঙ্গুলগুলি ডুবিয়ে" অ্যাসিক্রোনাস প্রোগ্রামিংয়ে পরিণত করছেন, তাদের অ্যাপ্লিকেশনটির কেবলমাত্র একটি ছোট অংশ রূপান্তর করছেন এবং এটিকে একটি সিঙ্ক্রোনাস এপিআইতে মুড়ে রাখছেন যাতে অ্যাপ্লিকেশনটির বাকি অংশগুলি পরিবর্তন থেকে পৃথক করা যায়। দুর্ভাগ্যক্রমে, তারা অচলাবস্থা নিয়ে সমস্যায় পড়ে।

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

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

অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং এমন একটি যেখানে আপনাকে পুরো ধারণাটি গ্রহণ করতে হবে এবং কেবল এটির সাথে যেতে হবে। টুকরোয়াল ভিত্তিতে "আপনার পায়ের আঙ্গুলগুলিকে ডুবিয়ে" দেওয়ার চেষ্টা করা অনেক জটিল হয়ে ওঠে ঠিক তখন সরাসরি লাফিয়ে।

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