SlayerKM avatar

Creating a new project | #05 - DRY code

slayerkm

Published: 27 Jul 2019 › Updated: 27 Jul 2019Creating a new project | #05 - DRY code

Creating a new project | #05 - DRY code

If you haven't read the last post you can find it here


**TLDR** I am building a web application from scratch using PHP Laravel and learning in the process, the application will be a Recipe sharing app that I will build on overtime.
So in the last post, I had made great progress. I now had the ability to create/delete & edit recipes(posts).
I wanted to add the ability for the user to add steps while creating a recipe, how I initially coded this was a bit of a mess. Spaghetti code at its finest. So I added in some simple for loops to cut the number of lines of code. DRY coding (Don't Repeat Yourself).

You can see the top 4 lines of code replace the 15 commented outlines.
I used a similar approach over a few different areas, on the edit page I used a similar loop to display the step fields and then followed by a Javascript for loop to hide any empty fields:

While looking through my code I realized how I had created the database migration was messy and I hadn't DRY coded it. The small issue is with changing this I would have to do a fresh migration to the database, which will remove all posts/users from my DB but at this stage, it's best to start with DRY code as it's easier to improve now. (this is how it currently looks like):
public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->mediumText('ingredients');
            $table->mediumText('body'); 
            $table->mediumText('step1'); 
            $table->mediumText('step2')->nullable(); 
            $table->mediumText('step3')->nullable(); 
            $table->mediumText('step4')->nullable(); 
            $table->mediumText('step5')->nullable(); 
            $table->mediumText('step6')->nullable(); 
            $table->mediumText('step7')->nullable(); 
            $table->mediumText('step8')->nullable(); 
            $table->mediumText('step9')->nullable(); 
            $table->mediumText('step10')->nullable(); 
            $table->mediumText('step11')->nullable(); 
            $table->mediumText('step12')->nullable(); 
            $table->mediumText('step13')->nullable(); 
            $table->mediumText('step14')->nullable(); 
            $table->mediumText('step15')->nullable(); 
            $table->timestamps();
            //$table->enum('level', ['easy', 'hard']);
        });
    }



This is my approach:

    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->mediumText('ingredients');
            $table->mediumText('body'); 
            $table->mediumText('step1'); 
            for ($x = 2; $x < 16; $x++) {
                $guff = 'step'.$x;
                $table->mediumText($guff)->nullable(); 
            }
            $table->timestamps();
            //$table->enum('level', ['easy', 'hard']);
        });
    }



Now I need to run a terminal command to do a fresh DB migration

    php artisan migrate:fresh



And there we have some cleaned up DRY code. It may not seem like big progress but cleaning up the code will firstly make it run a little better but also allows for future changes to be made easier.


For example, I have set a limit to 15 steps for a recipe, I originally chose this as I didn't want to code in any more than 15 as it was looking messy. Now I've created the code in for loops extending the limit of steps is now a much simpler task. And requires changing the number in the for loops... :)


Thanks for reading and following the process, I'd love to hear from you. Feel free to drop a comment below. Feedback is key to my learning!

Leave Creating a new project | #05 - DRY code to:

Written by

Vlogger & Developer - Co Founder of DTubeDaily

Read more #dev posts


Best Posts From SlayerKM

We have not curated any of slayerkm's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From SlayerKM