Sobes.tech
Middle+

Έχετε εμπειρία με έργα που υλοποιήθηκαν με καθαρή αρχιτεκτονική;

sobes.tech AI

Απάντηση από AI

Ναι, υπάρχει.

Κατά την ανάπτυξη με καθαρή αρχιτεκτονική, χρησιμοποίησα τα εξής στρώματα:

  • Layer Τομέα: Περιέχει τη λογική επιχειρήσεων και τις οντότητες. Δεν εξαρτάται από άλλα στρώματα. Ορίζονται οι Χρήσεις (Interactors) και οι διεπαφές των αποθετηρίων.
  • Layer Δεδομένων: Υλοποιεί τις διεπαφές των αποθετηρίων από το Layer Δεδομένων. Περιλαμβάνει εργασία με δεδομένα (δίκτυα, βάσεις δεδομένων, SharedPreferences). Συχνά, χρησιμοποιούνται αποθετήρια για τη μετατροπή δεδομένων από εξωτερικές πηγές σε οντότητες τομέα.
  • Layer Παρουσίασης: Περιέχει View (Fragment, Activity) και Presenter/ViewModel. Είναι υπεύθυνο για την εμφάνιση δεδομένων και την αλληλεπίδραση με τον χρήστη. Επικοινωνεί με τις Χρήσεις από το Layer Τομέα.

Εξαρτήσεις μεταξύ των στρωμάτων:

  • Το Layer Παρουσίασης εξαρτάται από το Layer Τομέα.
  • Το Layer Δεδομένων εξαρτάται από το Layer Τομέα.

Μοντέλα και αρχές που εφαρμόζονται στην καθαρή αρχιτεκτονική:

  • SOLID: Ειδικά η αρχή της αντιστροφής των εξαρτήσεων (Dependency Inversion Principle).
  • Ενέσεις Εξαρτήσεων: Για την απλοποίηση των δοκιμών και τη διαχείριση των εξαρτήσεων (π.χ., με Dagger, Koin).
  • Pattern Αποθετηρίου: Αφαίρεση πάνω από τις πηγές δεδομένων.
  • Χρήσεις (Interactors): Αντιπροσωπεύουν συγκεκριμένες λειτουργίες στη λογική επιχειρήσεων.

Παράδειγμα δομής έργου:

├── app
│   ├── build.gradle
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── παράδειγμα
│           │           └── ηεφαρμογήμου
│           │               ├── data // Υλοποιήσεις αποθετηρίων, πηγές δεδομένων
│           │               │   ├── datasource
│           │               │   └── repository
│           │               ├── domain // Επιχειρηματική λογική, Χρήσεις, οντότητες, διεπαφές αποθετηρίων
│           │               │   ├── entity
│           │               │   ├── repository
│           │               │   └── usecase
│           │               └── παρουσίαση // Layer προβολής, ViewModel/Presenter
│           │                   ├── ui
│           │                   └── viewmodel
│           └── res

Αλληλεπίδραση μεταξύ των στρωμάτων:

  1. Η προβολή καλεί τη μέθοδο του ViewModel.
  2. Το ViewModel καλεί το αντίστοιχο Use Case (λογική επιχειρήσεων).
  3. Το Use Case προσπελαύνει τις διεπαφές των αποθετηρίων από το Layer Τομέα.
  4. Οι υλοποιήσεις των αποθετηρίων (στο Layer Δεδομένων) λαμβάνουν δεδομένα από πηγές (δίκτυο, βάση δεδομένων).
  5. Τα αποθετήρια μετατρέπουν τα δεδομένα σε οντότητες τομέα και τα επιστρέφουν στο Use Case.
  6. Το Use Case επεξεργάζεται τα δεδομένα και επιστρέφει το αποτέλεσμα στο ViewModel.
  7. Το ViewModel ενημερώνει τα δεδομένα που εμφανίζονται στο View.

Η χρήση καθαρής αρχιτεκτονικής επιτρέπει:

  • Βελτίωση της δοκιμαστικότητας: Κάθε στρώμα μπορεί να δοκιμαστεί απομονωμένα.
  • Αύξηση της διαχειρισιμότητας: Οι αλλαγές σε ένα στρώμα επηρεάζουν ελάχιστα τα άλλα.
  • Αύξηση της ευελιξίας: Είναι πιο εύκολο να αντικαταστήσετε υλοποιήσεις πηγών δεδομένων ή προβολών UI.
  • Μείωση της συσχέτισης: Διαχωρισμός της επιχειρηματικής λογικής από τις λεπτομέρειες υλοποίησης.