name: portada class: portada-slide, center, middle # Components d’accés a dades .footnote[Mateu Yábar Valles] --- --- # Component Diccionari de la llengua catalana de l'Institut d'Estudis Catalans (2a edició) > component 1 1 adj. [LC] > Que entra com a part en un tot. --- # Component-based software engineering Wikipedia > Component-based software engineering (CBSE), also called component-based development (CBD), is a branch of software engineering that emphasizes the __separation of concerns__ with respect to the wide-ranging functionality available throughout a given software system. --- # Que és un component d'accés a dades ChatGpt .long_text[ > Un component d'accés a dades (en anglès, data access component) és un __mòdul de programari__ que permet a les aplicacions accedir i __interactuar amb les dades__ emmagatzemades en una font de dades, com ara una base de dades relacional o un arxiu. Aquests components són part de la __capa d'accés a dades__ d'una aplicació, que és responsable de gestionar l'accés a les dades i la seva manipulació. > > Els components d'accés a dades proporcionen una __interfície__ entre l'aplicació i la font de dades, __ocultant la complexitat__ de l'accés a dades i proporcionant un conjunt d'operacions estàndard per interactuar amb les dades. Això inclou operacions com ara inserir, actualitzar i esborrar dades, així com recuperar dades per a la visualització o el processament de l'aplicació. [...] ] --- # Resum - Separation of concerns - Separar en components l'accés a dades d'altres components de sotware - Interfície d'accés --- # Components en software - Classe com a component - Una sola implementació
classDiagram class TodoItemsRepository{ +list() ListOfTodoItem +insert(todoItem: TodoItem) +update(todoItem: TodoItem) +delete(id: String) other() } RestOfTheApplication -- TodoItemsRepository : uses
--- # Components en software - Classe com a component - Interfície
classDiagram class ITodoItemsRepository{ +list() ListOfTodoItem +insert(todoItem: TodoItem) +update(todoItem: TodoItem) +delete(id: String) } ITodoItemsRepository <|-- FileStoredTodoItemsRepository ITodoItemsRepository <|-- SqlTodoItemsRepository ITodoItemsRepository <|-- RealmTodoItemsRepository RestOfTheApplication -- ITodoItemsRepository : uses
--- # Components com a arquitectura - Monolit (sense components) - SOA - Microserveis --- # Monolit .fullscreen[![monolithArch](files/monolithArch.svg)] --- # Microserveis .fullscreen[![microservicesArch](files/microservicesArch.svg)] --- # Microserveis .fullscreen[![microservices_bgtech](files/microservices_bgtech.png)] --- # Monolit vs Microserveis --- # Item sample ``` data class Item(val name: String, val done: Boolean) interface ItemRepository{ fun list() : List
fun insert(item: Item) } class RealmItem(val ): RealmObject class InMemoryItemRepository : ItemRepository{ private val items = mutableListOf
() override fun list(): List
= items.toList() override fun insert(item: Item) { items.add(item) } } object ServiceLocator { val itemRepository : ItemRepository = InMemoryItemRepository() } fun main() { val itemRepository = ServiceLocator.itemRepository itemRepository.insert(Item("Some task", true)) println(itemRepository.list()) } ```