পুনরাবৃত্তি কোডটি কীভাবে সংগঠিত করবেন?


11

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

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

আমি এগুলি একরকম ঘনীভূত করতে চাই এবং আমি সত্যিই কিছু নির্দেশনা ব্যবহার করতে পারি।

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

2
মেটা থেকে এখানে কী স্থানান্তরিত হয়েছিল? এসও থাকা উচিত।
জোশ কে

1
@ জোশ স্ট্যাক ওভারফ্লো কোডের নির্দিষ্ট সমস্যার সাথে সরাসরি সম্পর্কিত প্রশ্নগুলির জন্য। প্রোগ্রাম এবং ওয়ার্কফ্লো ডিজাইন এখানে বিষয়বস্তু

@ মার্ক: এটি খুব আত্মনিয়ন্ত্রণমূলক বলে মনে হচ্ছে না, কারণ সেখানে সহজেই দেওয়া হয়েছে এমন একটি আদর্শ "সেরা অনুশীলন" সমাধান। আমি কোনও এমএস লোক নই তাই জটিলতাটি কী তা আমার কোনও ধারণা নেই তবে আমি এই ধারণাটিকে ঝুঁকির মধ্যে ফেলব যে এটিকে সর্বোত্তমভাবে উত্তর দেওয়া হবে না sub
জোশ কে

একমত। এটি এসও বন্ধ হয়ে যাবে।
ওয়াল্টার

1
এটি ইতিমধ্যে এখানে
ChrisF

উত্তর:


3

নিরাপদে পরীক্ষা ছাড়াই পুনরায় ফ্যাক্টরিং করা কঠিন এবং বিপদজনক।

আমি এর মাধ্যমে শুরু করব:

  • পরীক্ষার কেসগুলি গুলি লিখিত যা সেই ফর্মগুলিতে এবং প্রত্যাশিত আউটপুটটিতে বিভিন্ন ধরণের ইনপুট আচ্ছাদন করে। মনে হচ্ছে এগুলি আসলে খুব বেশি সময় নেয় না কারণ আপনি মনে করেন যে এই ফর্মগুলির বেশিরভাগ কার্যকারিতাতে অভিন্ন বা এটির কাছাকাছি রয়েছে।

  • 100 বা ততোধিক ফর্মগুলির বিরুদ্ধে সেই পরীক্ষার কেসগুলি চালিত করুন (কোডের রাস্তাগুলি সনাক্ত করতে আপনাকে সহায়তা দেওয়ার জন্য কোড কভারেজ স্যুইচ করুন)।

এরপরে আপনি কীভাবে নিরাপদে পুনরায় ফ্যাক্টর তৈরি করতে পারবেন তা দেখার মতো অবস্থানে রয়েছেন, তারপরে আপনি (উদাহরণ):

  • আপনার কোড সদৃশ সনাক্তকরণ সরঞ্জামটি চালান (এটি কী বলা হয় তা নিশ্চিত নয় N নেট, জাভাতে আমাদের সিপিডি রয়েছে)। তাত্ক্ষণিকভাবে 13 টি অভিন্ন ফর্ম সরান। এখন আবার পরীক্ষা চালান - হ্যাঁ! 11 টি ফর্ম বাদে তারা সবাই পাস করে, ঠিক আছে, তাই আমরা এখনও এটি মুছতে পারি না।

  • সমস্ত স্থানীয় ইমেল ফর্ম্যাটিং কোড সরান এবং একটি সাধারণ ইমেল প্রসেসিং মডিউলটিতে কল করার জন্য সমস্ত ফর্ম পান। পরীক্ষাগুলি চালান, তারা সকলে একটি ছাড়াই উত্তীর্ণ হন, এইচএমএমএম ঠিক আছে .... ইউটিএফ -8 অক্ষর, জেনেরিক মডিউলে এটি ঠিক করুন, আবার পরীক্ষা চালান, হ্যাঁ আমরা সবাই ভাল!

পাখলান পুনরাবৃত্তি.


2
+1 রিফ্যাক্টরিংয়ে কীভাবে যোগাযোগ করা যায় সে সম্পর্কে ইঙ্গিতগুলির জন্য মাইকেল মেশাদার পালকগুলি লেগ্যাসি কোডটি কার্যকরভাবে কাজ করছে দেখুন amazon.com/dp/0131177052
মাইকেল ব্রাউন

ওহহহ ভাল রেফারেন্স - আমি বইটি পছন্দ করি।
মার্টিজ ভার্বার্গ

0

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

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

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


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

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

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