»
S
I
D
E
B
A
R
«
NamedParameters
June 2nd, 2009 by Rikard Qvarforth
Parametrar i allmänhet är rätt svårtydliga speciellt om det är parameterar som är av rå-typ tex String, int etc. Som Martin Fowler så kan det vara ett tecken på
primitive obsession
Men ett annat problem med parametrar är själva ordningen, hur tvingar man en klient att rätt parameter kommer i rätt ordning?

Ett sätt är att skapa named parameter i java.

Här nedan har vi vår test klass över den lilla klassen Person. Persons konstruktor tar i dags läget in två parameterar förNamn och efterNamn.

 Java |  copy code |? 
01
public class PersonTest {
02
 final static String firstName = "Firstname";
03
 final static String lastName = "Lastname";
04
 
05
 @Test
06
 public void shouldCreatePersonWithFirstNameAndLastName() {
07
 Person person = new Person(firstName, lastName);
08
 assertThatNameIsSetOnPerson(person, firstName, lastName);
09
 }
10
 
11
 @Test
12
 public void shouldCreatePersonWithParameterName(){
13
 Person person = new Person(firstName(firstName).lastName(lastName));
14
 assertThatNameIsSetOnPerson(person, firstName, lastName);
15
 }
16
 
17
 @Test
18
 public void shouldCreatePersonWithDiffrentFirstName(){
19
 String karin = "Karin";
20
 Person person = new Person(firstName(karin).lastName(lastName));
21
 assertThatNameIsSetOnPerson(person,karin, lastName);
22
 }
23
 
24
 private void assertThatNameIsSetOnPerson(Person person, String firstName, String lastName) {
25
 assertThat(person, notNullValue());
26
 assertThat(person.getFirstName(), is(firstName));
27
 assertThat(person.getLastName(), is(lastName));
28
 }
29
 
30
}
31

 Java |  copy code |? 
01
02
package domain;
03
 
04
public class Person {
05
 
06
 private String firstName;
07
 private String lastName;
08
 
09
 public Person(final String firstName, final String lastName) {
10
 this.firstName = firstName;
11
 this.lastName = lastName;
12
 }
13
 
14
 public Person(Name name) {
15
 this.firstName = name.firstName;
16
 this.lastName = name.lastName;
17
 }
18
 
19
 public String getFirstName() {
20
 return this.firstName;
21
 }
22
 
23
 public String getLastName() {
24
 return this.lastName;
25
 }
26
 
27
}
28

 Java |  copy code |? 
01
02
 
03
package domain;
04
 
05
public class Name {
06
 
07
 public final String firstName;
08
 public final String lastName;
09
 
10
 private Name(String firstName, String lastName) {
11
 this.firstName = firstName;
12
 this.lastName = lastName;
13
 }
14
 
15
 public static NameBuilder firstName(String firstName) {
16
 return new NameBuilder(firstName);
17
 }
18
 
19
 public static class NameBuilder{
20
 
21
 private String firstName;
22
 
23
 private NameBuilder(String firstName){
24
 this.firstName = firstName;
25
 }
26
 
27
 public Name lastName(String lastName){
28
 return new Name(firstName,lastName);
29
 }
30
 }
31
 
32
}
33
 
34

One Response  
Fredrik Wendt writes:
July 7th, 2009 at 23:08
Intressant, men sablar vilken mängd kod som behöver skrivas för två parametrar. Efter att ha nött lite python ett par veckor får man rysningar ibland. :)
Leave a Reply

»  Substance: WordPress   »  Style: Ahren Ahimsa
© copyright@alltomjava