aws-samples / aws-samples/aws-lambda-hexagonal-architecture

Ports are not abstracting adaptors

Ouverte
#2 0 commentaires 9 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
JavaScript
Étoiles
159
Forks
27
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

I used internally this sample for training with my team, and they got confused by the responsibility of ports. They struggled to understand the abstraction and to translate it to typescript. This issue is an attempt to make things more clear for developers new to hexagonal architecture.

I believe ports should enforce a contract between Domain logic and Adaptors, and protect changes to happen on domain logic when the implementation details present in Adaptors change.

Here the port is not only enforcing the contract but tied to the adaptor on itself.

for example, the Repository port is tied to the implementation of a DynamoDB table with a defined schema.

https://github.com/aws-samples/aws-lambda-hexagonal-architecture/blob/1e9ec9a4e05479533ac01018adadf8e544b3a156/hexagonal-architecture/ports/Repository.js#L6

If we happen to change the database schema (changing key names, moving to a single table design, etc..), the port is not protecting the Domain logic from the implementation detail in the Adaptor. Moving to a single table design will imply changing Adaptor/ports and domain logic.

If we were in a typed language, the port would be represented by an Interface, that defines the contract (Input/Output), and the adaptor would implement this interface (the contract).

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.