ফর্ম উত্তরাধিকার কেন এড়ানো উচিত?


9

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

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

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

এবং এটা ঠিক ... আমার ধারণা। এটি ঠিক, আমার মনে হচ্ছে আমি যা করছি তার "নিজের" নেই, এই কোডটি যা আমি কেবল ডিজাইনারের মাধ্যমে সংশোধন করতে পারি তা হ্যাককে আমার থেকে বিরক্ত করে। প্রতিবার যখন আপনি একটি বোতামটি একটি ফর্ম থেকে অন্য ফর্মটিতে "ঠিক আছে" অনুলিপি করেন (কখনও কখনও তার ভাইয়ের সাথে "বাতিল করুন"), আপনি আসলে কোডটির নকল করছেন, এবং এটি কি পাপ নয়? DRY, নিজেকে পুনরাবৃত্তি করবেন না, পোপ বলেছেন ।

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

আমার কাছে যে অনেক অন্য কিছু আমি কখনো WinForms মধ্যে ডিজাইনার সঙ্গে কাজ করেছি চেয়ে বেশি কোড পুনঃব্যবহারের, এবং এটা এমনকি হার্ড ছিল না, এবং কোড একটি 200 লাইন পদ্ধতি সঙ্গে বিশৃঙ্খল নয় আমার কোন নিয়ন্ত্রণ, আমি পারেন যে আমার পছন্দ মত মন্তব্যগুলি রাখুন, তারা কোনও ডিজাইনার দ্বারা ওভাররাইট করা হবে না। আমি অনুমান করি যে এটি কেবল নিদর্শন এবং আর্কিটেকচারের বিষয়, যা আমাকে এই লিঙ্কটিতে নিয়ে এসেছিল: উইন্ডোজ ফর্মগুলির জন্য সেরা নকশা যা সাধারণ কার্যকারিতা ভাগ করে নেবে , যেখানে আমি বুঝতে পেরেছিলাম যে আমি সেখানে উপস্থিত ছিলাম, উত্তরটি ছাড়া , আমি ঠিক ঠিক কী করছেন, তবে এটি ডিজাইনার বিবেচনার কারণে ফর্ম উত্তরাধিকারের বিরুদ্ধে পরামর্শ দিচ্ছে। এই অংশটি আমি পাই নাকারণ কোড গঠন বিবেচনার, ফর্ম ও নিয়ন্ত্রণ উত্তরাধিকার সঙ্গে শুভেচ্ছা বিশেষত, যা আমি অন্যান্য এড়াতে চেয়ে কোনো কারণ দেখতে ভাল এটা ডিজাইনার ভঙ্গ

আমরা সকলেই কেবল অলস হতে পারি না, তবে আমি কোন অংশটি মিস করছি?


আমি বুঝতে পারছি না। আপনি কি বোঝাচ্ছেন যে আমাদের ভিজ্যুয়াল ডিজাইনার ব্যবহার করা উচিত নয় এবং সমস্ত জিইআইআই কোড হাতে লেখা উচিত নয়?
ইউফোরিক

প্রাক .NET ফর্মের উপর থাকা সমস্ত বস্তু নিয়ন্ত্রণকারী কোডটি কোথায় ছিল?
জেফো

1
@ জেফো যে উত্তরাধিকারের কোডটি আমি নিয়ে এসেছি তা বিচার করে, আমি ঠিক ফর্মটিতে বলব, অ্যাড-হক ইনলাইন এসকিউএল এবং ব্যবসায়িক যুক্তির মধ্যে কোথাও। পয়েন্টটি হ'ল, উইনফরমগুলি হ'ল নেট। সুতরাং যদি ডিজাইনার আজকাল "খারাপ কোড" এবং "খারাপ কোডিং অভ্যাস" এর মতো গন্ধ নিয়ে ভালভাবে কাজ করে এবং আপনি যখন জিনিসগুলি কাঠামোবদ্ধ করা শুরু করেন তখন প্রকৃতপক্ষে বিরতি ঘটে তবে আমি বলি যে ডিজাইনারকে ফেলে দিন এবং ফর্মগুলি সেগুলি (শ্রেণি!) হিসাবে বিবেচনা করুন .. এবং কীভাবে C # তে কোনও ইউআই স্তরকে কোডিং করা যায় তবে যেভাবেই এক্সটজেএস-এ কোনও ইউআই স্তরকে কোডিং করা থেকে আলাদা? উইনফোর্মে এটি করা "ক্লান্তিকর" কারণ "ওহে চেহারা ডিজাইনার আছে"? কোনও এক্সট্রাএস ইউআই কোডিং কি ক্লান্তিকর?
ম্যাথিউ গুইনডন

