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:
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
- Food shopping sucks! - Day in the life vlog!
- 10 Kill Warzone Win! - SlayerKM Stream Clips
- First Day in the life 3speak vlog!
- Warzone Trio Dub!!!! - SlayerKM Stream Clips
- 3Speak Introduction Video
- I Found this DDaily gem!
- Never let me drive haha - SlayerKM Stream Clip
- It's been a while...
- Bruen is back! - Warzone Steam Clips!
- Creating a new project | #07 - Adding functionality
- Creating a new project | #06 - Testing deployment
- Creating a new project | #05 - DRY code
- Creating a new project | #04 - Building CRUD posts functionality
- Creating a new project | #03 - Setting up authentication
- Creating a new project | #02 - Setting up
- Creating a new project | #01
- Starting a Business From Scratch EP 001 - Making Money With Your Passion
- Another great day in the forest!!
- The holiday's off to a great start!!!
- Holiday time!!!