من یک کلاس حجیم، بیش از ۷۰۰ خط داشتم که کار کردن با آن سخت شده بود. خصوصاً این که چند نفر به طور همزمان روی آن کار میکردند و همیشه احتمال بروز conflict موقع check-in وجود داشت. علاوه بر این عملکرد متودهای آن را میشد به ۲ یا ۳ بخش مستقل تقسیمبندی کرد و بهتر بود هر کدام را در جای مستقلی نگه میداشتم. بنابراین فکر کردم که تقسیم این کلاس به دو یا چند کلاس دیگر خیلی بهتر است.
این کلاس از نوع Generic است و بیشتر اعضایش از نوع static تعریف شدهاند. اول کار این طور به نظرم رسید که از Extension Method استفاده کرده و بخشهای دوم و سوم را به یک کلاس static دیگر برده و عملکرد آنها را از طریق Extension Method مورد استفاده قرار دهم. با این که Extension Methodها با کلاسهای Generic مشکلی نداشتند، اما چون میخواستم از داخل Extension Methodها، متودهای کلاس اصلی را که از نوع static هم بودن را صدا بزنم دچار خطای زیر میشدم:
علت خطا همان طور که مشخص است این است که من اجازه ندارم از داخل Extension Methodها، متودهای static را صدا بزنم. ظاهراً دلیل آن این است که با Extension Methodها مشابه متودهای غیر static برخورد میشود و فراخوانی متودهای static از داخل آنها ممنوع است.
در اینجا بود که استفاده از Partial Classها به دردم خورد: کلاس مورد نظرم را به چند بخش کوتاهتر که از لحاظ عملکرد به هم شبیه بودند تقسیم کردم. این طوری اقلاً حجم فایل کلاس کوتاهتر شده و کار تیمی با آن راحتتر شد. به مثال MSDN دقت کنید:
public partial class Employee
{
public void DoWork()
{
}
}
public partial class Employee
{
public void GoToLunch()
{
}
}
Comments
بعضی جاها اگه Partial نباشه نمیشه زندگی کرد ولی شنیدم که میگن اگه یه کلاس بیش از حد بزرگ بشه نشان دهنده اینه که طراحی ایراد داره.
آره، به نظر من هم کلاس خیلی بزرگ نشانه طرحی غلط است. ولی در مورد خاص خودم هنوز راهی برای کوچک کردن کلاس پیدا نکردم.