Est-il une bonne raison d'écrire du code dans le Programme.cs/main, par opposition à l'aide de classes?
Je suis en train de travailler sur une assez grande application et mon tech responsable et je ne voient pas les yeux dans les yeux sur certaines choses.
L'un d'eux est en ce qui concerne les applications de console. Ces applications sont portées vers C# à partir de scripts shell. Certains de ces scripts sont suffisamment grandes (de 300 à 400 lignes de code après la conversion) et de faire des choses comme des I/O, e-Mail et l'accès à la base.
Pour chacun de ces scripts, j'ai créé une classe. Chaque classe a une méthode qui appelle des méthodes et des opérations qui sont à l'intérieur. À L'Intérieur Du Programme.cs/main, j'ai créer un objet de la classe dit et appel Exécuter. Programme.cs contient 4-5 lignes de code. Propre et simple.
Mon tech responsable veut se débarrasser des classes de script et ont juste tout à l'intérieur de la méthode main de programme.cs. Son raisonnement est qu'il est trop compliqué de la façon dont il est.
Il se sent maladroit d'avoir à le faire de cette façon que la classe n'est plus réutilisable/paquet-mesure dans une bibliothèque de classe sans avoir à jouer du violon avec la méthode main.
Tests unitaires semblent comme ils ne sont pas affectés puisque vous pouvez instancier Programme.cs lui-même, mais encore une fois....cela se sent maladroit. Existe-il des avantages à faire son chemin que je ne suis pas le voir? Existe-il des avantages à ma façon? Est-il une pratique générale, lorsque vous traitez avec de grandes applications et de contenus dans votre méthode principale?
Je vous remercie pour votre temps.
- Il est faux.
- Si vous pouvez changer la société
- Vous êtes de la pensée droite. La seule raison pour laquelle on pourrait avoir tout en Main/ Programme.cs est de savoir si c'est un morceau de temps de code rapide n de travail. Comme les scripts.
- Cette question est un meilleur ajustement pour les programmeurs, de l'OMI, donc voter pour fermer. Elle a vraiment tout dépend de ce que votre classe ne comprend, mais, en général, le Principe de Responsabilité Unique est une bonne règle de pouce en.wikipedia.org/wiki/Single_responsibility_principle
- Je ne suis pas sûr que "Chaque classe a une méthode qui appelle des méthodes et des opérations qui sont à l'intérieur" est assez d'une amélioration, même si depuis qui donne l'impression que quelqu'un peut lire principal, sans comprendre ce qui le programme.
- J'ai demandé à un collègue sur cette question. Leur réponse? Tout le monde est mauvais et qu'il devrait être appelé via le Spring.Net la suppression de la nécessité pour n'importe quel code à tout dans la main. Cela, je suppose, renforce le fait que cette question n'est pas le plus grand ajustement pour DONC.
- J'ai besoin de ce genre de technologie, votre plomb est sur
- Je pense que sa peine de regarder intelligent tout-englobant des programmes comme
busybox
lorsque vous faites quelque chose comme cela. Jetez un oeil à sa structure et à la gestion de l'ensemble de ces fonctions dans un grand programme de beaucoup de sources. Je pense que vous trouverez qu'il est très éclairant. - Cette question n'est pas hors-sujet et ne devraient probablement pas avoir été fermé. Des Questions du genre "dans quelles circonstances avez-vous le faire _____ dans votre code" sont bien dans les lignes directrices pour les questions appropriées. Même si la bonne réponse est "jamais".
- bien meilleur ajustement pour programmers.stackexchange.com et juste parce que il y a un consensus parmi les programmeurs ici ne signifie pas que cette question n'est pas d'avis/discussion conduit. J'ai voté "hors sujet" car je pense qu'il devrait être sur les programmeurs, auraient voté "non constructif" si nous n'avions pas cette option.
Vous devez vous connecter pour publier un commentaire.
Il n'a pas ont à être de cette façon.
Par exemple, chacun de vos scripts peut toujours avoir la même structure qu'il fait, mais aussi ont un
private static void Main(string[] args)
méthode. (Il pourrait ne pas être privé si vous le voulez, tout dépend de vos besoins.)Cette façon, il est autonome (peut-être compilés en une seule entrée à une seule sortie, puis courir) qui peut parfois être utile, mais pourrait aussi être utilisé comme partie d'une bibliothèque de classe. La présence d'un
Main
méthode en aucune façon empêche la classe utilisée à d'autres classes, après tout.Il n'est pas clair si vous avez un
Program.cs
fichier ou un par un script. Si vous avez l'un par le script, chaque de ce qui est juste 4-5 lignes, qui ne semblent un peu inutile.Maintenant, ce ne serait certainement pas la façon dont je serais normalement la structure d'une grande application - mais si le point est d'avoir plusieurs "scripts" chacun peut fonctionner de manière autonome, puis en donnant à chaque classe une
Main
méthode ne semble pas trop mal.En fait, ce que je fais souvent pour démo fins est d'avoir plusieurs classes avec
Main
méthodes dans un même projet, alors avoir un point d'entrée (qui est dansProgram.cs
) qui utilise la réflexion pour trouver tous les autres et permet ensuite à l'utilisateur/présentateur de choisir celui à exécuter.Si votre code est logique d'avoir dans une seule classe, puis d'avoir un petit extra de la méthode de saisie ne semble pas un tel problème. Si c'est fait un cas de trop de code pour une seule classe indépendamment d'où le point d'entrée est, c'est une autre affaire. (Donc si vous êtes bloqué à un seul
ScriptClass
alors qu'en réalité, vous devriez donner à des tâches différentes à différentes classes, ce serait mauvais aussi). De même, si il est vraiment en insistant sur tout le code dans un seul méthode, qui est certainement un problème pour les tests et la maintenance.Je vous suggère de définir le point d'entrée des désaccords de côté pour le moment: travail de la façon la plus propre de la structure tout d'autre sur le code, et puis ça n'a pas vraiment d'importance si le
Main
méthode va dansProgram.cs
ou à l'intérieur d'une autre classe.ScriptClass.Run
méthode est encore un géant de 300 méthode de la ligne, puis en déplaçant laMain
méthode dans un fichier distinct n'a pas fait un bon. De même, si vous avez été en mesure de refactoriserScriptClass
être cassées en testable bits, puis quitter leMain
méthode, il ne va pas vous faire du mal. Il sonne comme chaque script projet va avoir la même quantité de code de ce que vous faites le+ de 300 lignes) - vous n'avez pas mentionné quoi que ce soit réutilisable et pourtant, aussi loin que j'ai vuMain
au sein du même type.Je pense que vous êtes la création de travail pour vous-même, honnêtement. Je ne peux pas dire à partir de l'détails dans la description de votre - mais si les scripts shell, ont travaillé, pourquoi la structure où la structure était apparemment n'est pas nécessaire?
Vous êtes en précisant que la modularité et le reconditionnement dans une bibliothèque externe est quelque chose que vous aurez besoin de le faire - j'oppose à "pourquoi?" (c'est ce que j'entends par travail supplémentaire).
Si vous créez un simple ensemble de méthodes dans un seul fichier c'est un seul fichier! Il est, par définition, sera plus facile de travailler avec de multiples projets, etc.
Qui dit - il est difficile de savoir de quoi on parle, sauf si il y a un peu plus de détails. Si c'est "envoyer une soirée un rapport et e-mail de ces personnes" - ouais c'est quelque chose qui n'a pas besoin d'une bibliothèque de classe et une tonne de modularité. Exécuter une méthode, vous avez terminé.
Vous faire savoir que le point d'entrée d'une application console est configurable, droit?
Ma méthode de prédilection serait:
Point, le point d'entrée du projet à MeaningfullyNamedProgram.Principal
NOTE: je vais le laisser comme un exercice pour le lecteur, mais vous pouvez créer une classe de base pour cette utilisation de génériques, et vous épargner un peu de temps.
Votre tech responsable a besoin d'un bon de parler de! Mettre le tout dans le Programme.cs n'est pas la voie à suivre.
Bien, son chemin est conceptuellement plus simple, que c'est la façon dont les programmes ont été écrits avant la sous-routine a été inventé ....
Votre chemin, c'est mieux: il prend en charge la réutilisabilité et serait plus facile à modifier et à déboguer.
Le seul autre justification que je pense de sa façon a ce que si elle a été prise de manière significative plus de temps pour vous de le faire à votre façon, plutôt que de le faire à sa manière. Mais c'est un cas à court terme, la pensée de sa part. Votre chemin résistera à l'épreuve du temps, de mieux.
Votre tech responsable est faux. La méthode que vous proposez est beaucoup plus raisonnable -- il permet la consolidation des différents scripts facilement. Chaque script d'avoir son propre
Main
méthode peut obtenir maladroit, surtout si vous prévoyez d'avoir une application qui peut fonctionner plusieurs de ces à la fois.Le fractionnement de la logique dans une autre classe (ou des classes) est le chemin à parcourir. Mettre le tout dans un seul endroit viole les principes de SOLIDE SEC et de conception. Vous êtes certainement sur la bonne voie avec votre approche.
Le plus vous gardez vos classes mis l'accent sur les rôles le plus facile sera votre vie pour l'entretien et les tests.
Si la fonctionnalité peut être consommé par d'autres moyens que le programme en mode console, bien sûr, vous devez les conserver dans un nicelly modélisé la bibliothèque de la classe. Pour enregistrer quelques lignes de code par entangeling paramètre de ligne de commande de traitement avec la fonctionnalité encapsulée n'a pas de sens compte tenu du fait que les préoccupations qui ont été à l'origine séparé de toute façon. Peut-être que votre tech lead doit trouver des tâches plus productives pour vous à mon humble avis.