0
SimplePureJava                    Anton Keks             anton@codeborne.com          
The Enterprise...           
Enterprise Architecture    20 years ago a new field was born, addressing    System complexity = more and more        money...
Complexity            
!         O      BO     ☠   
Your average Java (web) app    ●   Framework (JSF?)    ●   Model    ●   Portal?    ●   Services!    ●   Remote services, S...
...    ●   Patterns!    ●   Factory, Singleton, Facade    ●   Enterprise patterns!    ●   DTO, DAO, etc    ●   Getters/set...
Bad words     Layer          Tier    Bus           Context     Manager     Locator     Assembler    Bean             Broke...
EAR, WAR, WAR, WAR      Configuration, descriptors!                  JNDI!                 ESB? ;-)    Must be a wizard to...
For a small thing we create    ●   ManagedBean    ●   MegaServiceWrapper    ●   CoreServiceLocal, Stub (JNDI lookup?)    ●...
The result?                             ☠    ●   It kills productivity    ●   Thousands lines of code, very few         fu...
What to do?    ●   Concentrate on domain terminology          ●   This was the intention of OOP    ●   Avoid overly defens...
Java platform and language    ●   Java (EE) is a victim of JCP           ●   Many unreal/unusable JSRs    ●   Stick to pro...
Code style    ●   Is your code style limiting readability?           ●   Avoid too many line breaks and braces           ●...
Code style    ●   Avoid over-indenation (or code ladder)        public void startCharging() {          if (customer.hasFun...
Code style    ●   Prefer shorter code (use static imports)        List<Integer> list = Arrays.asList(1, 2, 3));        lis...
Code style    ●   Prefer good naming to comments    ●   Avoid getters/setters, equals, hashCode,         toString unless n...
Proper Java app    ●   Jetty Launcher (esp in development)    ●   Know the APIs well: servlets, filters, etc    ●   Avoid ...
Web UI    ●   Your framework tells you dont need to         know JavaScript? (GWT, JSF, etc)    ●   B.S.!    ●   Keep it u...
Worth reminding...    ● Dont Repeat Yourself    ● Keep It Simple Stupid    ● You Aint Gonna Need It    ● Test Driven Devel...
Lets continue ongithub:github.com/angryziber/simple-javajob@codeborne.com                     
Upcoming SlideShare
Loading in...5
×

Simple Pure Java

9,285

Published on

How to bring fun back into Java enterprise development

Published in: Technology, Education
0 Comments
14 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
9,285
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
69
Comments
0
Likes
14
Embeds 0
No embeds

No notes for slide

Transcript of "Simple Pure Java"

  1. 1. SimplePureJava Anton Keks anton@codeborne.com   
  2. 2. The Enterprise...   
  3. 3. Enterprise Architecture 20 years ago a new field was born, addressing System complexity = more and more money for building IT systemsPoor business alignment = more difficult to keep those increasingly expensive systems aligned with business need A problem of more cost, less value Today: even more cost, even less value   
  4. 4. Complexity   
  5. 5. ! O BO  ☠  
  6. 6. Your average Java (web) app ● Framework (JSF?) ● Model ● Portal? ● Services! ● Remote services, SOA, EJB ● JNDI ● Stubs, generated code ● How many layers?   
  7. 7. ... ● Patterns! ● Factory, Singleton, Facade ● Enterprise patterns! ● DTO, DAO, etc ● Getters/setters (whats the deal - generate em) ● JPA, JAXB ● JMS!   
  8. 8. Bad words Layer Tier Bus Context Manager Locator Assembler Bean Broker Facade Transfer Object DAO … Its always nice to see guys like SessionServiceContextManager or AbstractStrategyFactoryProxyFacadeBuilder   
  9. 9. EAR, WAR, WAR, WAR Configuration, descriptors! JNDI! ESB? ;-) Must be a wizard to make it all run! Improves job security index :-)   
  10. 10. For a small thing we create ● ManagedBean ● MegaServiceWrapper ● CoreServiceLocal, Stub (JNDI lookup?) ● CoreService (&& CoreServiceImpl) ● AggregatedService ● ConcreteService ● ConcreteDAO ● JPAAdapter  ● ...  
  11. 11. The result? ☠ ● It kills productivity ● Thousands lines of code, very few functionality ● Well hidden ”business logic” ● N minute deploy time (+ N minutes app server startup) ● Oops, sometimes redeploy doesnt work, need to restart ● Slow UI responsivness   
  12. 12. What to do? ● Concentrate on domain terminology ● This was the intention of OOP ● Avoid overly defensive code ● You are not writing a framework! ● Fellow developers are friends ● Follow Clean Code by Robert C. Martin   
  13. 13. Java platform and language ● Java (EE) is a victim of JCP ● Many unreal/unusable JSRs ● Stick to proven open-source stuff ● Less standards – the better ● Java language is ok ● The biggest miss are closures ● DSLs are possible: Mockito, LambdaJ ● Dont bloat (generate) your code   
  14. 14. Code style ● Is your code style limiting readability? ● Avoid too many line breaks and braces ● Emphasize what is important public int size() { public int size() { if (root == null) { if (root == null) return 0; return 0; return root.numSiblings(); } } else { return root.numSiblings(); } public int size() { } return root != null ? root.numSiblings() : 0; }   
  15. 15. Code style ● Avoid over-indenation (or code ladder) public void startCharging() { if (customer.hasFunds()) { if (!station.isCharging()) { if (!station.currentlyBooked()) { reallyStartCharging(); return; } } } throw new UnableToStartException(); } public void startCharging() { if (!customer.hasFunds()) throw new UnableToSta if (station.isCharging()) throw new UnableToSta if (station.currentlyBooked()) throw new Unable reallyStartCharging(); }   
  16. 16. Code style ● Prefer shorter code (use static imports) List<Integer> list = Arrays.asList(1, 2, 3)); list = Collections.unmodifieableList(list); return list; import static java.util.Arrays.*; import static java.util.Collections.*; ... return unmodifiableList(asList(1, 2, 3)) Looks a bit like functional programming, isnt it?   
  17. 17. Code style ● Prefer good naming to comments ● Avoid getters/setters, equals, hashCode, toString unless necessary ● Break free from conventions ● Work towards a DSL when(session.currentUser()).thenReturn(fakeUser); assertThat(person.age, is(25)); sort(people, on(Person.class).getAge());   
  18. 18. Proper Java app ● Jetty Launcher (esp in development) ● Know the APIs well: servlets, filters, etc ● Avoid vendor-specific stuff ● Keep environment-specific configuration in version control ● Dependency Injection ● Avoid scattering cross-cutting concerns ● DB migrations (w/ liquibase/dbdeploy)  ● Start thin and simple, prefer higher SNR  
  19. 19. Web UI ● Your framework tells you dont need to know JavaScript? (GWT, JSF, etc) ● B.S.! ● Keep it under control: learn basics of JQuery instead ● Knockout.js, Backbone.js can help ● You are not limited with Java syntax on the client side :-)   
  20. 20. Worth reminding... ● Dont Repeat Yourself ● Keep It Simple Stupid ● You Aint Gonna Need It ● Test Driven Development   
  21. 21. Lets continue ongithub:github.com/angryziber/simple-javajob@codeborne.com   
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×