4 czerwca 2008

Implementacja zaślepek serwisów danych z użyciem Spring’a

Wyobraźmy sobie, że implementujemy pewien system, którego elementem są serwisy danych. Zanim jednak zaimplementujemy te serwisy porządnie, chcielibyśmy mieć jakieś zaślepki (ang. stubs), chociażby po to, aby umożliwić innym członkom zespołu implementację i testowanie innych komponentów. W zasadzie chyba nie trzeba sobie tego wyobrażać, jest to częsty scenariusz, więc wystarczy sobie przypomnieć.

Implementujemy więc klasę, która bazuje na danych obecnych w pewnej kolekcji, np. w Map’ie. Pozostaje jeszcze jeden problem – jak wypełnić tą kolekcję danymi i się przy tym nie napracować. Załóżmy dla ustalenia uwagi, że nasz serwis wygląda tak jak pokazano poniżej.

public class SomeDataService implements DataServiceInterface {

private Map<String, Map<String, List<MyData>>> dataStore;

public void setDataStore(Map<String, Map<String, List<MyData>>> dataStore) {
this. dataStore = dataStore;
}

// implementacja operacji na powyższej strukturze danych
}

public class MyData {

private String dataSetName;

// kolejne zmienne i operacje set/get
}

To, czego zwykłem aż do tej pory używać w takich okolicznościach to biblioteka XStream, o której pisałem w artykule "Serializacja do XML i deserializacja przy użyciu XStream". Pare dni temu jednak coś mnie tknęło. Myślę sobie – używam przecież i tak Spring’a, a ten ma możliwość inicjalizacji zmiennych. Kilka chwil później czytam już dokumentację i widzę, że rzeczywiście, możliwości są duże i jak najbardziej da się inicjalizować także kolekcje. Poniżej fragment konfiguracji Spring’a, pokazujący jak to zrobić dla naszego przypadku.

<bean id="dataService" class="pl.package.SomeDataService">
<property name="dataStore">
<map>
<entry key="keyA">
<map>
<entry key="subkeyA">
<list />
</entry>
<entry key="subkeyB">
<list>
<bean class="pl.package.MyData">
<property name="dataSetName" value="setA" />
</bean>
</list>
</entry>
</map>
</entry>
</map>
</property>
</bean>

1 komentarz:

damamax pisze...

Polecam datasety połączone z JUnitami