the_king
مدیرکل انجمن
در خیلی از موارد نه بهتری وجود داره و نه اصول خاصی، صرفا سلیقه و دید شما است، نسبت به یک موضوعی که ممکنه با بقیه فرق کنه. از اول عادت کنید که روی هیچ قاعده ای وسواس بی مورد بخرج ندید.سلامی مجدد
خیلی ممنون استاد.
قبلا درباره ی پروژه های چند لایه ازتون سئوال پرسیده بودم ، شما گفتین هر جور دوست دارم ، عمل کنم .
اما من میخوام اصولی کار کنم .
الان استاد ، من برای پروژه ام (پشتیبانگیر طلوع) ، 2 کلاس میسازم . یکی بنام VssBackup (که کارها و متدهای مربوط به بکاپ گیری را توش مینویسم) و یکی هم Database (که کارها و متدهای مربوط به دیتابیس را توش مینویسم) . متدهای مربوط به رابط کاربری را توی همون فرمی که دارم (مثلا توی صفحه ی تنظیمات ، توی فرم تنظیمات و توی صفحه ی اصلی پروژه ، توی فرم پروژه ی اصلی ام مینویسم) .
میخوام بدونم :
اولا نیاز هست که برای رابط کاربری (که بصورت پیش فرض میخوام کدها را توی همون فرم بنویسم) ، کلاس مجزای دیگه ای بنویسم؟ مثلا شما همون متدهای LoadSetting و این جور چیزهایی که قبلا (توی توی قضیه ی لود و آپدیت و ذخیره و خوندن تنظیمات از دیتابیس برای فرم تنظیمات میگفتین) را توی کلاس مجزایی مینویسین یا توی فرم تنظیمات تون مینویسین؟
دوما که من الان دو تا کلاس که دارم (کلاس های VssBackup و Database ) ، توی کلاس فرم ام که میخوام با این کلاس ها ارتباط برقرار کنم ، بهتره با هر کدوم شون در فرم ام ارتباط داشته باشم (روش اول . یعنی در کلاسِ فرم ام ، از هر دوی این کلاس ها شی ایجاد کنم و بصورت مجزا ، با هر کدوم شون در ارتباط باشم) یا اینکه بهتره که در کلاس فرم ام فقط با کلاس میانی (یعنی کلاس VssBackup ) رابطه داشته باشم و از داخل کلاس VssBackup ، با کلاس Database ارتباط برقرار کنم (روش دوم) ؟
یعنی بهتره بصورت مستقیم ، در کلاس فرم ام ، با کلاس Database ام رابطه داشته باشم (روش اول که در بالا گفتم) یا بصورت غیر مستقیم (روش دوم)؟
من حس میکنم بصورت مستقیم رابطه داشته باشم ، بهتره . درسته؟
کلا درباره ی این قضیه یه کم راهنمایی میکنین که روابط کلاس ها ، چجوری باشن (و اینکه چند تا کلاس اصلی برای کارهام داشته باشم) بهتره؟
خیلی ممنون
بعضی ها خوششون میاد هر چیز کوچکی رو بصورت کلاس در بیارن، بعضی ها هم کلا از کلاس سازی فراری اند. سلیقه و دید شون فرق داره. ولی افراط و تفریط و وسواس روی رعایت موارد جزئی و کم اهمیت فقط وقت تون رو تلف میکنه. از طرف دیگه حجم پروژه و زمانی که باید صرفش بشه در نظر بگیرید، ابدا ارزش نداره که برای پروژه های کوچک روی رعایت معماری هایی تمرکز بشه که منفعتشون رو در پروژه های خیلی بزرگ نشون میدن. مثل اینه که بخواهیم یک ربع وقت صرف خوردن صبحونه بکنیم و بریم سر کار، اما برای چیدن اون میز صبحونه بیخودی پنج ساعت وقت صرف کنیم.
فرض کنیم که تنظیمات شامل موارد x و y و z باشه. اگر قراره تمامی این تنظیمات صرفا در فرم فلان مورد استفاده قرار بگیره و ربطی به سایر کلاس ها و فرم ها نداره، لزومی نداره که برایش کلاس مجزایی در نظر بگیرید و در همون کلاس فرم فلان میتونه پیاده سازی بشه. می توانید برایش کلاس مجزا بسازید ولی منفعتی حاصل نمیشه. ولی وقتی قراره تنظیمات در چندین فرم مورد استفاده قرار بگیرند، بهتره که یک کلاس مخصوص تنظیمات داشته باشید و LoadSetting هم داخل همون کلاس باشه. از هر جایی هم که لازم باشه به این کلاس رجوع میکنید، حالا حتی اگر مناسب بود کلاس static که نیازی به شی سازی هم نباشه.
برای پروژه ای در سطح کار شما هیچ فرقی نمی کنه که شما مستقیم با یک کلاسی در ارتباط باشید یا نباشید، چون شما با هیچ معماری خاصی عهد و پیمان نبستید و با رعایت نیم بند هیچ معماری خاصی هم اتفاق بدی نمی افته. شما باید روشی رو بکار ببرید که با حداقل زحمت و کمترین زمان بهترین نتیجه رو بگیرید. نه کسی بابت رعایت صد در صدی معماری فلان بهتون جایزه میده و نه کاربر میفهمه که پشت پرده شما چه کردید.
اینجا نه بهتری وجود داره و نه بدتری. اگر کسی اصرار داشته باشه که حتما معماری فلان، فرضا MVC رو بدون کوچکترین گذشت و خیلی دقیق در همه پروژه هاش بکار ببره، من تنها با این دید به قضیه نگاه می کنم که طرف وسواس داره، همچین برنامه نویسی درکی از مزایا و معایب ها مدل ها نداره، گرفتار وسواس خودش شده. نه این کارش خیلی خوبه و نه از سختگیری اش مزیتی بدست میاره.
اما اگه بگید اگر بین دو انتخاب گزینه ای داشتم که برایم انجامش راحت تر بود، زمان کمتری صرف میشد و در اجرا هم تاثیری نداشت، اونوقت اگر انتخابش نکنید، انتخاب بدی داشتید. این توصیف مساله ای است که خیلی جاها رخ میده، برای رعایت یک قواعدی زمان اضافی صرف می کنید که به نظرتون مهمه ولی در عمل ارزش اش رو نداشته و فقط وقت تون بیخودی هدر رفته.