اول همه چیز مخفف کلمه KISS که میشه keep it simple, stupid رو بگم که باعث سوتفاهم نشه.
ولی خب یعنی چی؟؟؟ این اصل بر سادگی و روشن بودن کد ها واقع شده, برای درک بهتر. کدهایی که مینویسم بیشتر برای انسان هاست (اگه برای کامپیوتر ها بود با همون زبان 0 و 1 کد میزدیم) پس کد ها رو تمییز و ساده بنویسید. متد ها و توابعتون رو تا حد ممکن کوچک کنین جوری که فقط یک کار خاص انجام بدن. و اینکه هیچ متدی نباید بیش از 40 الی 50 خط کد داشته باشه.
اگه متدتون دو کار و یا حتی سه کارم انجام میده مشکلی نیست ولی وقتی دیدین کم کم کداتون زشت میشه و متد کارهای مختلف رو انجام میده باید متد رو به قسمت های کوچک تقسیم کنید. وقتی ide نداشته باشین خوندن کدا سخت میشه ولی عوضش دیباگ اپلیکیشن خیلی راحتره.
برای پرهیز از نقض KISS, کداتون رو ساده بنویسین. به راه حل های مختلف فکر کنین و بهترین و ساده ترین رو انتخاب کرده و به کد تبدیل کنید. هر وقت کدای طولانی دیدن با Ctrl+Shift+Alt+T توی PHPStorm و توی ادیتورای دیگه با راست کلیک خیلی راحت ریفکتور کنید.
اگر ما برخی از قابلیت های نوشته شده توسط یک توسعه دهنده که با کدای کثیف نوشته شده، و ما از یک توسعه دهنده دیگر درخواست تغییر در کد کنیم ابتدا، آنها باید کد را به خوبی درک کنند. بدیهی است، اگر کد به سادگی نوشته شده باشد، درک این کد مشکل نخواهد بود، و همچنین تغییر آسان خواهد بود.
خیلی از توسعه دهنده ها جدیدا وسواس گرفتن حالا هرکسی روی چیزی دست گذاشته و میگه روش من درسته و یا درست تره
دو مثال از یک کنترلر TaskController توی لاراول ببینید که یکی ساده و دیگری با دیزاین پترن Repository نوشته شده. خودتون قضاوت کنید کدوم بهتر خونده میشه:
<?php namespace App\Http\Controllers; use App\Task; use App\Repositories\Repository; use Illuminate\Http\Request; class TaskController extends Controller { // space that we can use the repository from protected $model; public function __construct(Task $task) { // set the model $this->model = new Repository($task); } public function store(Request $request) { $this->validate($request, [ 'body' => 'required|max:500' ]); // create record and pass in only fields that are fillable return $this->model->create($request->only($this->model->getModel()->fillable)); } }
و روش ساده
<?php namespace App\Http\Controllers; use App\Task; use Illuminate\Http\Request; class TaskController extends Controller { public function store(Request $request) { $this->validate($request, [ 'body' => 'required|max:500' ]); return Task::create($request->all()); } }
در این نوشتن اپلیکیشن با دیزاین پترن درست تره شکی نیست(اینجا هم که ریپازیتوری پترن خیلی توی لاراول استفاده میشه) اما توی این کنترلر چون فقط یک متد وجود داره که یک کار کوچیک رو انجام میده لازم نیست بیخودی گندش کنیم(مثال بالا).
هرچند اگه توی شرکت کار میکنید و یا پروژه فکر میکنید که خیلی برزگه باید از دیزاین پترن ها استفاده کنید( در اینجا سادگی بیش از حد باعت پیچیدگی زیاد میشه).