ভিজ্যুয়াল স্টুডিও সমাধানগুলিতে ভাল অনুশীলন [বন্ধ]


10

আশা করি একটি আপেক্ষিকতা সহজ প্রশ্ন। আমি ভবনগুলির মধ্যে মেরামত করা ডিভাইসের ট্র্যাকটেবিলিটি তৈরি করতে একটি নতুন অভ্যন্তরীণ প্রকল্পের কাজ শুরু করছি।

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

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

এটি কোনও একক প্রকল্পে তৈরি করা, বা এগুলিকে পৃথক প্রকল্পে ভাগ করা ভাল?

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


1
আমি প্রকল্পের জন্য কী তা বোঝায় তার মধ্যে তাদের আলাদা করব।
রামহাউন্ড

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

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

উত্তর:


8

এটি প্রকল্পের আকারের উপর নির্ভর করে

আমি যে নির্দেশিকাগুলি ব্যবহার করতে চাইছি তা এখানে

  • একটি ছোট প্রকল্প, কয়েক মুঠো পৃষ্ঠা বা তারও কম সহ, আমি প্রায়শই একটি প্রকল্পে রাখি।

  • যদি ছোট প্রকল্পের ডেটা অ্যাক্সেস স্তরটি বৃহত বা জটিল হয় তবে আমি এটিকে তার নিজস্ব স্তরের মধ্যে আলাদা করতে পারি তবে অন্যথায় এটি কেবল তার নিজস্ব ফোল্ডারে বসে।

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

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

  • যদি আমি একাধিক প্রকল্প রেফারেন্স বস্তু (একই সেট প্রয়োজন আছে ViewModelBase, RelayCommandইত্যাদি), আমি শুধু ভাগ অবকাঠামো অবজেক্টের জন্য একটি প্রকল্প তৈরি করব।

  • আমার কাছে যদি প্রচুর পরিমাণে ভাগ করা কাস্টম শৈলী / টেম্পলেট / সংস্থান থাকে তবে আমি তাদের জন্য একটি প্রকল্প তৈরি করব।

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


কৌতূহলী, স্তরগুলি পৃথক করে আপনার কী কী রক্ষণাবেক্ষণের সমস্যা ছিল?
আয়ান

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

1
@ আইয়ান সবচেয়ে বড় সমস্যাটি হ'ল বেশিরভাগ ছোটখাটো পরিবর্তনগুলি, যেমন একটি একক ক্ষেত্র যুক্ত করার জন্য, আমাকে মডেল, ভিউ, ভিউমোডেল এবং ডএএল 4 টি পৃথক লাইব্রেরিতে সন্ধান করতে হবে। আমি সেই সময়ে যে প্রকল্পটি কাজ করছিলাম তা মোটামুটি বড় ছিল এবং নির্দিষ্ট ফাইলগুলি সন্ধান করার জন্য আমি যতটা সময় ব্যয় করি তার চেয়ে বেশি সময় নষ্ট করি। তারপর থেকে আমি তাই উদাহরণস্বরূপ কিছু সন্ধান-সম্পর্কিত যেমন সংশ্লিষ্ট বস্তু একসাথে পালন পরিবর্তিত করেছি, SearchView, SearchViewModel, এবং SearchResultModelসমস্ত একটি ফোল্ডারে একসঙ্গে দলবদ্ধ করা হবে এবং আমি পেয়েছি এটা অ্যাপ্লিকেশন বজায় রাখার জন্য সহজ করে তোলে।
রাচেল

@ আমি আবার নির্ভরতা সংক্রান্ত সমস্যা এবং বৃত্তাকার রেফারেন্সগুলিতে চলার বিষয়টিও স্মরণ করি, কারণ আমার সর্বাত্মক প্রচেষ্টা সত্ত্বেও অন্যদের রেফারেন্স করার জন্য কিছু স্তরগুলির প্রয়োজন ছিল, তবে সেই স্তরটি তাদের রেফারেন্স করছিল, তাই আমি রিফ্যাক্ট না হওয়া পর্যন্ত আমার কিছু কুরুচিপূর্ণ কাজ ছিল
রাচেল

