چگونه در لاراول «بدنویسی» کنیم؟!

بدنویسی، اصطلاحی است که برای نوشتن چیزهای بد دارم، چه کد باشد و چه انشاء!
بدنویسی، اصطلاحی است که برای نوشتن چیزهای بد دارم، چه کد باشد و چه انشاء!

این مقاله به شما کمک می‌کند که از عرشِ «توسعه‌دهنده‌ی خوب لاراول» به فرش «تازه‌کاران» سقوط کنید! این کار هیچ سختی ندارد، کافیست که در کوتاه‌مدت، آسان‌ترین چیزی که به ذهن‌تان برسد را پیاده کنید؛ باید در این مسیر کدهای بیشتری بنویسید که باگ‌های بیشتری داشته باشند، و خیلی مهم است که خودتان هم نتوانید کدهای‌تان را متوجه شوید! ایراد باید فراوان باشد و برطرف‌کردن‌اش ترسناک، چرا که فیکس‌کردن یک باگ، برابر است با تولد دو باگ جدید!

ام‌وی‌سی!

وقتی روی یک پروژه‌ی لاراولی دست به کار شوید، از یک چیز مطمئن هستید: آن‌ها کدهای‌شان را با استفاده از الگوی MVC سازماندهی می‌کنند.

الگوی MVC چگونه کار می‌کند؟
الگوی MVC چگونه کار می‌کند؟

برای حل این معضل بزرگ (!) کفایت می‌کند که یک فایل با نامی شبیه show-article-comments.php یا store-comment.php بسازید و برای هر صفحه، تنها از یک فایل استفاده کنید! فراموش نکنید که کدهای PHP و HTML باید در یک فایل تلنبار شوند:

قاعده‌ی طلایی نوشتن همه‌چیز در یک فایل
قاعده‌ی طلایی نوشتن همه‌چیز در یک فایل

اگر در ابتدای هر فایل PHP اقدام به ایجاد MySQL Connection کرده باشید، امتیاز ویژه دریافت خواهید کرد!

دشمنِ منفورِ من، CRUD!

اصطلاح CRUD مخفف چهار کلمه‌ی Create (ساختن)، Read (خواندن)، Update (به‌روزکردن) و Delete (حذف‌کردن) است. بیایید قسمت دیدگاه‌های یک وب‌سایت را تصور کنیم: می‌توانیم کامنت بسازیم، آن را ببینیم، سپس ویرایش و یا حذف کنیم. اصلاً کاربران را تصور کنیم: کاربری را می‌سازیم، می‌بینیم، ویرایش و حذف می‌کنیم. حتی بعضی‌ها معتقدند که تمام عملیاتی که در وب انجام می‌شود، همگی به نوعی از CRUD هستند!

نمایی از CRUD
نمایی از CRUD

اما این دیگر چه کاری است؟! بهتر نیست که متدهای کنترلر را مثل saveToDatabase، getOneUser، SaveNewUserInformation و... نام‌گذاری کنیم؟! این روش در کار تیمی بسیار مفید بوده و از خستگی و بی‌حوصلگی اعضای تیم جلوگیری می‌کند، زیرا باید مدام حدس بزنند که متدهای کنترلر چگونه نام‌گذاری شده‌اند!

نکته‌ی خوشحال‌کننده‌ی دیگر این است که در صورت آوردن متدهایی چون saveUserComment، deleteUserComment و showUserComment به کنترلر UserController، یک‌عالمه امتیاز اضافی دریافت خواهید کرد! یک وقت به سرتان نزند که یک کنترلر دیگر به نام CommentController ایجاد کنید!

گفتی REST؟!

برخی از شیردلان، سازمان‌دهی URLها را به صورت زیر ممکن می‌دانند:

اما مگر این مسائل هم جای شوخی‌کردن دارد؟! همه می‌دانند که راه درست‌اش این است که به این صورت، از URLهای تصادفی استفاده کنیم:

  • /show-all-users
  • /save-user
  • /save-comment-for-user
  • /delete-comment-of-user

