Organized Code

and

Application Structure

Objectives

  • Gain an appreciation for the extreme scale of industrial software projects.
  • Define the term "Design Pattern"
  • Define the components of the "MVC" design pattern:
    • Model
    • View
    • Controller
  • Design an application structure using "MVC"

Q1 Projects:

  • Was it harder to make small changes?
     
  • Did you ever realize you had made a bad decision that you had to fix?
     
  • How did your code style affect your ability to add new features?
     
  • How did the size of the project affect your coding process?
    • Contrast this with the shorter assignments you've been used to.

Real Projects Are Huge

Word Press (legitimate huge company):

    32,000+ commits

    20+ active branches

    500,000 lines of php

 

iLoveOpenSource (small open source project):

    255+ commits

    2 active branches

    26,000 lines of code

   

Real Projects Are Huge

Kuma, the project powering MDN:

    10,000+ commits

    30+ active branches

    500,000 lines of python, HTML, CSS & JS

   

Enterprise FizzBuzz, a parody of architecture gone wrong:

  2000 lines of Java code to complete fizz-buzz

Managing Complexity

As projects grow adding features becomes harder.

  • In order to keep developer efficiency high the structure must of a code base must also be managed.

 

  • Projects are typically "refactored" when the complexity starts to seriously hamper developer effectiveness.

 

  • The decay of code over time is often called "Technical Debt" and should be paid off regularly.

 

 

Managing Complexity

  • Developers also create mental models, and design patterns to manage complexity.

     
  • Many web frameworks (rails, django) force adherence to a specific design pattern

     
  • Design Patterns, even when not strictly enforced, make it easier for developers to find specific pieces of code

Some Simple "Rules"

KISS: Keep It Simple, Stupid!

When you write a feature, ask yourself it could be done more simply.

 

DRY: Don't Repeat Yourself

If you see the same block of code more than 2 places, put it into a function and reuse it instead.

 

YAGNI: You Ain't Gonna Need It

If you think you might need something in the future, but you don't need it right now... You ain't gonna need it.

Design Pattern:

"a design pattern is a general repeatable solution to a commonly occurring problem in software design. A design pattern isn't a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations."

Design Pattern:

A design pattern is kind of like a cookie cutter. Any kind of delicious cookie can be cut into the same shape, but remain uniquely flavored.

 

"classes" and "instances" are such a popular design pattern that they've been built into many programming languages.

Design Pattern:

There are THOUSANDS of design patterns. Do some reading, common patterns for additional research are:

 

The Factory Pattern

The Singleton Pattern

Continuation Passing Style

Recursion :)

 

But these are all tabled for later.

Model View Controller

Possibly the most well known web server design pattern

View

Controller

Model

Model View Controller

The Data Model

 

  • Defines the application data and it's structure

 

  • Database tables are typically the 'source of truth' for the model

 

View

Controller

Model

Model View Controller

The View

 

  • Represents anything seen by the user

 

  • HTML files are an example of views

 

  • Users might interact with the views

 

View

Controller

Model

Model View Controller

The Controller

 

  • Handles all communication between the model and the view

 

  • Routing is an example of a "controller" task.

 

View

Controller

Model

Model View Controller

Layered Cake Analogy

 

MVC applications are like a layered cake. All three layers must be assembled before the cake is complete, and for a bite of cake to be optimally satisfying, all three layers should be eaten at once.

 

So, why might this be good?

View

Controller

Model

How Do We Apply This?

  • MVC applies to how we organize our code.
  • We separate the code controlling each layer so that navigating through large code-bases is easier
  • We separate the code so that changes to one aspect of the code don't have to cause cascading changes through the whole application
  • It's better to actually have "layered cupcakes"

Introspection Time

Think about the booklist application you built over the weekend.

 

Without writing any code, identify the components of this application as they fit into our three categories:

Model

View

Controller

 

Take 5 minutes to look at your own code and decide

Pairing Time

Think about the booklist application you built over the weekend.

 

Take 5 minutes to discuss with your neighbor what features of your application belong in which categories. Where do you agree and disagree?

Sharing Time

Think about the booklist application you built over the weekend.

 

Alright everyone, what do you think?

Planning Time

Think about the booklist application you built over the weekend.

 

We've identified some features. Lets design an application structure together that makes sense for the booklist in an MVC pattern.

Eating Time

Lunch rules. We're going to focus on an Express tool that helps us control our controllers after lunch, and refactor our booklists to use this tool.

 

if you want a preview, google: "Express Router"

Complexity & MVC

By Tyler Bettilyon

Complexity & MVC

  • 1,400