2

Date Créé un exemple spécifique qui m'intéresse - mais il y a d'autres bits de données qui tombent dans la même catégorie: les données que vous voudriez capturer sur n'importe quelle entité vaguement importante. Où est-il préférable de faire ceci: logique métier (BL) ou couche d'accès aux données (DAL)?Date de création - cette valeur doit-elle être définie dans BL ou DAL?

Jusqu'à présent, je me suis appuyé sur getdate() de SQL Server pour remplir la date créée pour moi sur l'insertion dans la table, mais maintenant je commence à me demander si je devrais faire cela plus dans le BL.

FYI - cela a principalement été dans les systèmes basés sur le Web où vous créez un objet dans le BL (basé sur l'entrée de l'utilisateur) et le déclencher au DAL - ce n'est pas comme si je voulais me référer à l'objet en mémoire pour les âges (donc avoir une propriété "date créée" sur l'objet pour l'utiliser dans le BL sur la création de l'objet n'a pas été un problème).

Peut-être y at-il une troisième option - il me vient à l'esprit après avoir lu la réponse de Marr75 que l'enregistrer deux fois pourrait être utile dans certains senarios (une fois dans les deux endroits). Vous auriez l'avantage d'une date/heure cohérente dans la couche de données, mais vous auriez quand même une valeur pilotée par BL à laquelle faire référence - je suppose que je dépendrais de vos cas d'utilisation. Cette option n'est pas sans risque, cependant - les gens pourraient commencer à utiliser la mauvaise date pour la mauvaise chose.

Répondre

0

Je dirais: oui. Peut-être prendre l'habitude de définir les dates créées et lastaccess dans votre BL. Ensuite, dans votre DAL, vérifiez toujours les valeurs NULL dans ces champs. Si elles sont nulles, considérez votre option: lancer une exception, ou simplement remplir les valeurs de cette couche. Une sorte de fourre-tout avant insertion/mise à jour. J'ai eu le même modèle que vous décrivez dans votre question. J'ai ensuite été confronté à l'utilisation de l'application/consommer des horodatages UTC, et j'ai pensé que je déplacerais ce comportement vers les classes BL et/ou DL. Oui, j'aurais pu utiliser GETUTCDATE(), mais il me semblait plus approprié d'avoir cette logique dans le BL/DL.

+0

Je suis d'accord avec votre pensée - mais sûrement une des raisons pour mettre cette responsabilité dans le BL est parce que vous avez des règles que vous voulez appliquer - comme ne pas avoir de null. Était un cas où le BL ne se souciait pas, mais la base de données a fait? –

1

Je vote pour toujours le DAL. S'appuyer sur les dates et les heures des couches au-delà de la base de données a été une source de bugs pour moi dans le passé. Dans la plupart des configurations, il est plus que probable que vous garantissiez une date et une heure cohérentes dans votre base de données. Problèmes de synchronisation de l'heure client - serveur et même serveur - serveur ont entraîné des problèmes désagréables, difficiles à reproduire, difficiles à résoudre.

Questions connexes