Certaines réflexions sur les habitudes de développement semblent coincées dans votre gorge et vous ne pourrez pas les cracher. En regardant la motivation de la publication, bien sûr, je n'exclus pas la possibilité de frauder des points de participation, mais d'un autre côté, j'espère également fournir quelques suggestions ou références aux compagnons de pratique (Nian Xing) (j'espère ne pas induire en erreur autres). En même temps, j'espère également que vous pourrez exprimer votre opinion sur mes mauvaises habitudes et apporter des critiques et des corrections. Merci.
un. Créer un répertoire de projet
Tout d’abord, la première étape consiste bien sûr à créer un répertoire séparé pour le nouveau projet (ne riez pas). Le nom du répertoire doit avoir le même nom que le nom du projet, ou un autre nom peut être utilisé, à condition qu'il soit clair et concis. Ensuite, créez chacun des répertoires suivants dans ce répertoire :
<Doc> : utilisé pour stocker les documents de développement liés au projet (description des besoins, avant-projet, conception détaillée, etc.) ;
<Source> : utilisé pour stocker ".DPR", ".Pas", ".Dfm" et d'autres fichiers dans le programme source Delphi ;
<Dcu> : les fichiers ".Dcu" sont stockés dans ce répertoire. Le but de stocker séparément les fichiers ".Pas" et ".Dcu" est simplement de rendre le contenu du répertoire source plus clair ;
<Bin> : stocke les fichiers de sortie du projet, tels que ".Exe", ".Dll" ou ".Ocx", etc. ;
<Log> : utilisé pour stocker les fichiers journaux ; généralement, je place un fichier "<Nom du projet>Programmer Log.Txt" dans ce répertoire.
<Images> : Bien entendu, c'est le répertoire où sont stockées les images utilisées dans le projet. Dans des circonstances normales, ce répertoire est indispensable. Si d'autres ressources sont également utilisées, créez également leurs propres répertoires, tels que Wav, Avi, etc.
deux. Définir les options du projet
Créez un nouveau projet dans Delphi, enregistrez ce projet dans le répertoire Source, et en même temps :
a. Choisissez une icône accrocheuse et quelque peu liée au projet comme icône de ce projet. Bien sûr, cette icône ne peut être utilisée que temporairement, mais elle doit être meilleure que la vilaine icône par défaut de Delphi. Sinon, comment pouvez-vous être digne de vous-même ?
b. Définissez le répertoire de sortie dans la page Options du projet -> Répertoires/Conditions sur le répertoire Bin ;
c. Définissez le répertoire de sortie de l'unité sur le répertoire Dcu.
trois. Ajouter une unité constante
Ajoutez une nouvelle unité et enregistrez-la sous "unt<nom du projet> Consts.Pas" pour enregistrer les constantes utilisées dans le projet.
Quatre. À propos de la forme et de l'unité
Nommez le formulaire selon la convention de dénomination hongroise. Un formulaire utilisé pour se connecter peut être nommé « FrmLogin » et son nom d'unité peut être « untLogin ». En général, les noms de deux formulaires et unités correspondants doivent être cohérents, à l'exception de l'abréviation « Frm » ou « unt ».
Ajoutez un commentaire pour cette unité en tête de l'unité. Le format du commentaire peut faire référence au code source Delphi, mais il doit au moins inclure les éléments suivants : description de la fonction, heure de création ; historique des modifications, etc.
Définissez la légende du formulaire nouvellement créé sur le nom de la classe Form au lieu d'utiliser celui par défaut de Delphi. Par exemple, après avoir renommé Form1 en FrmLogin, nous obtenons la nouvelle classe de formulaire TFrmLogin et Delphi met automatiquement à jour la légende du formulaire en « FrmLogin ». À mon avis, la légende devrait être « TFrmLogin », car nous concevons une classe de formulaire TFrmLogin, plutôt que de simplement opérer sur FrmLogin.
Pour une classe de formulaire avec des fonctions claires comme TFrmLogin, de nombreuses personnes ont l'habitude de définir sa légende sur un nom tel que "Connexion opérateur" pendant la phase de conception. Mon habitude est que les constantes telles que "Connexion de l'opérateur" sont généralement stockées dans unt<nom du projet>Consts.Pas et définies avec ResourceString ou Const. Quant au nom de la légende du formulaire, il doit s'agir d'une tâche d'exécution. Par conséquent, j'utilise souvent Caption uniquement lorsque l'événement TForm.OnCreate est déclenché, tel que :
procédure TFrmLogin.FormCreate(Expéditeur : TObject);
commencer
Légende := csLoginTitle;
....
fin;
cinq. À propos de l'utilisation de la fonction Format
Il existe trois données : iYear, iMonth et iDay. Pour afficher des informations telles que "Anniversaire : 1976/3/18", que faites-vous habituellement ? Utilisez s := 'Anniversaire:'+IntToStr(iYear)+'.'+IntToStr(iMonth)+'.'+IntToStr(iDay);? C'est vraiment fatigant. Mon habitude est d'ajouter une constante csBirthDayFormat = 'Birthday: %d/%d/%d' dans unt<project name>Consts.Pas pour enregistrer le format d'affichage, puis d'utiliser s := Format(csBirthDayFormat, [iYear, iMonth , iDay]); De telles déclarations complètent l'assemblage des données. L’avantage de cette méthode est évident, c’est-à-dire qu’il vous suffit de conserver le format d’affichage des données au même endroit.
La fonction Format est puissante et je la recommande vivement. Et vous ?
six. À propos du stockage des fichiers de registre ou Ini
À l'origine, j'utilisais habituellement TRegistry pour accéder au registre et TIniFile pour accéder aux fichiers Ini. L'utilisation de ces deux classes est différente, il est donc presque impossible d'utiliser le même code pour accéder à la fois au registre et au fichier Ini. Quel mal de tête !
Enfin j'ai trouvé un sauveur ! C'est la classe TRegistryIniFile. En regardant l'unité de registre, nous constatons que TRegistryIniFile hérite de TCusomIniFile. TIniFile hérite également de TCusomIniFile. Par conséquent, utiliser la classe abstraite TCusomIniFile pour accéder au registre ou au fichier Ini revient à faire d'une pierre deux coups. Par exemple:
var
csmIniFile:TCusomIniFile;
commencer
si blUseIniFile alors // Si vous utilisez le fichier Ini
csmIniFile := TIniFile.Create(csRootKey)
autre
csmIniFile:= TRegistryIniFile.Create(csRootKey);
//Ensuite, vous pouvez utiliser csmIniFile pour accéder au fichier Ini.
//Ou accédez au registre de la même manière que pour accéder au fichier Ini.
Sept. À propos des flux TStream et TFileStream, TMemoryStream, etc.
TFileStream et TMemoryStream héritent de la classe abstraite TStream, ce qui signifie que nous pouvons utiliser un ensemble de codes pour effectuer des opérations d'accès aux fichiers et à la mémoire. Par conséquent, lors de la définition de certaines interfaces, j'ai tendance à définir les types de paramètres comme des classes abstraites plutôt que des classes concrètes. Par exemple, une fonction pour compléter la fonction de sauvegarde est définie comme
fonction Enregistrer(AStream : TStream) : Booléen ;
que défini comme
fonction Enregistrer(AStream : TFileStream) : Booléen ;
Soyez beaucoup plus flexible.
La première définition est prospective car elle peut être appliquée à de nouveaux types de flux qui pourraient apparaître dans le futur. Cette dernière définition ne s'applique qu'aux flux tels que TFileStream (y compris les sous-classes de TFileStream, bien sûr), qui est beaucoup plus rigide.
Mon habitude : s'il existe une classe abstraite, essayez de définir les paramètres comme le type de la classe abstraite. Après tout, nous ne pouvons pas prévoir l'avenir.
huit. Utilisez davantage TAction
Delphi 4 et versions ultérieures ont introduit le concept d'action et ajouté le composant TActionList à la barre de composants Standard. L’avantage d’utiliser Action est que les soucis de synchronisation des états de contrôle ont disparu !
Plus d'articles
Musicwind®@HangZhou.Zj.Chine