27
#WPAZ ADVANCED DEVELOPER MEETUP

Reduce, Reuse, Refactor

Embed Size (px)

Citation preview

# W PA ZA D VA N C E D D E V E L O P E R M E E T U P

C H R I S K L O S O W S K I

• Co-Lead Developer - Easy Digital Downloads

• Founding Developer - Post Promoter Pro

• Writing - KungFuGrep.com

• Home brewing

• Weird Dad

• @cklosowski (usually)

cklosowskieasydigitaldownloads.com | kungfugrep.com

T I M E I S M O N E YR A N G I N G F R O M $ 3 0 - $ 1 5 0 / H O U R , D E V T I M E I S N ’ T C H E A P

P R E V E N T I N E F F I C I E N C YT H R O U G H C O D E , W E C A N R E D U C E D E V T I M E

Reduce Code Complexity Reuse Common Patterns Refactor When Needed

C O N T E X T S W I T C H I N G I S B A DH T T P : / / C H R I S K . I O / I / C O N T E X T

I N A P E R F E C T W O R L D …C O N T E X T S W I T C H I N G I S A N E C E S S A R Y E V I L

O P T I M I Z I N G W O R K F L O WM A K I N G O U R A C T U A L “ F L O W ” T I M E M O R E E F F E C T I V E

R E D U C E C O M P L E X I T YT H E H A R D E R T O R E A D , T H E H A R D E R T O F I X

“Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by

definition, not smart enough to debug it.”

-Brian Kernighan: Co-Developer of Unix

W H AT I S C O M P L E X I T Y ?

• Difficult to read

• “Tricky” solutions

• Cyclomatic complexity

• Examples…?

• You Bet!

if ( true === $foo ) {

foreach ( $bar as $key => $baz ) {

$bar[ $key ] = strtolower( $baz );

}

}

H A R D T O R E A Dfunction execute_data_input( $data = array() ) { // Hard to know what is needed to use `execute_data_input` }

function execute_data_input( $arg1 = '', $arg2 = '', $arg3 = '' ) { // Easily readable and defined argument sets }

if($foo==true) { foreach($bar as $key=>$baz) $bar[$key]=strtolower($baz); }

T R I C K Y C O D E

// Input $utm = array( 'campaign' => 'PostPromoterPro', 'source' => 'twitter', 'medium' => 'social', );

// Output is a string utm_campaign=PostPromoterPro&utm_source=twitter&utm_medium=social

T R I C K Y C O D E

$utm_string .= implode( '&', array_map( function ( $v, $k ) { return 'utm_' . $k . '=' . $v; }, $utm, array_keys( $utm ) ) );

$first = true; foreach ( $utm as $key => $value ) { if ( ! $first ) { $utm_string .= '&'; }

$utm_string .= 'utm_' . $key . '=' . $value; $first = false; }

R E U S E C O M M O N PAT T E R N SC R E A T E C O M M O N PA T T E R N S A N D C O N V E N T I O N S

R E U S I N G Y O U R PAT T E R N S

• Standardize

• Function Naming

• Variable Naming

• Directory Structure

• Abstract Data Models

• Build Base Classes

A L L A B O U T T H AT B A S ES L I D E S W I T H O U T A P U N A R E N ’ T R E A L LY S L I D E S …

‣ EDD_Recurring_Gateway‣ EDD_Recurring_2Checkout extends EDD_Recurring_Gateway‣ EDD_Recurring_Authorize extends EDD_Recurring_Gateway‣ EDD_Recurring_Stripe extends EDD_Recurring_Gateway‣ EDD_Recurring_PayPal extends EDD_Recurring_Gateway‣ …

Object Inheritance - When you extend a class, the subclass inherits all of the public and protected methods

from the parent class. Unless a class overrides those methods, they will retain their original functionality.

B U I L D A T E M P L AT EH T T P S : / / G I T H U B . C O M / E A S Y D I G I TA L D O W N L O A D S / E D D - E X T E N S I O N - B O I L E R P L A T E

R E FA C T O R I N G I S O KI T ’ S N O T A N E V I L W O R D A N D I S S O M E T I M E S N E C E S S A R Y

Code refactoring is the process of restructuring existing code without changing its external behavior.

W H Y R E FA C T O RW E ’ R E N O T M A K I N G I T D O A N Y T H I N G D I F F E R E N T ! ?

B E N E F I T S O F R E FA C T O R I N G

• Performance Improvements

• Improve Readability

• Reduce Complexity

• Seeing a Trend?

• Improve Matainability

• Adapt New Best Practices

• Foundation Improvements

• Improve Extensibility

S T O R Y T I M EA ‘ R E C U R R I N G PA Y M E N T S ’ C O M I N G O F A G E TA L E

August 30, 2012 First Commit, Ever

The Recurring Payments Story

January 23, 2015 Pressnomics 3

May 19, 2015 2.4 Development Starts

Jan 28, 2016 Preview Post

Feb 24, 2016 2.4 Goes Live

Jan 21, 2016 Live on AffiliateWP

The Recurring Payments Story

The Recurring Payments Story

• No “Backwards Compatibility” • Introduced Gateway Base Class • Introduced Classes for: • Subscriber • Subscription • Emails • Reminders

• Completely Refactored • Raised the Price