smart
5 سال پیش توسط smart مطرح شد
9 پاسخ

ملزومات کد حرفه ای و قابل توسعه در لاراول

وقت بخیر دوستان.
من یه وبسایت todo نوشتم که کاربر میاد یه سری وظایف رو با زمان و دوره (روزانه، هفتگی و ماهانه) ایجاد میکنه. وب سرویسش رو هم نوشتم و درکل مشکلی وجود نداره. ولی کدم حرفه ای نیست.
یه مثال میزنم: توی بخش ثبت یه وظیفه، چون وظایف نباید تداخل زمانی داشته باشن، توی کنترلر توی تابع مربوط به ثبت وظیفه ( مثلا createTodo) میاد و زمان و دوره رو با بقیه وظایف کاربر چک میکنه که تداخل نداشته باشن. بدلیل یه سری پیچیدگی ها و یه سری موارد اضافه برای چک کردن و وجود حالات مختلف، این بخش کد ممکنه حدود 200-300 خط کد بشه.
حالا ثبت وظیفه هم توی کنترلر مربوط به کاربر هست هم کنترلر مربوط به مدیر(مدیر هم میتونه واسه کاربرا ثبت وظیفه انجام بده) و هم توی کنترلر مربوط به وب سرویس. و خب این بخش از کد توی همش یکسانه و تکراری.
حالا به اینا متدهای ویرایش (update) رو هم اضافه کنید. میبینید که یه تکه کد یکسان 200-300 خطی شش بار باید تکرار بشه.

کد بخواد حرفه ای و قابل توسعه باشه، باید این بخش از کد بره توی یه متد توی "مدل". درسته ؟؟ که هر سه کنترلر بتونن بهش دسترسی داشته باشن و فقط هم یه بار نوشته بشه.

بطور کلی کدوم بخش از کدها باید برن توی یه متد جدید توی "مدل"؟ فقط اونایی که ممکنه چندجا نیاز باشن؟
و کدوم بخش از کدها باید توی یه متد جداگانه توی همون کنترلر باشن؟
آیا این حرف درسته: اگه کد قراره فقط توی همون کنترلر استفاده بشه پس بره به یه متد توی همون کنترلر و اگه ممکنه توی کنترلرهای دیگه هم استفاده بشه بره توی یه متد توی مدل ؟؟؟

تا چه حد باید این جداسازی کدها توی متدهای جداگانه باید پیش بره؟

ممنون میشم دوستان اگه میتونن یه توضیحی بدن یا اینکه لینک مرتبط بفرستن.

@Alimotreb
@ali.bayat
@milad
@hesammousavi
@ali.farmani


ثبت پرسش جدید
mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
3

اینجور سوالات خیلی زیاد و کلیشه ای هستن. شما باید یکسری قوانین رو رعایت کنید تا کد نسبتا خوبی داشته باشید. این قوانین به صورت زیر هستن

  • KISS
  • DRY
  • SOLID
  • DDD
  • PSRs (php standard recommandations)
  • design patterns
    راجب مفاهیم بالا مطالعه کنید. این سوالی که پرسیدین خیلی کلی هست و خیلی مفاهیم رو نمیشه توضیح داد و مستلزم خواندن چند ده جلد کتاب هست.

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

در چنین شرایطی بهتره این کدها رو به یه تریت انتقال بدید و هرجا لازم بود تریت رو use کنید


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
1

@ali.bayat
انتقال کد به trait موقعیت خاصی داره. خیلی جاها بهتره از abstract class استفاده کرد! استفاده درست از مفاهیم نیازمند درک اصول برنامه نویسی هست که نمیشه اون رو با سوال پرسیدن یا صرفا توضیح دادن در قالب سوال و جواب مطرح کرد. استفاده نادرست از ساختار های زبان برنامه نویسی تنها پیچیدگی برنامه رو بالا میبره.


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

@khanzadimahdi

درسته اما کلاسهای Abstract هم محدودیت‌‌های خودشون رو به همراه دارند.
خیلی از برنامه‌نویس ها با تریت میونه خوبی ندارند و معتقدند استفاده از تریت مثل این میمونه که شما آشغال‌هارو به زیر فرش جارو کنی... اما خوب در بعضی شرایط میشه از شلوغی الکی پرهیز کرد.


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@smartgarden2016

partial کردن کد ها رو اگر به درستی انجام بدید خب خیلی خوبه
یه قطعه کدی که قرار هست توی 10 جا تکرار شه ، خب اینو میشه به صورت trait پیاده سازی کرد و جاهای مختلف ازش استفاده کرد
همونطور یکه دوستان گفتند
اما خب حس میکنم کدتون خیلی پراکنده و شلوغ پلوغ هست!
پیشنهاد میکنم اون چه که میدونید مهم هست و همه جا استفاده میشه رو
جدا کنید که از تکرار کد جلوگیری شه


smart
@smartgarden2016 5 سال پیش مطرح شد
1

@khanzadimahdi
@ali.bayat
@Alimotreb
ممنونم دوستان

@Alimotreb
والا چون کلا یه مقدار پیچیدگی بالاس و حالات مختلف پیش اومده کلا حجم کنترلرها بالاس و حتی حجم بعضی متدها به 300-400 خط هم میرسه.

پس فکر کنم به طور کلی بهتره اون کدهایی که چندجا استفاده میشن رو توی trait بنویسم و اون کدهایی که فقط توی همون کنترلر هستن رو تا جایی که میشه جداکنم و توی متدهای جدا توی همون کنترلر بنویسم و استفاده کنم.

تشکر از همگی.


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

@smartgarden2016

برای تمیزکردن کدها و مرتب کردنشون خیلی کارها هست که می‌تونید انجام بدید مثلا استفاده از

  • Form Object
  • Use Case
  • Events
  • Strategizing
  • Decorating
  • Query Object
  • Trait
  • Abstract Class

این مفاهیم رو معادل های فارسی خوبی براشون پیدا نکردم اما رعایتشون باعث میشه شما کدنویس خوبی باشید و با استاندارد‌ها پیش برید


smart
@smartgarden2016 5 سال پیش مطرح شد
0

@ali.bayat
این موارد فکر کنم بعضا مربوط به مهندسی نرم افزار هستن مثل Use Case. درسته ؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

این ها میشه گفت عناوین کارهایی هست که شما میتونید باهاشون کدهاتون رو سر و سامون بدید


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام