<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های عارف بهبودی</title>
        <link>https://virgool.io/feed/@behboodiaref</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-10 14:06:18</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/273900/avatar/avatar.png?height=120&amp;width=120</url>
            <title>عارف بهبودی</title>
            <link>https://virgool.io/@behboodiaref</link>
        </image>

                    <item>
                <title>GC In Java</title>
                <link>https://virgool.io/@behboodiaref/gc-in-java-anms1zixqq52</link>
                <description>در این مقاله ما سعی کردیم درمورد (GC)Garbage Collector در جاوا صبحت کنیم انواع پیاده سازی های اون و اینکه کجا از کدوم پیاده سازی استفاده کنیم بهتره.معرفی GCدر زبان جاوا مدیریت حافظه برعهده خود JVM  بوده و کار را برای توسعه دهندگان آسان تر کرده است. GC یک پروسس می باشد که فرآیند آزاد سازی حافظه را بصورت خودکار انجام می دهد. که Heap memory اپلیکشن را بررسی کرده و اشیایی که مورد استفاده قرار نگرفته را شناسایی و از حافظه پاک می کند.در بقیه زبان ها مانند C  فرآیند تخصیص و آزاد سازی حافظه به عهده خود توسعه دهنده بود ولی در جاوا اینکار توسط GC انجام می شود که بصورت زیر می توانیم توضیح دهیم:۱.نشانه گذاریدر این مرحله gc شناسایی می کند کدام قسمت از حافظه استفاده شده است و کدام قسمت استفاده نشده است.نشانه گذاری ( این فرآیند ممکن است زمان بر باشد)۲. حذف عادیبعد از شناسایی اشیا استفاده نشده gc آن ها را از حافظه حذف می کند و بقیه اشیا را به حال خود واگذار می کند.تخصیص دهنده حافظه محل هایی از حافظه را که آزاد شده را برای تخصیص اشیا جدید نگه می دارد.۲.۱ حذف با فشرده سازیبرای بهبود عملکرد علاوه حذف اشیا استفاده نشده مابقی اشیا استفاده شده را فشرده کرده و در کنار هم در قسمتی از حافظه فشرده می کنند با این کار تخصیص حافظه جدید ساده تر و سریع تر می شود.در این روش تخصیص دهنده حافظه آدرس اولین محل خالی حافظه را ذخیره می کند و بعد از آن به صورت توالی آن را زیاد می کند.مزایا:مدیریت خودکار حافظه و عدم نیاز به توسعه کد جهت مدیریت حافظهحل مشکل اشاره به قسمتی از حافظه که پاکسازی شده است اما چند متغیر کماکان به آن آدرس اشاره می کننداگر برنامه قسمتی از حافظه را که استفاده نمی کند آزاد نکند منجر به Memory leak می شود.معایب:مدیریت خودکار حافظه نمی تواند به اندازه مدیریت دستی آن کارآمد باشدتوقف های طولانی در برنامه که ممکن است باعث ناکارآمدی برنامه شودمدیریت خودکار حافظه منابعی بیشتری نیاز داردJVM Generationsبا توجه به رفتار اشیا در حافظه می توان رفتار GC را کارآمد تر کرد. به همین خاطر حافظه Heap به چند قسمت کوچک تر تقسیم شده است.1. Young Generation (نسل جوان)2. Old or Tenured Generation (نسل قدیمی)3.  Permanent Generation (نسل دائمی)نسل جوان (Young Generation)هر شئ ای که ساخته می شود ابتدا در این قسمت Heap قرار می گیرد زمانی که این قسمت از Heap پر شود منجر به فرخوانی GC می شود که به آن minor garbage collection می گویند و زمانی اجرا می شود حافظه Eden پر شود.بنابراین اشیایی که در برنامه هنوز استفاده می شوند به حافظه های S0 یا S1 منتقل می شوند و بقیه اشیای مرده از حافظه پاک می شوند.زمانی که minor gc فرخوانی می شود منجر به Stop World Events می شود که به این معناست تمامی Threadهای برنامه متوقف می شوند بتا فرآیند gc کامل شود.نسل قدیمی (Old Generation)اشیایی که عمر طولانی تری دارند در این قسمت از حافظه قرار می گیرند و به این صورت که یک آستانه در JVM تعریف می شود و زمانی که سن شی به این آستانه می رسد به این قسمت از حافظه منتقل می شود.اشیای موجود در Old Generation هم نیاز به پاکسازی دارند که به آن major garbage collection می گویند.فرآیند major gc کندتر از minor می باشد چون باید تمام حافظه بررسی کند و این برای برنامه هایی که نیاز به پاسخ دهی بالا دارند مناسب نیست همینطور major gc هم منجر به Stop World Event می شود که بسته به نوع gc که انتخاب می کنید می تواند زمان متفاوتی طول بکشد.نسل دائمی (Permanent Generation)این قسمت از حافظه شامل یکسری اطلاعات مربوط به کلاس ها متد ها می باشد که مورد نیاز JVM می باشد.این قسمت حافظه از جاوای ورژن 8 حذف شود و JVM از حافظه اصلی برای ذخیره MetaData، کلاس ها و متد ها استفاده می کند که به آن MetaSpace می گویند، همینطور یک تنظیمات جدید MaxMetaspaceSize برای تنظیم حداکثر مقدار مقدار حافظه مورد استفاده توسط MetaSpace اضافه شده است که زمانی حافظه استفاده به این مقدار برسد Metaspace garbage collection فعال می شود و کلاس ها و MetaData ها اضافی را حذف می کند اگر MaxMetaspaceSize را تنظیم نکنید مقدار حافظه استفاده شده به صورت خودکار باتوجه به نیاز برنامه کم یا زیاد می شود.فرآیند کامل یک gc1. زمانی که شی ای ساخته می شود در ابتدا در حافظه eden قرار می گیرد هردو حافظه یS0 و S1 خالی می باشند. 2. زمانی که حافظه eden پر می شود minor gc فرخوانی می شود.۳. اشیا استفاده شده به S0 منتقل می شوند و مابقی اشیا از حافظه eden پاک می شوند.۴. در minor gc بعدی  نیز همانند مرحله ۳ اتفاق می افتد با این تفاوت که  اشیا باقی مانده به S1 منتقل می شوند.  علاوه براین اشیایی که از آخرین gc در S0 باقی مانده اند آستانه(سن) خود را افزایش داده و به S1 منتقل می شوند.۵. در gc بعدی نیز همین فرآیند تکرار می شود با تفاوت اشیا باقی مانده بجای S1 به S0 منتقل می شوند و آستانه(سن) آن ها افزایش می یابد.۶. پس از minor gc وقتی اشیای باقی مانده به آستانه(سن) مشخصی می رسند از Young Generation به Old Generation منتقل می شوند.  ۷. با هربار اجرای minor  gc  آستانه(سن) اشیا زیاد شده و به  Old Generation منتقل می شوند.8. So that pretty much covers the entire process with the young generation. Eventually, a major GC will be performed on the old generation which cleans up and compacts that space.Java Garbage Collectors دستورات مختلفی برای تنظیمات gc وجود دارد که ما در جدول زیر مهم ترین آن ها را آورده ایم:The Serial GCبه صورت پیش فرض در جاوای ورژن 5 و 6 از این نوع gc استفاده می شود که بصورت سریال minor و major را اجرا می کند همینطور از روش mark-compact نیز استفاده می کند که اشیای قدیمی تر به ابتدا حافظه منتقل می شوند به همین خاطر فرآیند تخصیص حافظه به اشیای جدید سریع تر انجام می شود.در Serial GC  انتخابی برای اکثر برنامه‌هایی است که نیاز به زمان مکث کم ندارند. تنها از یک پردازنده مجازی برای کار جمع آوری زباله استفاده می کند. با این حال، در سخت‌افزار امروزی، Serial GC می‌تواند بسیاری از برنامه‌های کاربردی غیر ضروری را با چند صد مگابایت پشته جاوا، با مکث‌های نسبتاً کوتاه در بدترین حالت (حدود چند ثانیه برای جمع‌آوری کامل زباله‌ها) به طور مؤثر مدیریت کند.یکی دیگر از کاربردهای محبوب Serial GC در محیط‌هایی است که تعداد زیادی JVM روی یک دستگاه اجرا می‌شوند (در برخی موارد، JVM‌های بیشتری نسبت به پردازنده‌های موجود!). در چنین محیط‌هایی وقتی یک JVM جمع‌آوری زباله انجام می‌دهد، بهتر است فقط از یک پردازنده استفاده شود تا تداخل در JVM‌های باقی‌مانده به حداقل برسد، حتی اگر جمع‌آوری زباله ممکن است بیشتر طول بکشد. و Serial GC به خوبی با این مبادله مطابقت دارد.در نهایت، با گسترش سخت‌افزارهای کوچک با حداقل حافظه و هسته‌های کم، Serial GC می‌تواند بازگشتی داشته باشد.برای فعال سازی Serial Gc از دستور زیر می تونین استفاده کنید:-XX:+UseSerialGCنمونه کامل:java -XX:+UseSerialGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jarThe Parallel GCاز جاوای ۵ تا ۸ به عنوان gc پیش فرض در جاوا استفاده شده است. برخلاف Serial Collector این نوع از چند thread برای مدیریت حافظه استفاده می کند اما کماکان تمامی thread های برنامه متوقف می کنند.اگر سیستم شما دارای N تعداد هسته پردازشی باشد بصورت پیش فرض به همان تعداد thread هم در gc برای فرآیند مدیریت حافظه استفاده خواهد شد. شما می توانید با دستور زیر تعداد thread مورد استفاده در برنامه خود را مشخص کنید:-XX:ParallelGCThreads=&lt;desired number&gt;این کالکتور throughput collector هم نامگذاری می شود زیرا با استفاده از چندین پردازشگر می تواند توان عملیاتی برنامه شما را افزایش دهد. این کالتکور باید زمانی استفاده شود که کار زیادی باید انجام شود و مکث های طولانی در برنامه قابل قبول می باشد برای مثلا زمانی که برنامه شما پردازش های دسته ای انجام می دهد مانند پرینت تعداد زیادی گزارش یا کوئری های زیاد و متعدد از دیتابیس ...این کالکتور در دو نسخه ارائه شده است:--XX:+UseParallelGCدر این نوع قسمت Young Generation حافظه توسط چندین thread مدیریت خواهد شد اما قسمت  Old Generation توسط یک thread مدیریت خواهد شد، همچین برای حافظه ی Old Generation عملیات فشرده سازی توسط تک thread انجام خواهد شد، برای استفاده از این کالکتور می توانید از دستور زیر استفاده کنید :java -XX:+UseParallelGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar--XX:+UseParallelOldGCدر این نوع کالکتور هردو قسمت حافظه Young و Old  توسط چندین thread مدیریت می شود همچنین عملیات فشرده سازی نیز توسط چندین thread انجام می پذیرد که فقط در قسمت Old Generation حافظه عملیات فشرده سازی اتفاق می افتد.در قسمت Young Generation حافظه چون عملیات پاکسازی توسط کپی کردن اشیا اتفاق می افتد نیازی به فشرده سازی نیست.برای استفاده از این کالکتور می توانید از دستور زیر استفاده کنید :java -XX:+UseParallelOldGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jarThe Concurrent Mark Sweep (CMS) Collectorاین کالکتور با استفاده چندین thread سعی می کند کمترین مکث را در برنامه ایجاد کند برای همین عملیات هایی مانند فشرده سازی یا انتقال اشیا را انجام نمی دهد صرفا فقط با مکث های کوتاه علمیات آزاد سازی حافظه را انجام می دهد، برای همین باید مقدار heap بیشتری به برنامه اختصاص دهید.این نوع کالکتور برای برنامه هایی که به مکث های بسیار کوتاه نیاز دارند مناسب می باشد مانند desktop application ها یا یک web server که باید به درخواست های کاربران پاسخگو باشد.-XX:+UseConcMarkSweepGC-XX:ParallelCMSThreads=&lt;n&gt;برای استفاده از این کالکتور می توانید از دستور زیر استفاده کنید :java -XX:+UseConcMarkSweepGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jarThe G1 Garbage Collectorاین کالکتور از جاوای ورژن 7 به بعد دردسترس می باشد این کالکتور به عنوان جایگزین طولانی مدت CMS طراحی شده است. G1 یک جمع کننده موازی می باشد که عملیات مدیریت حافظه را توسط چندین thread انجام می دهد با این حال عملیات فشرده سازی را نیز به تدریج انجام می دهد و برای کمترین مکث در برنامه طراحی شده است. ( آنچه خوبان همه دارند تو یکجا داری/ بی سبب نیست که در کنج دلم جا داری)برای استفاده از این کالکتور می توانید از دستور زیر استفاده کنید :java -XX:+UseG1GC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jarZGCاین کالکتور از جاوی ورژن 11 بصورت آزمایشی برای سیستم عامل لینوکس منتشر شد سپس از جاوای 14 به بعد برای سیستم های عامل ویندوز و مک دردسترس قرار گرفت و از جاوای ورژن 15 ورژن نهایی آن منتشر شد.این کالکتور از چندین thread برای مدیریت حافظه استفاده می کند و فعالیت برنامه را بیشتر از 10 میلی ثانیه متوقف نمی کند، این کالکتور توان مدیریت حافظه های Heap از 8 مگابایت تا 16 ترابایت را دارد و زمان اجرا شدن gc با زیاد شدن حافظه Heap افزایش نمی یابد.برای استفاده از این کالکتور می توانید از دستور زیر استفاده کنید :java -XX:+UseZGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jarEpsilon Garbage Collectorاین کالکتور هیچ کاری انجام نمی دهد در واقع فرآیند تخصیص حافظه را انجام می دهد اما فرآیند آزاد سازی حافظه را انجام نمی دهد از این کالتکور می توان در برنامه هایی حساس به تاخیر استفاده کرد یا برنامه هایی که توسعه دهنده ردپای حافظه ای که استفاده کرده است را می داند و یا در برنامه هایی که تقریبا (کاملا) هیچ زباله ای ندارند.برای استفاده از این کالکتور می توانید از دستور زیر استفاده کنید :java -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jarShenandoahاین کالکتور با جاوای 12 منشتر شده است و یک مزیتی که نسبت به G1 دارد این می باشد که می تواند چرخه مدیریت حافظه را همزمان با thread های برنامه انجام دهد و حافظه آزاده شده را بلافاصله به سیستم عامل برگرداند.از آن جایی که تمامی فرآیند همزمان با اجرای برنامه اتفاق می افتد CPU بیشتری مصرف می شود.برای استفاده از این کالکتور می توانید از دستور زیر استفاده کنید :java-XX:+UseShenandoahGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jarمقایسه GC Pause Times:خلاصهبرای فرخوانی دستی gc می توانید از کد های زیر استفاده کنید:System.gc();