فکرکردن به اینکه هفت URL (یعنی REST) را یاد بگیریم و بعد در هر جا از آن‌ها استفاده کنیم، مسخره است! بهتر نیست که هر دفعه به یک شکل نام‌گذاری‌مان را انجام بدهیم؟! البته این کار تنها از افراد خلاق برمی‌آید و در توانایی همه‌ی مردم نیست!

مانند همیشه باید بگوییم که در این درس، امتیاز اضافی به برنامه‌نویسانی تعلق می‌گیرد که ویوهای‌شان (Views) را به شکلی متفاوت از URLهای‌شان نام‌گذاری می‌کنند:

  • show-all-users.blade.php
  • save-user.blade.php

و نام‌های دیگر! البته باید بدانید که نام‌گذاری ویوها بعد از ساختار URL نشانه‌ی نداشتن خلاقیت شماست، و نیز اینکه دارای روحیه‌ی ماجراجویانه نیستید، وگرنه شما هم دوست‌داشتید که در جنگلی از پوشه‌هایی که به صورت راندوم و تصادفی نام‌گذاری شده‌اند، به دنبال فایل‌های‌تان بگردید!

اما ORM!

این آسان‌ترین قسمت کار است! اگر کدنویسی شما در کنترلرتان شبیه به عکس زیر باشد، هرچه من بلد بوده‌ام را شما نیز آموخته‌اید!

زمانی‌که ستون‌های جداول‌تان را در دیتابیس تغییر دادید، یکی‌یکی درِ تمامی کنترلرها را تق‌می‌زنید و کدها را تغییر می‌دهید! اگر هم قرار شد که ستون title یکتا باشد، همین کار را برای Validation انجام می‌دهید! اگر نیمه‌شب رئیس‌تان تماس گرفت و به شما گفت که باید از این به بعد، پس از ارسال یک دیدگاه، یک ایمیل ارسال شود، حدس بزنید...؟ بله! باید باز هم کدها را تغییر دهید!

اگر زمانی کدی مانند کد زیر را دیدید، چشم‌تان را ببندید، Ctrl+A را بفشارید، و بعد Delete کنید!

این مثال ممکن است مغز شما را با ایده‌های مسخره آلوده کند، زیرا برنامه‌نویس می‌تواند با ویرایش کد، «تنها» در یک قسمت، امکان ارسال ایمیل را هم فراهم کند و دیگر حاجتی به ویرایش تمام کنترلرهایی که وظیفه‌ی ارسال دیدگاه را بر دوش دارند، باقی نمی‌ماند!

از این درسِ مهم چه چیزی یاد گرفتید؟ اینکه کنترلر شما باید خود بداند ستون‌های جداول دیتابیس چگونه نام‌گذاری شده‌اند! این را هرگز فراموش نکنید، در غیر این صورت برای تغییر قسمتی از برنامه، تغییر کدها آسان می‌شود و سرگرمی کشتی‌گرفتن با کدهای‌تان را از دست خواهید داد!

ادیتور چی؟

بهترین ادیتور برای کدنویسی ++Notepad است، اما من در این باره مطمئن نیستم، گاهی فکر می‌کنم که شاید بدون ++ خیلی بهتر باشد! اینکه هر کاراکتری را با دست خودمان بنویسیم، خیلی سرگرم‌کننده است و وقتی که پروژه‌ی بزرگی زیر دست‌تان باشد و نیاز به تغییر نام بعضی از توابع‌تان داشته باشید، بهتر هم می‌شود! چه نیازی داریم که به‌صورت اتوماتیک نام تابعی را تغییر دهیم، یا آنکه چند راه برای یافتن یک تابع و اینکه در کجاها استفاده شده، داشته باشیم؟! پس ابداً ذهن‌تان را مشغول IDEهایی مانند PHPStorm یا NetBeans نکنید!


این نوشته، ترجمه‌ای از مقاله‌ی زیر بود که مقداری در آن دخالت کرده‌ام!

https://medium.com/@mantasd/guide-to-writing-bad-laravel-code-6c082bb0c68a


«شما» چه توصیه‌هایی برای کسانی‌که به دنبال آموختن اصول «بدنویسی» هستند، دارید؟