আমরা কি কোনও বৃহত কোডবেসের দূরবর্তী অংশের মধ্যে ডেটা প্রবাহ যুক্ত করা সহজ করে তুলতে পারি?


10

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

Http://www.yosefk.com/blog/i- ਵੰਤ-a-struct-linker.html এ ইয়োসি ক্রেইনিনের ব্লগ পোস্ট থেকে সম্পর্কিত উদ্ধৃতি :

আপনার কাছে এমন এক ধরণের ডেটা স্ট্রাকচার রয়েছে যা আপনি প্রচুর পরিমাণে পাস করেন। শীঘ্রই, কাঠামো সম্পর্কে সর্বাধিক মূল্যবান জিনিসটি এটি রাখে এমন ডেটা নয়, তবে এটি নিয়ন্ত্রণের লোমশ প্রবাহের মাধ্যমে সমস্ত উপায়ে উপলব্ধ।

গ্লোবাল ভেরিয়েবলগুলি কোডকে দূরবর্তী কোডগুলিতে "চিৎকার" দেওয়ার এক ক্লাসিক উপায়, তবে তারা সমস্যাযুক্ত বলে পরিচিত। গতিশীলভাবে স্কোপযুক্ত ভেরিয়েবলগুলি আরও সীমাবদ্ধ উপায়, তবে সেগুলিও সমস্যাযুক্ত।

এই সমস্যা সমাধানের লক্ষ্যে কি কোনও প্রোগ্রামিং ভাষার গবেষণা রয়েছে? স্থির চেকিং, সহজ ইউনিট টেস্টিং এবং অন্যান্য গুডিজ থাকা সত্ত্বেও আমরা কী কোনও বৃহত কোডবেসে ডেটার অপ্রত্যাশিত প্রবাহ যুক্ত করা সহজ করে তুলতে পারি?


আপনি যেভাবে আপনার প্রশ্নের মুখোমুখি হচ্ছেন আমি অনুমান করি যে আপনার একক প্রক্রিয়াটি মনে রেখে ডেটা প্রবাহ রয়েছে, কোনও আন্তঃসম্পর্কিত যোগাযোগ নেই। সুতরাং আপনি কী ধরণের সমস্যা দেখেন যা স্ট্যান্ডার্ড ইভেন্ট প্রেরক / শ্রোতার প্রক্রিয়া দ্বারা সমাধান করা যায় না?
ডক ব্রাউন

একটি স্বীকৃত উদাহরণ: ধারণা করুন যে আপনার সিস্টেমে গভীরভাবে এমন কিছু কোড রয়েছে যা ব্যবহারকারীকে একটি পাঠ্য বার্তা প্রেরণ করে। এবং আপনি একটি নতুন প্রয়োজনীয়তা পেয়েছেন যে বার্তার পাঠ্যটি ব্যবহারকারীর টাইমজোনটিতে বর্তমান সময়ের উপর নির্ভরশীল। কলস্ট্যাকটি দেখতে এরকম দেখাচ্ছে: কিছু কোড যা ব্যবহারকারীর টাইমজোনটি জানে, এমন পদ্ধতিতে কল করে যে এমন পদ্ধতিতে কল করে যে (... 15 বার পুনরাবৃত্তি করুন) এমন পদ্ধতিতে কল করে যা বার্তা পাঠ্য উত্পন্ন করে। এটি আমার স্ট্যান্ডার্ডগুলির দ্বারা একটি সাধারণ উদাহরণ, কারণ এটিতে যোগাযোগটি কেবল নীচের দিকে জড়িত তবে আপনার তুচ্ছ পরিবর্তন করতে আপনাকে অবশ্যই 15 টি পদ্ধতির স্বাক্ষর পরিবর্তন করতে হবে।
ভ্লাদিমির স্লেপনেভ

ঠিক আছে, আমি অনুমান করি যে কী হতে পারে ডেটা প্রবাহকে স্পষ্টভাবে মডেল করতে এবং ডেটা প্রবাহ থেকে পৃথক উপাদান আলাদা করা। জার্মান সফ্টওয়্যার ইঞ্জিনিয়ার এই বিষয়টি সম্পর্কে অনেক কিছুই লিখছেন, বেশিরভাগ নিবন্ধ জার্মান। এখানে তার ইংরেজিতে একটি এন্ট্রি নিবন্ধটি দেওয়া হয়েছে: geekswithblogs.net/theArchitectsNapkin/archive/2011/03/19/…
ডক ব্রাউন

আমি মনে করি একটি সিঙ্গলটন অভ্যন্তরীণ API সাহায্য করতে পারে। এটি সমস্ত অ্যাপ্লিকেশন জুড়ে অ্যাক্সেসযোগ্য এবং সমস্ত ডেটা পুনরুদ্ধার যুক্তি encapsulate হবে।
সুপারম

উত্তর:


1

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

নেটওয়ার্ক জুড়ে আলগা সংযোগের জন্য, সংস্থাগুলি এসওএপি, আরএসটি, এজেএক্স, বা আরপিসির সাথে নিয়মিত দূরবর্তী পদ্ধতিতে কলিংয়ের সাথে ওয়েব পরিষেবাদি ব্যবহার করতে পছন্দ করে। জাভাতে আপনি JAX-WS বা .NET WCF ব্যবহার করতে পারেন বিতরণ পরিষেবাগুলি তৈরি করতে। তারপরে আপনি সেগুলি ক্লায়েন্ট হিসাবে কোনও ভাষা বা প্ল্যাটফর্ম থেকে কোনও সার্ভিস বাসে বা "ডেটা প্রবাহ" এ যুক্ত করুন। রুবি, পাইথন, স্কেলা, জাভা, সি #, ... কিছু।

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

