


Comment faire la distinction entre la logique métier et la logique non commerciale dans le développement back-end et effectuer une conception en couches raisonnable?
Architecture hiérarchique arrière: limites claires entre la logique métier et la logique non commerciale
Dans le développement back-end, les architectures courantes à trois niveaux de Controller, Service et DAO ne sont pas toujours assez claires. Cet article explique comment distinguer efficacement la logique métier et la logique non commerciale dans les couches de service et de DAO, et même après avoir introduit la couche de gestionnaire, afin de créer une conception en couches plus raisonnable.
Définition entre la logique métier et la logique non commerciale
La logique métier relie directement les exigences de l'entreprise, bien que la logique des affaires ne soit pas responsable des opérations sous-jacentes, telles que l'accès aux données, la vérification des données, etc. Les frontières floues entre les deux conduisent souvent à la confusion dans le code.
-
Encapsulation des opérations de données: par exemple,
UserManager.delete()
etDepartmentManager.delete()
peuvent gérer la suppression associée deUserDeptModel
en même temps. Il s'agit d'une logique non commerciale car elle se concentre sur la cohérence des données plutôt que sur le processus métier lui-même. Exemple de code:classe Usermanager: def delete (self, user_id): self.user_dao.delete (user_id) self.user_dept_dao.delete_by_user_id (user_id) Département de département de classe: def delete (self, Dept_id): self.dept_dao.delete (Dept_id) self.user_dept_dao.delete_by_dept_id (Dept_id)
-
Traitement de la sécurité des données: le salage de mot de passe et d'autres opérations sont généralement effectués sur DAO ou la couche Manager, car il s'agit d'un mécanisme de protection des données, et non de la logique métier. Exemple de code (Python avec une fonction
salt
hypothétique):Classe UserDao: Def Save (self, utilisateur): user.password = self.salt (user.password) # ... Enregistrer l'utilisateur dans la base de données ... Def Salt (soi, mot de passe): # ... Logique de salting de mot de passe ... retourner Salted_password
Méthode DAO Méthode de dénomination Spécification: les noms de méthode de couche DAO doivent éviter d'inclure des significations commerciales. Par exemple,
get_super_user()
n'est pas aussi clair queget_user_by_type("super")
.Encapsulation des appels de service externe: si le backend dépend des services externes, ces appels doivent être encapsulés sur la couche DAO, pas la couche de service, car il s'agit d'accès aux données, pas de logique métier.
Simuler la fonction de filtre Django
Dans Python, s'il n'y a pas de cadre d'injection de dépendance, la moquerie du filtre Django nécessite du traitement des paramètres de la demande au niveau de la couche DAO et de leur passage de couche par couche. Le framework Spring de Java simplifie ce processus.
Entité de données et relation de hiérarchie
Le contrôleur, le service et le DAO ne correspondent pas un par un. Leurs responsabilités sont les suivantes:
- Contrôleur: Entrée du système, réception et demandes de traitement, en le gardant léger.
- Service: la couche de traitement de la logique métier principale est relativement complexe.
- DAO: La couche d'accès aux données n'est responsable que de l'interaction des données et n'inclut pas la logique métier.
Par exemple, "Créer un utilisateur": la couche de service effectue "Vérifiez si le nom d'utilisateur est dupliqué" et "Créer un utilisateur"; La couche DAO fournit des "utilisateurs de requête en fonction du nom d'utilisateur" et des méthodes "Enregistrer les utilisateurs".
En distinguant clairement la logique commerciale de la logique non commerciale et en suivant une conception en couches raisonnable, la maintenabilité et l'évolutivité du code peuvent être améliorées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

ShutLil.rmtree () est une fonction de Python qui supprime récursivement l'intégralité de l'arborescence du répertoire. Il peut supprimer les dossiers spécifiés et tous les contenus. 1. Utilisation de base: utilisez ShutLil.rmtree (Path) pour supprimer le répertoire, et vous devez gérer FileLenotFoundError, PermissionError et autres exceptions. 2. Application pratique: vous pouvez effacer les dossiers contenant des sous-répertoires et des fichiers en un seul clic, tels que des données temporaires ou des répertoires mis en cache. 3. Remarques: L'opération de suppression n'est pas restaurée; FilenotFoundError est lancé lorsque le chemin n'existe pas; Il peut échouer en raison d'autorisations ou d'occupation des fichiers. 4. Paramètres facultatifs: les erreurs peuvent être ignorées par ignore_errors = true

