Data Transfer Objects, or, DTO

Classe utilizadas para transferir dados entre camadas, serviços, processos, etc. Utilizado para abstrair e simplificar os dados que serão enviados.

Ex:

Table User:

Table Car:

Utilizando como exemplo um frontend em que o usuário interage a partir de HTML, quando ele quiser retornar os dados, não é necessário retornar o User.Password nem Car.Price. Usuário quer apenas saber qual o modelo de carro, Car.Model, está atrelado com o User.Username.

UserDTO:

class User:
    def __init__(self, id, username, password):
        self.id = id
        self.username = username
        self.password = password
    
    # Outros métodos...
    # Getter e setters são implícitos, vamos imaginar que eles existem e estão funcionando
    
class Car:
    def __init__(self, model, price):
        self.model = model
        self.price = price
    
    # Outros métodos...
    # Getter e setters são implícitos, vamos imaginar que eles existem e estão funcionando
    
class UserDTO:
    def __init__(self, model: Car, username: User):
        self.model = model
        self.username = username
        
user1 = User(1, "User", "password")
car1 = Car("Subaru", "50000")

user_dto = UserDTO(car1.model, user1.username)

Um DTO, para que seja lightweight, não deve implementar métodos, realizar cálculos e similares. A utilização dele é apenas para ser uma caixa ou contâiner para transferir valores.

Esta é uma das formas de se implementar DTO. Segundo vglushko, esta implementação não oferece imutabilidade e mais alguns pontos importantes. Desta forma podemos implementar DTO de outras formas, utilizando as seguintes classes:

Esta página está sendo atualizada. Irei inserir os códigos utilizando as outras bibliotecas e classes Python. Pretendo também fazer exemplos para Java.

Também preciso arrumar esse CSS que tá bem porco.

Links: