Edit Team Meeting Topics¶
Topics to be discussed in coming meetings.
1) Widcards usage in service methods¶
Zu den Wildcards: Anscheinend funktionieren im Editor beide Varianten. Hab es eben ausprobiert. Hatte ursprünglich mit % versucht, da man das bei den Webservices verwenden muss. Zumindest funktioniert dort der * nicht.
Stimmt es, dass die Webservices „“ nicht übersetzen bzw. % die einzige mögliche Wildcard ist? Wenn ja, ist das so gewollt? Ich hätte ja eher die „“-Suche erwartet. % ist so SQL spezifisch.Habs mir angeschaut. Das scheint ziemlicher Wildwuchs zu sein, weil die jeweiligen Implementierer von einzelnen Services das entweder im Blick hatten oder nicht.
Eine Methode, es zu erzwingen fällt mir gerade leider auch nicht ein, so dass man wohl lediglich durch alle Services durchgehen könnte und checken, ob das SQLize dort implementiert ist. Sollten wir mal besprechen.
AMEigentlich gibt es dafür schon einen Methode:.
eu.etaxonomy.cdm.persistence.query.MatchMode.queryStringFrom(String queryString)
TODO: Create ticket ...
2) Centralized initialization strategies¶
Ich habe schon des öfteren daran gedacht ob es nicht Sinn machen würde die Intialisierungs-Strategien zu zentralisieren.
Oftmals werden an vielen Stellen die selben verwendet, wobei immer wieder die selben Muster auftauchen.
Es wäre also auch eventuell möglich die Strategien zu modularisieren.
Bei Modelländerungen wäre es dann einfacher die entsprechenden Initialisierungsstrategien an zu passen. Wenn wir Klassen kreieren die die Initialisierungsstrategien ausgeben, also quasi ein InitStrategyBuilderFramework, das die property-path Strings liefert würden Refaktoriereungen noch sicher sein können.All diese Gedanken nur in aller Kürze. Wir können das ja mal Mündlich besprechen.
Viele Grüße
AndreasIch denke auch, dass es Sinn macht das zu zentralisieren!
Vielleicht können wir Anfang nächster Woche uns dazu zusammen setzen.Viele Grüße,
KatjaJa, finde ich auch gut. Habe auch schon paar mal drüber nachgedacht, wie man das machen könnte. Bin gespannt, was ihr für Ideen habt.
Viele Grüße,
Andreas M.
TODO: Create ticket ...
3) Discuss/Decide conventions for service method names¶
- get/list/load/find etc.
see also CdmLibraryConventions
TODO: Create ticket ...
4) DTOs¶
which package(s) for dto classes? Currently there are multiple places:
- eu.etaxonomy.cdm.strategy.cache - src/main/java - cdmlib-model
- TaggedText
- eu.etaxonomy.cdm.api.service.dto - src/main/java - cdmlib-services
- DerivateDataDTO
- DerivateDTO
- DistributionInfoDTO
- EntityDTO
- FieldUnitDTO
- GroupedTaxonDTO
- IdentifiedEntityDTO
- IncludedTaxaDTO
- MarkedEntityDTO
- PreservedSpecimenDTO
- RegistrationDTO
- RowWrapperDTO
- TaxonInContextDTO
- eu.etaxonomy.cdm.ext.geo - src/main/java - cdmlib-ext
- OccurrenceServiceRequestParameterDto
- eu.etaxonomy.cdm.persistence.dto - src/main/java - cdmlib-persistence
- ClassificationLookupDTO
- TaxonNodeDto
- TermDto
- eu.etaxonomy.cdm.remote.dto.common - src/main/java - cdmlib-remote
- StringResultDTO
eu.etaxonomy.cdm.remote.dto.polytomouskey - src/main/java - cdmlib-remote
- AbstractLinkDto
- LinkedPolytomousKeyNodeRowDto
- PolytomousKeyNodeLinkDto
- TaxonLinkDto
eu.etaxonomy.cdm.vaadin.event - src/main/java - cdm-vaadin
- ShowDetailsEventEntityTypeFilter
- RegistrationDTO
eu.etaxonomy.cdm.vaadin.model - src/main/java - cdm-vaadin
- CdmEntityAdapterDTO
- DbTableDTO
- DistributionDTO
- StatusDTO
eu.etaxonomy.cdm.vaadin.model.common - src/main/java - cdm-vaadin
- AgentBaseDTO
- InstitutionDTO
eu.etaxonomy.cdm.vaadin.model.name - src/main/java - cdm-vaadin
- NameRelationshipDTO
- TaxonNameDTO
eu.etaxonomy.cdm.vaadin.model.registration - src/main/java - cdm-vaadin
- SpecimenTypeDesignationDTO
- SpecimenTypeDesignationWorkingSetDTO
Build DTO class hierarchy which bases on EntityDTOBase as parallel model to the cdm model?
Should associated entities be modled in the DTO as UuidAndTitleCache oder TypedEntityReferece ?
- ==> build EntityReferece class hierarchy? EntityReferece <----- TypedEntityReferece <--- UuidAndTitleCache (title caches exist only in IdentifiableEntity, whereas TypedEntityReferece is more general)
DTOs are per definition a pattern for remote layers:
(from email conversation DTO Klassen die ihr eigener Object Adapter sind? 25.07.18 14:06)
Die DTOs gehen auf Martin Fowler zurück und der benennt den Zweck von DTOs so: "An object that carries data between processes in order to reduce the number of method calls." (https://martinfowler.com/eaaCatalog/dataTransferObject.html). Es geht also in erster Linie darum, die Performance von Remote-Zugriffen zu verbessern.Auch wikipedia nennt dies als primären Zweck (https://en.wikipedia.org/wiki/Data_transfer_object) und ergänzt dies noch durch "The difference between data transfer objects and business objects or data access objects is that a DTO does not have any behavior except for storage, retrieval, serialization and deserialization of its own data (mutators, accessors, parsers and serializers). In other words, DTOs are simple objects that should not contain any business logic but may contain serialization and deserialization mechanisms for transferring data over the wire."
Outcome of the discussion on 2018-08-01 (Katja Luther, Andreas Müller, Andreas Kohlbecker):
- All (almost all) DTO classes should be in the same package in each of the cdmlib projects:
eu.etaxonomy.cdm.dto
- All DTOs for CDM entities will be based on a common base class which itself will extend
eu.etaxonomy.cdm.ref.TypedEntityReference
:
abstract class CdmBaseDTO<T extends CdmBase> extends TypedEntityReference<T> {
...
}
- All fields which contain localized strings should be suffixed with
_L10n
- DTOs should use
TypedEntityReference
for all fields which refer to a cdm entity instead of only holding the string representation. - DTOs should use a
TermDTO
wherever a cdm TermBase is referenced, seeeu.etaxonomy.cdm.remote.json.processor.bean.TermBaseBeanProcessor
- >>> TODO Please complete if something is missing ....
Updated by Andreas Kohlbecker over 5 years ago · 6 revisions