আমি অন্য ব্যবহারকারীর উদ্ধৃতি দিতে যাচ্ছি: কোডকাস্টার; ইভেন্ট ইভেন্ট হ্যান্ডলারটি GUI কে আপনার ব্যবসায়িক যুক্তির সাথে সংযুক্ত করতে বোঝায়। আপনার যদি কোনও ব্যবহারকারীর নাম এবং একটি অ্যাড বোতাম প্রবেশ করানোর জন্য একটি পাঠ্যবক্স থাকে তবে অ্যাড বোতামটি ক্লিক করে কেবল _userRepository.AddUser (ইউজারনেম টেক্সটবক্স.টেক্সট) কল করা উচিত। আপনি ইভেন্ট হ্যান্ডলারগুলিতে ব্যবসায়ের যুক্তি চান না। stackoverflow.com/questions/8048196/…
পিটার বি

@ পিটার কি আপনার উপস্থাপনা স্তরটিতে ডাল নির্ভরতা রাখে না?
ম্যাথিউ গুইনন

উত্তর:


9

আমি বিভিন্ন দৃষ্টান্তের সাথে আপনার বিরোধিতা করব: উত্তরাধিকারের চেয়ে পছন্দসই রচনা।

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


ভাল বেস ফর্মটিতে কেবল প্যানেল 2 সহ একটি স্প্লিটকন্টেইনার রয়েছে, এতে ফ্লোলয়েটপ্যানেল থাকে BottomPanelএবং সাধারণ ওকে / বাতিল / প্রয়োগ / বন্ধ আচরণগুলি হোস্ট করে; প্যানেল 1 এ প্যানেল 1 সংশোধিত (সাধারণ "নির্দেশাবলী" লেবেল, বা মেনুগুলি, সরঞ্জামদণ্ডগুলি যা কিছু উপরে যায়) হোস্ট করার জন্য এবং প্যানেল 2 নামে একটি সুরক্ষিত প্যানেল ধারণ করে একটি স্প্লিটকন্টেইনার রয়েছে MainContent; প্রতিটি প্রকৃত বাস্তবায়ন কীভাবে এটি পূরণ করবে তা স্থির করে। সমস্ত বিষয়বস্তু বাস্তবায়নে ইনজেকশনের ব্যবস্থা করা যেতে পারে এবং হ্যাঁ, এটি সময়, ভাল পয়েন্ট বাঁচানোর জন্য ডিজাইনারের সাথে তৈরি একটি ব্যবহারকারীর নিয়ন্ত্রণ হতে পারে .. তবে নিজেই ফর্মটির কী হবে?
ম্যাথিউ গুইন্ডন

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

2
আপনার যদি অর্ধেক শালীন নকশা থাকে তবে 'স্কেল সহ সমস্যা' বিদ্যমান নেই We আমাদের একটি প্রকল্প রয়েছে যেখানে আমি কয়েকশ ফর্ম নিয়ে কাজ করি cons ধারাবাহিকতা এবং সাধারণ কার্যকারিতা সরবরাহ করার জন্য আমরা ফর্মের উত্তরাধিকারকে ভারীভাবে ব্যবহার করি এবং আমাদের কখনও কোনও সমস্যা হয়নি've এটি সহ
ম্যাসন হুইলার

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

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

2

এর বেশিরভাগটি প্রযুক্তির পছন্দের স্ট্যাকের সাথে আবদ্ধ।

উইনফোর্ডস এবং ডাব্লুপিএফ উভয়ই নেট নেট ইউআই ফ্রেমওয়ার্ক হতে পারে তবে আপনি কীভাবে শেষ লক্ষ্যটি অর্জন করবেন তার মধ্যে ব্যাপক পরিবর্তন হয়। নির্দিষ্ট দৃষ্টান্তগুলি প্রযুক্তির মধ্যে সবেমাত্র সূক্ষ্ম হয় তবে অন্যরা তা করে না এবং আপনার কোনও দৃষ্টান্ত চেষ্টা করা বা জোর করা উচিত নয় কারণ আপনি মনে করেন যে এটি প্রতিটি কাঠামোর মধ্যে বিদ্যমান to এমভিভিএম ডাব্লুপিএফ / এসএল এবং এমভিসি ওয়েবফোর্মে এবং এ জাতীয় থেকে এএসপি.এনইটি-তে একটি পৃথক ধারণা। নির্দিষ্ট প্রযুক্তিগুলি নির্দিষ্ট উদাহরণগুলির সাথে আরও ভাল কাজ করে।

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


0

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

আরও ভাল বিকল্প হতে পারে এক বা একাধিক ইউজারকন্ট্রোল নিয়ন্ত্রণগুলিতে গ্রুপ সম্পর্কিত নিয়ন্ত্রণগুলি। এতে প্রাসঙ্গিক ডেটা putোকাতে আপনার কিছুটা যুক্তি প্রয়োজন।


0

আমি ম্যাসন হুইলারের সাথে পুরোপুরি একমত, যদিও তিন বছরে সম্ভবত তিনি নিজেই নিজের মত বদল করেছিলেন।

আইএলএম ডেলফি এক্সিকিউটেবল থেকে ডাব্লুইইবিতে স্থানান্তরিত করার বিকল্পগুলির সন্ধানের চেষ্টা করছি।

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

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

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