যদি আপনার প্রকল্পটি কোনও নেটওয়ার্কের উপর জোর দেয় না, যদিও, স্কালা, আক্কা, নোডজেএস ইত্যাদির মতো ভাষা রয়েছে that যা একক অ্যাপ্লিকেশনের মধ্যে ডেটা প্রবাহের জন্য প্রণীত। তারা জটিল প্রকল্পগুলির জন্য পূর্বে উল্লিখিত কয়েকটি বা সমস্ত প্রযুক্তির সাথেও কাজ করে। উদাহরণস্বরূপ, স্কালা জ্যাক্স-আরএস আরএসটি পরিষেবাগুলির সাথে কোনও ডেটা উত্স থেকে "গ্লোবাল ডেটা" সাজানোর জন্য ব্যবহার করা যেতে পারে এবং আইওসি অভ্যন্তরীণ তারের জন্য স্প্রিং রয়েছে। JBoss, .NET, এবং MuleESB এর মতো GUI সরঞ্জামগুলিতে অনেকগুলি ব্যবসায়িক প্রয়োগ বা ওয়ার্কফ্লো ফ্রেমওয়ার্ক রয়েছে। বিকাশে, Eclipse এবং Netbeans আপনাকে ভিজ্যুয়াল ফ্লো চার্ট স্ক্রিনে পরিষেবাগুলিকে টেনে আনতে এবং ছাড়তে দেয়।

অবশেষে, জাভাতে সিঙ্গেলটন মটরশুটি রয়েছে। রান-টাইমে আপনার পদ্ধতিগুলি সামঞ্জস্য করার জন্য, প্রক্সি বা প্রতিবিম্ব ফ্রেমওয়ার্কগুলি ব্যবহার করুন। তবে সত্যই, 1999 এর মতো।

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


বার্তাগুলির সারিগুলি ওভারকিল হতে পারে তবে বার্তাটি হ'ল বোর্ড জুড়ে ঘটনাগুলি সরিয়ে দেওয়ার সঠিক উপায়। জাভা বার্তা চালিত বিন (MDB) ব্যবহার করে এবং এটি আপনার প্রোগ্রামকে একে অপরের সাথে 'কথোপকথন' প্রেরণ বা গ্রহণ করার অনুমতি দেয় allow অ্যাসিঙ্ক্রোনাস বোনাসের জন্য আপনি এটি এইভাবে করতে পারেন।
সেনোর বিকাশকারী

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

0

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

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

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


উত্তরের জন্য ধন্যবাদ! আমার কাছে মনে হয় প্রোগ্রামিং ভাষার গবেষণা এই সমস্যাটিতে সহায়তা করতে পারে। উদাহরণস্বরূপ, যদি কোডটি কোনও বিশ্বব্যাপী ডাটাবেস বা স্ট্যাশেড সিঙ্গলেটস থেকে কিছু ডেটা পড়েন তবে কোন ডেটা প্রয়োজন তা সম্পর্কে একটি স্থিতিক / ঘোষণামূলক গ্যারান্টি থাকতে পারে।
ভ্লাদিমির স্লেপনেভ

-1

আপনি যদি শব্দগুলি ব্যবহার করেন (বা উদ্ধৃতি)

hairy flow of control

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


ডাউনটা কেন? উদ্ধৃতিটি সেই অনুপস্থিতি অনুপস্থিত যা আমার দৃষ্টিভঙ্গিকে হুবহু সমর্থন করে: "(এটি সম্ভবত" অ্যান্টিপ্যাটার্ন "বা" কোড গন্ধ "হিসাবে শ্রেণীবদ্ধ করা হয়েছে এবং এর মতো উপযুক্ত বৃত্তে এর একটি নাম রয়েছে তবে আমি জানি না, তাই আমি করব না এটি নামহীন ছেড়ে দিন) "
ব্যবহারকারী 127749

2
এটি সত্যই কোনও প্রশ্নের উত্তর নয়, এটি সম্ভবত ডাউনভোটের কারণ
ড্যানিয়েল গ্রেটজার

তারপরে আমাকে এই প্রশ্নটি পুনরায় জবাব দেওয়া যাক: সফটওয়্যার ডিজাইনের অন্যতম মৌলিক নীতি লঙ্ঘনকারী কোডের জঞ্জালটিকে পূর্বাবস্থায়িত করার কোনও যাদু কৌশল আছে: কেআইএসএস (এটিকে সহজ, বোকা রাখুন)? কৌতুকটি যাদু নয়, এটি হয় এমন একটি প্রোগ্রামার যা প্রতিস্থাপন করতে পারে না কারণ তিনি স্পষ্টতই না সমস্ত বিবরণ জানেন (যা দীর্ঘমেয়াদে সংস্থাটি মেরে ফেলবে), বা কোড বেসটির পুনর্গঠন করতে পারে। দুর্ভাগ্যক্রমে, অনেক সংস্থা প্রাথমিকভাবে সঠিক কোড ডিজাইনের জন্য যত্ন নেয় না বা পরিণতিগুলি বুঝতে পারে না, তারপরে তাদের কোডটি কমপক্ষে একবার আবার লিখতে হবে, অনেকগুলি এমনকি এটি বহুবার পুনরায় লিখতে পারে ...
ব্যবহারকারীর 127749
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.