Você está na página 1de 40

Best Practices in Java Development

JA-SIG Summer Conference


Denver, CO
June 24 27, 2007

Best Practices in Java Development

Who am I?
Im Scott Battaglia!
Application Developer @ Rutgers
Java Developer for 5+ Years
Lead Developer/Architect on JA-SIG CAS
Committer to Acegi Security

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Agenda

Methodologies
Language Features
Non Language Specific
Tool Chest
Discussion

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

1.
Methodologies

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Test Driven Development


Writing a test case and implementing only
code necessary to pass test
A method of designing software, not merely a
method of testing
Can still produce crappy code
Unit vs. Integration Tests
Useful when used judiciously

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Test Driven Development


Three rules from Uncle Bob
You are not allowed to write any production code unless it is
to make a failing unit test pass.
You are not allowed to write any more of a unit test than is
sufficient to fail; and compilation failures are failures.
You are not allowed to write any more production code than is
sufficient to pass the one failing unit test.

http://butunclebob.com/ArticleS.UncleBob.TheThreeR
ulesOfTdd
JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Test Driven Development


What makes a good unit test?
Run fast (they have short setups, run times, and break
downs).
Run in isolation (you should be able to reorder them).
Use data that makes them easy to read and to understand.

Use real data (e.g. copies of production data) when they need
to.
Represent one step towards your overall goal.

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Domain Driven Design


The premise of domain-driven design is two-fold:
For most software projects, the primary focus should be on the
domain and domain logic; and
Complex domain designs should be based on a model.

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Domain Driven Design


Business people talk naturally in Business terms
(using ubiquitous language):
- Open grading period, Pending class roster,
Student eligible for grading, Course grading policy,
etc.
Objects shift language from data to behavior
- Away from flags and if conditions
- Toward responsibilities and naming

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Domain Driven Design


Models the business domain concepts
Maps to Screens and DB
Easier to test, and change
Reusable (different application clients)

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Domain Driven Design


Business logic can be complex
- Rules in Domain Model (DM) describe the many
cases & variations
DM creates a web of interconnected objects where
each represents a meaningful concept some as large
as an entire company or as small as a persons name

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Iterative Development
Cyclic/incremental
Milestones, Release
Candidates
Feedback before its too
late!
Allows you to take
advantage of previously
gained knowledge

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Code Reviews
Systematic examination of course code
Goals
Improve quality of code
Share knowledge

Ideally
Short
Focused on code

Many ways of doing it

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Aspect Oriented Programming


Deals with the separation of concerns (cross-cutting
concerns)

Breaking down a program into distinct parts that


overlap in functionality as little as possible
Examples
Transactions, logging, security, ContractByDesign

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

2.
Language Features

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

final Keyword
Used as follows:
final Object o = new Object();

Advantages:

Prevents accidental assigning of variables


Turns logical errors into compile errors
JVM can optimize final constants
Limit Scope of Variables

Gotchas:
Final primitives and Strings are substituted at compile-time
Final means no variable re-assignment
JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

StringBuilder
Usage:
final StringBuilder builder = new StringBuilder(50);
builder.append(myString);
builder.append(moreOfMyString);

StringBuilder vs. StringBuffer vs String

Best Guess StringBuilder size

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Enumerations
Traditional Enumerations:
public final int ENUM_VALUE_1 = 1
public final int ENUM_VALUE_2 = 2

Type Safe Enums:


Implementation of Java classes

Java 5 Enumerations
enum COLOR {BLACK, WHITE, RED, GREEN, BLUE, YELLOW}

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

JPA
JPA is
Java Persistence API
-Entities
Java Persistence Query Language

Advantages
Pluggable backend (TopLink, Hibernate, etc.)
Database agnostic DAO layer
No complex mapping files

Disadvantages
Difficult to retrofit legacy tables
JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

PreparedStatements
Statements vs. PreparedStatements
Advantages:
Compiled
Correctly escape characters
As of JDBC 3, can be pooled

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Annotations
Extra information associated with Class, Method,
Variables

Most useful for non-frequently changing information


Keeps meta data and object together
Examples:
Spring Transactions
CAS Property Validation

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

3.
Non-Language Specific

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Design Patterns
Recurring solutions to common problems
Solve design problems not computational problems
Five types of Patterns
Benefits:
Easy to understand code
General solutions
Allow people to communicate using the same language

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Model-View-Controller
Division of Labor into the following parts:
Those responsible for business logic (the Model -- often
implemented using Enterprise JavaBeans or plain old Java
objects).
Those responsible for presentation of the user interface (the
View).
Those responsible for application navigation (the Controller -usually implemented with Java servlets or associated classes
like Struts controllers).

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Interfaces
Interface vs. Abstract Class
Coding to Interfaces
Examples
Collections Framework
CAS

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Logging
Makes debugging easier
Everywhere you would have put a System.out, put a
logger statement
log.isXXXXEnabled() vs. log.XXXX(data)
Logging via AOP

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Exception vs. Runtime Exception


Two types of Exceptions in Java
Exception (checked)
Runtime Exception (unchecked)

Checked Exceptions indicate something that can be


handled.

Unchecked Exceptions indicate something that cant


be.

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Don't Re-Invent the Wheel


Use Common well know frameworks
Spring, Hibernate, Web Flow, Acegi...

Don't fall for not invented here syndrome


Balance needs of application vs. library

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Documentation & Comments


Documentation is pretty much the bane of all
developers existences

Be sure to place comments in code, but dont put too


much
// send the mail message
javaMailSender.send(message);

You never know when you need to revisit your code


Document methods, classes, configuration

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Unit Testing

Use a Code Coverage tool


Don't Mandate 100% test coverage
Add tests when you see they don't exist
Add tests to prove a bug
Run your tests frequently
Make sure the tests execute quickly
Dont let the tests become out of date
Dont throw them away when they stop passing - fix
them!

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

4.
Tool Chest

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Build Tools

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Wiki

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Issue Tracking

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Continuous Integration

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Version Control

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Integrated Development Environment

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

5.
Discussion

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

Further Reading..
Thinking in Java by Bruce Eckel
J2EE Design and Development by Rod Johnson
Refactoring: Improving the Design of Existing Code by
Martin Fowler
Effective Java by Joshua Bloch
Domain Driven Design by Eric Evans

JA-SIG Summer Conference June 24 June 27, 2007

Best Practices in Java Development

?
What are Your Best Practices?

JA-SIG Summer Conference June 24 June 27, 2007

Você também pode gostar