Runtime.getRuntime().gc();البته اصلا توصیه به فرخوانی دستی gc نشده است و تاجای امکان از فرخوانی آن پرهیز کنید، چون به شما گارانتی نمی دهد با فرخوانی شما gc اجرا شود.تنظمیات gc بهتر است به صورت پیش فرض  باقی بماند، زمانی که شما برنامه ای دارید با تعداد بالایی کاربر آن زمان می توانید به شخصی سازی gc بپردازید چون این کار به تجربه و دانش خیلی بالا دارد.منابع:https://www.baeldung.com/jvm-garbage-collectorshttps://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.htmlhttps://www.digitalocean.com/community/tutorials/garbage-collection-in-java</description>
                <category>عارف بهبودی</category>
                <author>عارف بهبودی</author>
                <pubDate>Fri, 08 Dec 2023 21:51:02 +0330</pubDate>
            </item>
                    <item>
                <title>تصمیم کُبری</title>
                <link>https://virgool.io/@behboodiaref/%D8%AA%D8%B5%D9%85%DB%8C%D9%85-%DA%A9%D9%8F%D8%A8%D8%B1%DB%8C-cr3yz7tiww2r</link>
                <description>دراین صنعت ما مدام درحال تصمیم گیری هستیم تصمیم هامون گاهی بزرگ هستند و گاهی کوچک و بعنوان یک توسعه دهنده متعهد همیشه درچالش هستیم تا بهترین تصمیم رو بگیریم.در این مدتی که به عنوان یک توسعه دهنده بک اند مشغول به کار بودم یکسری نکات رو یاد گرفتم و تجربیاتی بدست آوردم خاستم برای شما هم به اشتراک بذارم مخصوصا برای برنامه نویسی هایی که تازه وارد این حوزه شدن به نظرم خیلی میتونه مفید باشه.این مقاله حاصل فهم و درک منه و ممکنه اشتباهاتی داشته باشه خوشحالم میشم بهم گوشزد کنین و اصلاحش کنم.برای یک تصمیم درست یکسری نکات رو درنظر بگیریم: منابع شرکتمنابع شرکت رو توی تصمیماتون دخیل کنید آیا منابع شرکت برای تصمیم شما کافی هست؟ تعداد توسعه دهنده   کافی هست؟شرکت محل تست و آموزش شما نیست اگر یک زبان یا ابزار رایج شده و شما علاقمند به یادگیریش هستین برای خودتون پروژه تستی بزنین تا به چالش هاش روبرو بشین نه اینکه به یک نحوی توی پروژه ها ازش استفاده کنین. برای استفاده کردن از یک ابزار جدید به اندازه کافی توجیه و دلیل داشته باشین.۲. نیازمندی مشتریهمیشه نیازمندی و انتظارات مشتری رو درک کنید و قبل از فرآیند پیاده سازی به صورت کامل نیازمندی رو متوجه بشین و استثنائات اش رو بشناسین.خیلی اوقات پیش میاد وسط کار متوجه میشین نیازمندی رو اشتباه متوجه شدین باید همه چیو پاک کنین و از اول پیاده سازی کنین پس بهتره اول کار نیازمندی رو بشناسین.۳. مستند سازیهمه چیز رو برای آرامش خودتون هم که شده مستند کنید تا زمانی که اگر باگی وجود داشت توسعه دهنده های دیگه بتونن حلش کنند و وسط مراسم عروسی یا مسافرتون مزاحم شما نشن. مستندسازی هم جزئی از فرآیند توسعه هستش و یک توسعه دهنده خوب باید بتونه کارهاشو به صورت مرتب مستند کنه.۴. زمان کافیتوی تصمیم هاتون زمان رو درنظر بگیرین و اگر نیازه یک کد کثیف بزنین که یک مشتری از دست نره این کار رو انجام بدین. کدتمیز شما به هیچ دردی نمیخوره زمانی که هیچ مشتری ای نداشته باشه.۵. آینده نگریتوی تصمیماتتون بهتره مقداری آینده نگری داشته باشین اما تفریط هم نکنین و نیاز نیست ۱۰ سال آینده رو پیش بینی کنین.۶. مقیاس پذیری و کاراییتصمیم های شما باید مقیاس پذیر باشند اگر پروژه بصورت غافلگیرانه ای تعداد کاربرهاش زیاد شد آیا توان پاسخگویی دارید؟  اما اگر پروژه شرکتتون تعداد کاربر مشخصی داره نیاز نیست زیاد نگران این موضوع باشین و وقت و هزینه شرکت رو صرف این موضوع کنید.۷. تستاگر تست ننوشتین و براتون سخت میاد از چیزی های ساده شروع کنین و کم کم وارد مباحث سخت ترش شین فرآیند اجرا شدن تست هارو اتومیت کنید و از پاس شدن تست هاتون لذت ببرین! به نظرم مهم ترین عامل پایداری سیستم وجود تست هاست. ضرب المثل معروفی دراین زمینه هست که میگه « اگر میخوای شب ها راحت بخوابی تست بنویس »۸.  مسولیت پذیریمسولیت پذیر باشین و سعی در ارتقا و رشد پروژه های شرکت داشته باشین این یک نکته مهم هستش فراتر از تسکی که باید انجام بدین قدم بردارین( خیلی هم گاز ندین درحدی که واقعا نیازه) اگر توی تسک قسمتی از نیازمندی دیده نشده با هماهنگی مدیرتون انجام بدین این خیلی به پیشرفت شما در شرکت کمک میکنه.بازخورد بگیرین, پیگیر باشین و به کار ها اهمیت بدین.توجه کنید این نکات کلی هستند و ممکنه براساس ماهیت پروژه یا نیازمندی پروژه های شما متغیر های دیگری دخیل باشند.</description>
                <category>عارف بهبودی</category>
                <author>عارف بهبودی</author>
                <pubDate>Sun, 09 Jul 2023 22:56:17 +0330</pubDate>
            </item>
                    <item>
                <title>Long Method</title>
                <link>https://virgool.io/@behboodiaref/long-method-auhmwesnnyuf</link>
                <description>متد طولانی چیه؟ آیا طولانی بودن یک متد فقط بستگی به تعداد خط های اون داره؟نمیشه یک قاعده کلی براش درنظر گرفت اما یک متد نباید بیشتر از یک کار رو انجام بده، تو رفتگی های یک متد اصولا نباید بیشتر 3 باشه و تعداد خط کدهاش بیشتر از 10 خط نباید باشه! ( همیشه استثنا وجود داره :-| )زمانی که تعداد خط کد های یک متد بیشتر از 10 (البته در مورد تعداد خط دقیق اش نظر های متفاوتی وجود داره) شد، شما باید یکسری سوالات از خودتون بپرسین که چرا این متد تعداد خط هاش زیاد شد؟ آیا میشه کمترش کرد؟ یا یک جایی از کد مشکل داره؟ممکنه زمانی که شما میخواین یک فیچری به سیستم اضافه کنید با خودتون بگین اضافه کردن چند خط کد آسون تر از نوشتن یک متد جدید باشه و کم کم این روش ادامه پیدا میکنه تا بجایی که با یک کد کثیف طرف میشن و فهمیدن اون کد سخت میشه و کلی مشکل ایجاد میکنه در آینده!مشکلات که متدطولانی ایجاد میکنه:خوندن اون کد سخت تر میشه.نگهداری و توسعه اون کد سخت میشه.پوشش تست کمتری داره و گاهی اصلا نمیشه براش تست نوشت، اصولا وقتی یک متد طولانی میشه داره چند کار رو انجام میده پس وقتی شما نیاز به تست نوشتن براش داشته باشین باید سناریو های متفاوتی رو پوشش بدین!دیباگ کردن و پیدا کردن باگ ها در اون متد سخت تر میشه.زمانی که شما با یک متدطولانی طرف میشین اول بسم الله شروع به ریفکتور اون کد نکنید اول متد رو بررسی کنید و باخودتون فکر کنید آیا ارزش ریفکتور داره؟ تست ها پاس میشن؟ ورودی و خروجی های متد نیاز به تغییر داره؟ اما ممکنه شما بخواین که امکان جدیدی به یک متد اضافه کنید حتی اگر یک خط هم باشه باید یک متد جدید براش بنویسین و اگر یک اسم مناسب هم براش بذارین دیگه فردا روزی کسی اگر خاست کد شمارو بخونه فقط از روی اسم متد میفهمه که این متد چیکار میکنه!روش هایی که میتونید ازشون برای کوتاه کردن یک متدطولانی کمک بگیرین:Decompose Conditional1اگر یک if دارید یک چند شرط رو چک می کند بهتره اونارو را داخل یک متد جدید قرار بدیم و از اون متد داخل if استفاده کنیم. با این روش اگر کسی کد شما رو بخواد ریفکتور کنه از روی اسم متد میفهمه که if چه شرط هایی رو چک میکنه!Replace Temp with Query2انجام محاسبات ریاضی و فرمول ها داخل یک متد جدید و استفاده از اون متد داخل متد های دیگه که باعث افزایش خوانایی کدتون میشه، بهتره که بدونید اگر مقدار خروجی نیاز به پرفورمنس بالایی داره، ایجاد یک متد جدید ممکنه روی پرفورمنس شما تاثیر بذاره. به عکس(2) کد سمت راست توجه کنید basePrice سه بار محاسبه میشه درصورتی که کد سمت چپ فقط یک بار basePrice محاسبه میشه!Preserve Whole Object3تو این روش زمانی که شما یک آبجکت دارید و چند متغیرش رو به متد دیگه ای پاس میدین بجای اینکه داخل متد اصلی اونهارو get کنید و بعد به متد دیگری که کار محاسبه رو انجام میده پاس بدین کل اون آبجکت رو بهش پاس میدین و متغیرها داخل همون متد get میشن و ازشون استفاده میشه، از این خوبی های این روش اینه که اگر نیاز بود متغیر دیگه ای از آبجکت رو به همون متد پاس بدین نیاز به تغییر ورودی های متد نیست!اما این روش انعطاف پذیری کد رو کمتر میکنه و اگر اون متدفرعی در جاهای دیگری هم استفاده شده باشه برای فرخوانیش نیازه که فقط اون آبجکت رو پاس بدین بهش!Replace Method with Method Object4در این روش ما یک متد داریم که متغیرهای محلی زیادی داره و خیلی محاسبات پیچده ای انجام میده به همین نمیتونیم اونو به چند متد کوچکتر تبدیلش کنیم، 1. برای حل این مشکل یک کلاس جدید با نام مناسب که گویای کاری که انجام میده ایجاد میکنیم2. متغیرهایی که داخل متد استفاده شده بود داخل کلاس جدید بصورت private تعریف میکنیم 3. داخل متد سازنده کلاس جدید تمام مقادیری که برای محاسبه نیاز هست میگیرم و مقادیر رو set میکنیم 4. یک متد برای انجام محاسبات ایجاد میکنیم و چون متغیرهای موردنیازمون به صورت محلی داخل کلاس تعریف شدن میتونیم محاسبات به چند متد کوچیک تقسیم کنیم و داخل اصلی محاسبه مقدار اصلی رو برگردونیم.تو این روش چون یک کلاس جدید برای انجام بیزنس اضافه میشه کمی باعث پیچدگی کد میشه.Extract Method5ساده ترین روش کوچک تر یک متد این روش هست که فقط کافیه متداصلی به چند متد کوچک تر تقسیم کنید و هرکدوم وظیفه انجام یک کار رو بهعده بگیرن.که باعث میشه کدخواناتری داشته باشیم و از به وجود کد تکراری جلوگیری میکنه.جمع بندیبا کوتاه کردن متد های شما به کدهایی دست پیدا میکنید که عمر طولانی دارند، خواناتر هستند و تست نوشتن براشون خیلی آسون تر هست البته تبدیل یک متدطولانی به چند متد کوتاه تر تاثیری خیلی کم روی پرفورمنس داره که اونقدر ناچیز هست که نیاز به نگرانی نداره.البته همیشه استثنا هست!منابعhttps://refactoring.guru/smells/long-methodhttps://makolyte.com/refactoring-the-long-method-code-smell/https://medium.com/@joshsaintjacque/whats-the-problem-with-long-methods-72203f516cdbhttps://dev.to/thinkster/code-smell-long-method-1c2e</description>
                <category>عارف بهبودی</category>
                <author>عارف بهبودی</author>
                <pubDate>Fri, 28 Jan 2022 22:41:22 +0330</pubDate>
            </item>
            </channel>
</rss>