1
@ জনউইলিস আমার ডাব্লুপিএফ প্রকল্পের বেশিরভাগই আমার উত্তরে বর্ণিত পয়েন্টগুলির ভিত্তিতে ভেঙে গেছে। সাধারণত ডএএল এর নিজস্ব স্তর থাকে এবং প্রতিটি মডিউল বা প্রকল্পের বিভাগগুলি একত্রে গ্রুপ করা হয় (হয় এটির নিজস্ব ফোল্ডার, নামের স্থান বা প্রকল্পের আকারের উপর নির্ভর করে প্রকল্প) project সুতরাং উদাহরণস্বরূপ, সমস্ত অনুসন্ধান অবজেক্টগুলি Interfaceডেটা স্তরের জন্য সহ একসাথে থাকবে , তবে অনুসন্ধানের জন্য প্রকৃত ডেটা অ্যাক্সেস স্তরটি ড্যাল লাইব্রেরিতে থাকবে। প্রায়শই আমার একটি Infrastructureবা Commonলাইব্রেরি থাকে যাতে সাধারণ বেস ক্লাস, ইন্টারফেস এবং সহায়ক শ্রেণি থাকে।
রাচেল

14

আমি প্রতিটি স্তর প্রতি স্তর, এবং প্রতিটি স্তর প্রতি পরীক্ষামূলক প্রকল্পের সাথে সেরা ফলাফলগুলি দেখেছি। আমি কয়েক অ্যাপ্লিকেশন সমাধান, যেখানে সমাধান বোঝায় 10 বা তার চেয়ে কম প্রকল্পে সম্পন্ন করা যাবে না দেখেছি সবকিছু

আপনি প্রকৃতপক্ষে নাম সারণী চান এমন প্রকল্পগুলি ব্যবহারের ফাঁদে পড়বেন না। প্রচুর প্রকল্পগুলি লাভের জন্য ওভারহেড ছাড়া আর কিছুই যুক্ত করে না।


9

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


+1 যখন আমি নতুন প্রকল্পগুলি শুরু করি আমি প্রায়শই একটি সিমুলেটেড ডেটা স্তর তৈরি করি যা ডেটা মেমরিতে রাখে। আমাকে প্রথমে বাকি অ্যাপটি তৈরি করার অনুমতি দেয় building তারপরে আমি এটি পরে "সত্যিকারের" ডেটা অ্যাক্সেস লেয়ারের জন্য সরিয়ে নিতে পারি ..
ম্যাটডাভে

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

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

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

4

আমার জন্য, 4 * ম্যাজিক নম্বর। প্রতিটি স্তরের জন্য একটি প্রকল্প এবং একটি প্রকল্প যা তাদের মধ্যে যোগাযোগের জন্য প্রয়োজনীয় সমস্ত ইন্টারফেস / ডিটিওর সংজ্ঞা দেয়।

* 7 আপনি ইউনিট পরীক্ষা গণনা


2

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


2

এর ব্যক্তিগত স্বাদ, সর্বাধিক গুরুত্বপূর্ণ বিষয়টি সামঞ্জস্যপূর্ণ হতে হবে । আমার ব্যক্তিগতভাবে অ্যাপ্লিকেশনের প্রতিটি স্তরের জন্য পৃথকীকরণ প্রকল্প রয়েছে যাতে বিচ্ছেদটি সুস্পষ্ট।


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

1

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

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

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

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


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

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

-2

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

যদি প্রকল্পগুলি কেবল একটি অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয় তবে সেগুলি প্রথম স্থানে তৈরি করা উচিত হয়নি। পরিবর্তে নেমস্পেস ব্যবহার করুন। ফাইলগুলির সন্ধানের সময় বিজ্ঞপ্তি সংক্রান্ত রেফারেন্স, dll ওভারহেড এবং প্রকল্প বিভ্রান্তির ঝামেলা বাঁচান।

এটি কেন এত গভীরতার আরও গভীরতার জন্য এই নিবন্ধটি পড়ুন: http://lostechies.com/chadmyers/2008/07/16/project-anti-pattern-many-projects-in-a-visual-studio- সমাধান ফাইল /

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


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