user interface principles in api design

Post on 05-Jan-2016

36 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

User Interface Principles in API Design. Elliotte Rusty Harold elharo@metalab.unc.edu http://www.cafeaulait.org/. Programmers Are People Too. Eat Like Humans Sleep Like Humans Mate Like Humans Think Like Humans. User Interface Design is a Science. - PowerPoint PPT Presentation

TRANSCRIPT

User Interface Principles in API Design

Elliotte Rusty Harold

elharo@metalab.unc.edu

http://www.cafeaulait.org/

Programmers Are People TooProgrammers Are People Too

Eat Like HumansSleep Like HumansMate Like HumansThink Like Humans

User Interface Design is a User Interface Design is a ScienceScienceBased on hypothesis, observation

and experimentWell-proven, well-tested theories

Fundamental PrinciplesFundamental Principles

Consistency is next to godlinessSimpler is betterVisible complexity is badSmaller equals easier to use

Libraries vs. ApplicationsLibraries vs. Applications

Applications are monolithicOnly other programmers on the

same team use an application’s APILibraries can make very limited

assumptions about how, when, where, and why API will be invoked

Boundary is fuzzy

Remember the PeopleRemember the People

Why you need an APIWho uses the APIWho designs the API

Be User FocusedBe User Focused

Ask what the user wants to do with your API

Do not ask what the internal data structures and algorithms look like

High level API is better than lower level--Reduce the number of method calls needed to accomplish the task

Design from the outside in

What to put in an APIWhat to put in an API

Write sample programs first

80/20 rule

Maximal vs. Minimal APIs

YAGNI

When in doubt, leave it out!

Why I’m a conservative

DependenciesDependencies

Platform versionLibrary dependenciesBuilt-in vs. 3rd party libraries

Data EncapsulationData Encapsulation

Public vs. Published Fields are private Methods are mostly private Methods are atomic Constructors and destructors Communicating with the user

ConstraintsConstraints

APIs must enforce domain validity

PreconditionsPostconditionsClass invariantsSystem invariants

Error HandlingError Handling

Specify what happens on bad input as well as good

Important for securityNo undefined behaviorDon’t silently swallow exceptionsError messages should be verbose

but clearDon’t warn the user

Naming ConventionsNaming Conventions

Review naming conventionsUse standard terminologyDo not abbreviateUse domain specific vocabularyConsistent terminology: always use

the same word for the same idea– e.g. add vs. append

Do not use two words for one idea

Avoid ComplexityAvoid Complexity

Prefer classes to interfacesPrefer constructors to factory

methodsAvoid excessive abstractionYou usually don’t need multiple

implementationsRefactor to patterns; don’t start with

them. Avoid pattern overload!

InheritanceInheritance

Prefer finality– (at least on methods)

Factories and interfacesThe proper use of protected

Plays well with others (Java):Plays well with others (Java):

Serializable Cloneable(*) Comparable equals() hashCode() toString() Exception handling Thread safety

Plays well with others (.NET):Plays well with others (.NET):

Equals() / GetHashCode() ToString() IEquatable<T> / IComparable<T> “Collection” suffix for IEnumerable classes Icloneable* Override ==, etc. for value types (only) No pointer arguments to public methods Don’t throw exceptions from overloaded

operators and implicit casts

TestabilityTestability

The API itselfClient code that uses the APIThis is a secondary concern

DocumentationDocumentation

SpecificationQuick StartTutorialsExample codeAPI DocumentationPer method checklist

Conformance TestingConformance Testing

SpecificationsTest SuitesImplementation dependent behaviorImplementation dependent

extensions

MaintenanceMaintenance

Planning for the futureForwards compatibilityBackwards compatibilityUnexpected limitsDeprecationBreaking compatibilityInterfaces vs. classes

The Last Concern (Performance)The Last Concern (Performance)

SpeedSizeEnergy

Case Study: JMidi vs. JFugueCase Study: JMidi vs. JFugue

Case Study: DOM vs. JDOMCase Study: DOM vs. JDOM

Case Study: BoxLayout vs. Case Study: BoxLayout vs. GridBagLayoutGridBagLayout

Further ReadingFurther Reading

Effective Java: Joshua BlochEffective C#: Bill WagnerFramework Design Guidelines:

Krzysztof Cwalina, Brad AbramsTog on Interface: Bruce TognazziniGUI Bloopers: Jeff Johnson

top related