Architecture du code - Model

Hello les devs ! :blush:

Je souhaite améliorer l’architecture de mes applications en mettant en place les bonnes pratiques, et plus précisément le MVC.
Actuellement, je récupère des données au format JSON depuis un webservice que je parse avec un modèle que j’ai créé.

Ma question est la suivante :
Conseillez-vous de créer une nouvelle struct/class pour créer mes propriétés et méthodes, ou plutôt d’utiliser la class qui me sert de model pour parser mon JSON, en y ajoutant mes méthodes?

Je vais fournir un exemple de cas pour illustrer ma demande.

Exemple :
Le webservice me retourne, par exemple, le json suivant :

{
id: 1,
name: "Alex",
scrore: 8,
}

Je crée un model pour parser le json.

struct DatasUser: Codable {
let id: Int?
let name: String?
let scrore: Int? 
}

Maintenant, dois- je créer une struct comme ci-dessous ou dois-je directement écrire mes méthodes dans la struct DatasUser?

struct User {
let user: DataUser?

var getName: String? {
 return user.name
}

Si vous souhaitez plus de précisions, n’hésitez pas.

Je vous remercie par avance :blush:

Hello,
Alors si tu veux vraiment améliorer l’architecture de tes applications, je te conseille de te pencher sur clean swift (https://clean-swift.com/).

Cela t’apportera beaucoup de bonne chose.

N’hésite pas si tu as des questions sur ce sujet.

Concernant ton point, je te conseille de séparer ton model et les fonctions. Eviter des variables qui s’appellent getName, name tout court ou userName sont bien plus parlant (au passage, get c’est pas tres swifty, c’est plutôt java coding style :slightly_smiling_face:). Le nom des model, des fonctions, des class, … sont tout aussi important que l’architecture du code. Clean code est un excellent livre pour comprendre cette importance.

Aller amuse-toi bien et bon code :man_technologist:.

Franck

2 « J'aime »

Salut @Neldion,

Tout d’abord, merci pour ton retour et tes conseils :+1:

Concernant, le clean swift, effectivement, on m’a souvent parlé de ce pattern, qui semble être très populaire surtout lorsqu’on investit pas mal de temps dans les tests. Ce mois-ci, je m’y mets sérieusement à comprendre et mettre en place ce pattern sur un projet !
Cependant, pour avoir lu quelques articles sur le sujet, apparement il est plus intéressant de l’utiliser sur de gros projet vu ca complexité à mettre en place?

Pour ce qui était de mon questionnement sur la séparation des méthodes de mes models, c’est bien ce que je pensais, je te remercie :blush:

Merci pour le livre que tu me conseilles, je vais aller voir ça :slight_smile:

Alexandre

Le principe du MVC est de séparer au maximum les différents composants d’une application. Chaque partie doit être la plus abstraite possible, afin qu’une modification dans les couches sous-jacentes ne perturbe quelque chose ailleurs.

Intégrer le Modele et le parsing json ne correspond pas au paradigme. Il faut un Modele générique et un mécanisme pour l’alimenter avec les données du json.

L’idée est que tu puisses modifier le système de chargement des données par la suite, sans modifier le Modele, en y ajoutant un autre mécanisme, un parseur xml par exemple. Ou changer de base de donnée.

1 « J'aime »

Salut @Draken

Je te remercie pour ton message :blush:

Du coup, suite aux différents retours, la solution est de créer plusieurs models pour bien tout séparer (si je fais court). Je comprends le principe de vouloir tout séparer et cela me semble logique à présent.

Dans une application qui affiche une liste de films dans une tableview récupérés depuis un webservice par exemple. Nous pourrions donc avoir ce type de structure au niveau du répertoire Model:

Models :

  • une struct pour parser les données du webservice (DatasMovie)
  • une struct/class pour pour créer mes objets Movie (titre, description, ajout en favoris…) (Movie)
  • une struct pour l’appel à l’API

Alex