PDA

View Full Version : [JAVA] sono un po' indietro, e i nuovi pattern mi mettono in difficoltà..


TorpedoBlu
04-03-2010, 10:14
ciao ragazzi, sviluppo java da qualche anno (J2EE) ma purtroppo in ambito bancario siamo alla java4

cerco di mantenermi aggiornato, ma a volte faccio proprio fatica.
I generics penso di averli capiti ma ci sono esempi in rete che mi risultano difficili, ad esempio :

un interesante pattern chiamato Assigner Design Pattern

dice:

A final variable is used to define a constant value and reference, and can only be defined once. In most cases, declaring a final variable is just a matter of assigning to a primitive value or an object reference directly. However, in some cases, declaring a final class/instance variable may be more involving especially it gets assigned from a method that throws an Exception (eg API for database access, web access), or it may involve multiple statements.

Editors Note: This content was submitted by geekycoder

In such cases, the code may become cluttered with class helper methods and dummy temporary variables that help define the final variable, making the code look less elegant and harder to maintain. The following common ways of declaring a final variable in those situations might look familiar to many.

http://geekycoder.files.wordpress.com/2010/03/image.png

Recommended way: Assigner Design Pattern

A better way to declare final instance/class variable is to use Generic method and interface with the advantages of

* forcing initializing method in the same statement as the final variable declaration.
* reusing as design pattern (term: Assigner Design Pattern) and enhancing code readability

There is generic helper class whose interface and method accept a parametric type similar to the type of final variable. The advantage of using Generics is that the type mismatch will be caught at compile time rather than runtime. This design pattern is termed Assigner because it assigns value to a variable from initializing method.


http://geekycoder.files.wordpress.com/2010/03/image2.png

Using the design pattern, the code becomes cleaner and elegant.

http://geekycoder.files.wordpress.com/2010/03/image3.png




qualcuno mi illumina?

TorpedoBlu
04-03-2010, 10:20
nel senso, lui definisce una inner interface (non mi piace) che ha in firma due generics.

Poi nella classe di business definisce String come implementazione e implementa il metodo secondo il contratto dell'interfaccia.

in questo modo definisce una costante attraverso l'interfaccia assignable.

Ma l'utilità di questo pattern e soprattutto il modo contorto con cui è usata una inner interface?
Per non parlare del fatto che una costante è costante per l'applicazione ma penso anche per lo sviluppatore, io ci metterei delle costanti (vere) dietro ad un factory se proprio vogliamo farlo dinamico.

no?

banryu79
04-03-2010, 11:35
Credo che il "grosso" vantaggio sia riassumibile in quello che hai già quotato tu prima:

* forcing initializing method in the same statement as the final variable declaration.

In pratica trovi tutto in un unico punto del codice, e non in un metodo "sperso" all'interno della classe.

Questa affermazione, però:

Using the design pattern, the code becomes cleaner and elegant.

la trovo assolutamente arbitraria, che il codice così sia più "pulito" ed "elegante" è soggettivo.

PGI-Bis
04-03-2010, 12:53
Mi pare che siamo tutti d'accordo sul fatto che quel pattern sia una stupidaggine.

Ciò premesso, quell'interfaccia altro non è che una funzione, un alter ego di new, col vantaggio di essere polimorfico e parametrico.

Ma il quell'obbrobrio se ne perde giustamente il senso.

TorpedoBlu
04-03-2010, 15:18
Mi pare che siamo tutti d'accordo sul fatto che quel pattern sia una stupidaggine.

Ciò premesso, quell'interfaccia altro non è che una funzione, un alter ego di new, col vantaggio di essere polimorfico e parametrico.

Ma il quell'obbrobrio se ne perde giustamente il senso.

a ecco, poi ne inner/nested interface proprio non le digerisco (come gli snap di codice sparso)

PGI-Bis
04-03-2010, 15:37
Mah, devo dire che potendo le evito anche io. Più che altro per ragioni estetiche. Non si può tuttavia dire che non siano normali in Java.

L'alternativa sarebbe avere - che Sant'Eufemio ci protegga - le funzioni

banryu79
04-03-2010, 16:01
A me invece non dispiacciono poi così tanto; anche se non ne vado matto.

WarDuck
04-03-2010, 18:52
Sarò breve: non mi piace.