wordpress clean code development

22
Clean Code Development Jakarta WordPress Meetup #11 Ivan Kristianto @ivankristianto

Upload: wordpress

Post on 23-Jan-2018

156 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: WordPress Clean Code Development

Clean Code DevelopmentJakarta WordPress Meetup #11

Ivan Kristianto@ivankr ist ianto

Page 2: WordPress Clean Code Development

About Me

• My name is Ivan Kristianto

• Professional Web Engineer

• WordPress core contributor

• ElasticPress team member

• Jakarta WordPress Meetup organizer

Page 3: WordPress Clean Code Development

Our Community Page• Please visit our website:

https://wp-id.org• Please join our Facebook group:

https://www.facebook.com/groups/

WordPressDevID/• Please join our Slack:

https://chat.wp-id.org

Page 4: WordPress Clean Code Development

Who Love Spaghetti Code?It Works, but….

Page 5: WordPress Clean Code Development

Problems with Spaghetti Code• Hard to understand

• Patches are everywhere

• Impossible to scale

• Undocumented

• Unpredicted results

• Possible buggy, unsecure and under perform

• Sample click here

Page 6: WordPress Clean Code Development

Write Clean Code Could• Have less bugs

• Save hundreds of hours of your time or somebody else.

• Easier to scale

• More secure

• Maximize performance

Page 7: WordPress Clean Code Development

How to write clean code?

Page 8: WordPress Clean Code Development

Design Patterns1. Use PHP NamespaceUse namespace all PHP code outside of theme templates so its contents don’t conflict with other, similarly-named classes and functions (“namespace collisions”).

Sample:<?php /** * Example of a 'use' declaration */ namespace TenUp\ProjectName\Module; use TenUp\ProjectName\Common\TwitterAPI;

function do_something() { $twitter_api = new TwitterAPI(); }

Page 9: WordPress Clean Code Development

Design PatternsSample

<?php namespace TenUp\ProjectName\Common; /** * Namespaced class name example. */ class TwitterAPI { public function __construct() { // ... } }

Page 10: WordPress Clean Code Development

Design Patterns

2. Decouple a big feature to a pluginIt’s recommended to decouple your big feature to a plugin, so it is reusable in another project. And even better You can open source it, so You can help other people that need your solution. And even better, they can contribute to your code and give your richer perspective.

Page 11: WordPress Clean Code Development

Design Patterns3. Decouple Plugin and Theme using add_theme_supportDisabling the plugin should not results any errors in your Theme code. Use WordPress theme support feature.

Sample

In your themes:<?php add_theme_support( 'my-cool-feature' );

In your plugin:<?php if ( current_theme_supports( 'my-cool-feature' ) ) { // initiate the plugin }

Page 12: WordPress Clean Code Development

Design Patterns

4. DRY ( Do not Repeat Yourself ) codeRefractor your code as a common class or helper functions, so You will never repeat your code in another place.

Page 13: WordPress Clean Code Development

Design PatternsOur single.php and category.php:

<?php get_header(); ?>

<div id="primary" class="content-area"> <?php /* Start the Loop */ while ( have_posts() ) : the_post(); ?><main id="main" class="site-main" role="main"> <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <div class="entry-content"> <?php the_content(); ?> </div><!-- .entry-content -->

</article><!-- #post-## --> <?php endwhile; // End of the loop. ?> </main><!-- #main --> </div><!-- #primary -->

<?php get_footer();

Page 14: WordPress Clean Code Development

Design PatternsRefractor to template part. Our post/content.php template part

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

<div class="entry-content"> <?php the_content(); ?> </div><!— .entry-content -->

</article><!-- #post-## -->

Page 15: WordPress Clean Code Development

Design PatternsOur single.php and category.php:

<?php get_header(); ?>

<div id="primary" class="content-area"> <?php /* Start the Loop */ while ( have_posts() ) : the_post(); ?><main id="main" class="site-main" role="main"><?php

get_template_part( 'template-parts/post/content' ); endwhile; // End of the loop. ?> </main><!-- #main --> </div><!-- #primary -->

<?php get_footer();

Page 16: WordPress Clean Code Development

Design Patterns

5. For Javascript, use closure and don’t pollute window object

Adding methods or properties to the window object or the global namespace should be done carefully. window object pollution can result in collisions with other scripts. We should wrap our scripts in closures and expose methods and properties to window decisively

Page 17: WordPress Clean Code Development

Design PatternsSample:<script> function my_awesome_function(){ // do your awesome function } </script>

What happen if some other plugin use the same function name? It will cause collision.

Page 18: WordPress Clean Code Development

Design PatternsSample closures:<script> ( function() { function my_awesome_function(){ // do your awesome function }

})(); </script>

Page 19: WordPress Clean Code Development

Code Style• Use standard naming conventions.

• Fully documented classes/functions in Doc Block

• Indentation is a must!

• Use WordPress Coding Standards Sniffer: https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards

• Read more: https://10up.github.io/Engineering-Best-Practices/php/

• Read more: https://make.wordpress.org/core/handbook/best-practices/coding-standards/

Page 20: WordPress Clean Code Development

Understand Your Code

• Always understand each line of your codes, and the solution You provide in the bigger picture.

• Read WordPress codex, see arguments and the return value.

• Never cheat/shortcut/short circuit your code.

• Before commit/submit/push, re-read your code, twice!

Page 21: WordPress Clean Code Development

Misc. Tips• Use PHP Composer Autoloading.

• Use Git as your source code management.

• Fail early and often patterns.

• Do not have more than 2 level if-else.

• Keep your mind healthy and know when to take a break.

Page 22: WordPress Clean Code Development

Code is Poetry