Pour créer un environnement virtuel Python, vous pouvez utiliser le module VENV. Les étapes sont: 1. Entrez le répertoire de projet pour exécuter l'environnement Python-Mvenvenv pour créer l'environnement; 2. Utilisez SourceEnv / Bin / Activer sur Mac / Linux et Env \ Scripts \ Activate sur Windows; 3. Utilisez le package d'installation PiPinstall, PipFreeze> exigence.txt pour exporter les dépendances; 4. Veillez à éviter de soumettre l'environnement virtuel à GIT et confirmez qu'il est dans le bon environnement pendant l'installation. Les environnements virtuels peuvent isoler les dépendances du projet pour prévenir les conflits, en particulier adaptés au développement multi-projets, et les éditeurs tels que PyCharm ou VScode sont également

Installer le pilote de base de données correspondant; 2. Utilisez Connect () pour se connecter à la base de données; 3. Créez un objet de curseur; 4. Utilisez EXECUTE () ou Execumany () pour exécuter SQL et utiliser une requête paramétrée pour empêcher l'injection; 5. Utilisez fetchall (), etc. pour obtenir des résultats; 6. commit () est requis après modification; 7. Enfin, fermez la connexion ou utilisez un gestionnaire de contexte pour le gérer automatiquement; Le processus complet garantit que les opérations SQL sont sûres et efficaces.

Utilisez le multiprocessement.queue pour transmettre des données en toute sécurité entre plusieurs processus, adaptés aux scénarios de plusieurs producteurs et consommateurs; 2. Utilisez le multiprocessement.Pipe pour atteindre une communication bidirectionnelle à grande vitesse entre deux processus, mais uniquement pour les connexions à deux points; 3. Utilisez la valeur et le tableau pour stocker des types de données simples dans la mémoire partagée et doivent être utilisés avec le verrouillage pour éviter les conditions de concurrence; 4. Utiliser Manager pour partager des structures de données complexes telles que les listes et les dictionnaires, qui sont très flexibles mais ont de faibles performances, et conviennent aux scénarios avec des états partagés complexes; Les méthodes appropriées doivent être sélectionnées en fonction de la taille des données, des exigences de performance et de la complexité. La file d'attente et le gestionnaire conviennent le plus aux débutants.

Utilisez Boto3 pour télécharger des fichiers sur S3 pour installer d'abord Boto3 et configurer les informations d'identification AWS; 2. Créez un client via boto3.client ('s3') et appelez la méthode upload_file () pour télécharger des fichiers locaux; 3. Vous pouvez spécifier S3_KEY comme chemin cible et utiliser le nom de fichier local s'il n'est pas spécifié; 4. Des exceptions telles que FileLoTFoundError, NocRedentialSerror et ClientError doivent être gérées; 5. ACL, ContentType, StorageClass et Metadata peuvent être définis via le paramètre ExtraCargs; 6. Pour les données de mémoire, vous pouvez utiliser ByTesio pour créer des mots

Pythonlistscani implémentation make ajout () Penouspop () popoperations.1.USEAPPEND () Two -celief StoteTopofThestack.2.USEP OP () ToreMoveanDreturnTeTop élément, assurant à cocheterthestackisNotEmptoavoidIndexerror.3

FaibleReferensexisttoAllowreferencingObjectwithoutpreveting theirgarbageCollection, aidant à réviser les éléments de liaison

Utilisez la bibliothèque Pythonschedule pour implémenter facilement les tâches de synchronisation. Tout d'abord, installez la bibliothèque via PiPinStallSchedule, puis importez les modules de planification et de temps, définissez les fonctions qui doivent être exécutées régulièrement, puis utilisez la calendrier.every () pour définir l'intervalle de temps et lier la fonction de tâche. Enfin, appelez calendrier.run_pending () et time.sleep (1) dans une boucle de temps pour exécuter en continu la tâche; Par exemple, si vous exécutez une tâche toutes les 10 secondes, vous pouvez l'écrire comme calendrier. Chaque (10) .seconds.do (travail), qui prend en charge la planification par quelques minutes, heures, jours, semaines, etc., et vous pouvez également spécifier des tâches spécifiques.
