High-Level-Test auf Basis eines Serviceentwurfs beginnen und die fehlende Geschäftslogik in der Domäne implementieren, bis der Test erfolgreich durchläuft.
Abb. 4–1In der Onion Architecture bilden die Application Services die API-Schicht des Application Core.
Component Boundary und Vertical Slices
Nicht nur im API-Layer findet man Services, denn in einer komponentenbasierten Architektur kann die Applikation nicht nur in Schichten, sondern auch in vertikale Schnitte (vertical slices) eingeteilt werden, sodass kleinere Komponenten entstehen, die durch definierte Schnittstellen miteinander verbunden sind. In diesem Sinne unterstützt API-Design bei der Bildung einer modularen Codebasis.
Abb. 4–2Die Applikation ist in Schichten und vertikale Schnitte eingeteilt. Die entstandenen Komponenten sind durch wohldefinierte Schnittstellen integriert.
4.4Framework
Frameworks bieten wiederverwendbare Funktionen und Erweiterungspunkte in Form von Interfaces und abstrakten Klassen, die von Benutzern des Frameworks zu erweitern sind. Auch objektorientierte Ansätze wie Callback- und Template-Methoden sind charakteristisch für Frameworks. Im Gegensatz zu einem Service nutzt ein Framework häufig eine Umkehrung der Steuerung (inversion of control), bei der der Entwickler eine konkrete Implementierung registriert, die dann durch das Framework genutzt und gesteuert wird.
Frameworks können großen Einfluss auf die Architektur einer Applikation haben. Charakteristisch sind Callback-Methoden, Dependency Injection und Annotationen zur Steuerung des Lebenszyklus von Objekten. Beispiele sind die Beans des Spring Framework und die Enterprise JavaBeans (EJBs) des Java-EE-Standards. Auch das Framework JUnit prägt die Funktionsweise von Testfällen, denn Testfälle durchlaufen einen fest definierten Lebenszyklus. Mit speziellen Annotationen des Frameworks markierte Methoden können vor und nach der Testfallausführung aufgerufen werden.
4.5Eine Frage der Priorität
Die Frage lautet nicht, ob man API-Design anwendet, sondern wie viel.
Die obige Liste, die sich wahrscheinlich fortsetzen ließe, zeigt, in welchen unterschiedlichen Ausprägungen objektorientierte APIs diskutiert werden können. APIs sind allgegenwärtig und nicht ausschließlich ein Integrationsthema. Der Aufwand, der mit dem Erreichen der API-Qualitätsmerkmale verbunden ist, ist jedoch nicht immer gerechtfertigt. API-Design ist daher eine Frage der Priorität. Typischerweise investiert man mehr in das API-Design für Framework- und Komponentengrenzen als für eine nur für wenige Entwickler sichtbare interne Implementierung. Die Priorität sollte von der Sichtbarkeit der API und der beabsichtigten Arbeitsteilung abhängig gemacht werden.
4.6Zusammenfassung
APIs sind allgegenwärtig, weil selbst einzelne Objekte eine implizite API besitzen.
Das Design von APIs ist aufwendig und wird deswegen typischerweise nur intensiv an Komponenten- bzw. Teamgrenzen eingesetzt.
APIs unterstützen das Geheimnisprinzip, Datenkapselung und die Trennung von Zuständigkeiten.
APIs helfen, eine modulare Codebasis zu bilden.
Das folgende Kapitel geht auf eine Vielzahl unterschiedlicher Aspekte und Empfehlungen zum praktischen Design von Java-APIs ein.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «ЛитРес».
Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.