Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java(no)Beans

Avatar for federico federico
November 17, 2012

 Java(no)Beans

I JavaBean ci accompagnano dall’alba dei tempi di Java. Mille annotazioni si ammonticchiano sui metodi per chiedere ai framework di fare la cosa giusta. E se spazzassimo via tutto in un colpo solo? Evitando i JavaBean si scrive meno codice, il software si adatta piu' facilmente alle evolutive e soprattutto lavorare e' piu' divertente.

Avatar for federico

federico

November 17, 2012

More Decks by federico

Other Decks in Programming

Transcript

  1. Federico Fissore [email protected] – JUG Torino List strings = new

    LinkedList(); strings.add(“hello!”); String s = (String) strings.get(0);
  2. Federico Fissore [email protected] – JUG Torino List<String> strings = new

    LinkedList<String>(); strings.add(“hello!”); String s = strings.get(0);
  3. Federico Fissore [email protected] – JUG Torino @Table(uniqueConstraints = @UniqueConstraint(columnNames =

    { "name" })) @Entity public class User { @NotNull @Column(nullable = false) private String password; @NotNull @Size(min = 1, max = 255) @Column(nullable = false) private String name; @Future @Temporal(TemporalType.TIMESTAMP) private Date expiration; @Id @GeneratedValue(generator = "increment") @GenericGenerator(name = "increment", strategy = "increment") public Long getId() { return id; }
  4. Federico Fissore [email protected] – JUG Torino @Table(uniqueConstraints = @UniqueConstraint(columnNames =

    { "name" })) @Entity @XmlRootElement public class User { @NotNull @Column(nullable = false) @XmlTransient private String password; @NotNull @Size(min = 1, max = 255) @Column(nullable = false) private String name; @Future @Temporal(TemporalType.TIMESTAMP) private Date expiration; @Id @GeneratedValue(generator = "increment") @GenericGenerator(name = "increment", strategy = "increment") public Long getId() { return id; }
  5. Federico Fissore [email protected] – JUG Torino @XmlRootElement(name=”user”) public class UserWithAddress

    { private String name; private Date expiration; private Address address; @Table @Entity @XmlRootElement public class Address { @NotNull @Column(nullable = false) private String street; @NotNull @Column(nullable = false) private String city; @Id @GeneratedValue(generator = "increment") @GenericGenerator(name = "increment", strategy = "increment") public Long getId() { return id; }
  6. Federico Fissore [email protected] – JUG Torino public interface UserMapper {

    Map<String, Object> getUser(long userId); Map<String, Object> getUserAddress(long userId); }
  7. Federico Fissore [email protected] – JUG Torino <select id="getUserAddress" parameterType="long" resultType="java.util.LinkedHashMap">

    SELECT a.street, a.city FROM ADDRESSES a INNER JOIN USERS u ON (a.user_id = u.id) WHERE u.id = #{userId} </select>
  8. Federico Fissore [email protected] – JUG Torino UserMapper userMapper = session.getMapper(UserMapper.class);

    Map<String, Object> user = userMapper.getUser(42); user.put(“address”, userMapper.getUserAddress(user.get(“id”)));
  9. Federico Fissore [email protected] – JUG Torino UserMapper userMapper = session.getMapper(UserMapper.class);

    Map<String, Object> user = userMapper.getUser(42); user.put(“address”, userMapper.getUserAddress((Long) user.get(“id”)));
  10. Federico Fissore [email protected] – JUG Torino { name: “John Doe”,

    expiration: 20121118000000, address: { city: “Roncade”, street: "Via Sile, 41" } }
  11. Federico Fissore [email protected] – JUG Torino public SteroidMap put(String key,

    Object value) { inner.put(key, value); return this; } user.put(“name”,”John Doe”).put(“age”, 33);
  12. Federico Fissore [email protected] – JUG Torino public Long l(String key)

    { return (Long) inner.get(key); } userMapper.getUserAddress(user.l(“id”));
  13. Federico Fissore [email protected] – JUG Torino public SteroidMap map(String key)

    { return new SteroidMap( (Map<String, Object>) inner.get(key) ); } user.map(“address”).s(“street”);
  14. Federico Fissore [email protected] – JUG Torino • Abbiamo visto che

    i framework si cibano di JavaBean • Abbiamo visto che le mappe possono sostituirli, affamando i framework • Abbiamo abbozzato un'implementazione di mappa che toglie da mangiare anche al compilatore
  15. Federico Fissore [email protected] – JUG Torino Dove trovarmi: [email protected] https://twitter.com/fridrik

    http://www.jugtorino.it/ https://github.com/ffissore Cosa faccio: http://presentz.org/ https://github.com/ffissore/presentz.js https://www.opinionage.com/ https://github.com/gabipetrovay/node-orientdb