Download What`s New in JA

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Best Practices in Java Development
JA-SIG Summer Conference
Denver, CO
June 24 – 27, 2007
Best Practices in Java Development
Who am I?
• I’m 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 person’s 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 can’t
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
developer’s existences
• Be sure to place comments in code, but don’t 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
Don’t let the tests become out of date
Don’t 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