2010-05-10 9 views
0

Je viens de commencer à programmer des objets récemment et j'essaie d'apprendre de bonnes habitudes dès le début.Structure du fichier C OOP?

La façon dont je l'intention de structurer ma demande est d'avoir deux fichiers:

1: Program.cs - Ce fichier contient la logique principale pour l'application
2: Class.cs - Ce fichier contiendra toutes les définitions de classes

Assez simple. Ce que je me demande si je devrais avoir d'autres fichiers pour ... eh bien, dites-moi.

Toute aide serait appréciée.

+0

Si Program.cs contiendra la "logique principale", alors ce qui sera dans la classe? Peut-être que vous voulez dire est la fonction "principale" qui encapsule la logique dans une interface graphique ou une console – harpo

Répondre

7

Il est généralement accepté que chaque classe possède son propre fichier.

Program.cs - Ce fichier contiendra la logique principale pour l'application

Je suppose quand vous dites ce que vous voulez dire que la classe principale est dans ce fichier. (La classe avec le point d'entrée à l'application). Les différentes parties de la logique doivent être séparées et placées dans les classes qui ont le plus de sens pour les avoir.

Liens vers objet Design orienté:
http://www.csharphelp.com/2006/05/designing-object-oriented-programs-in-c/

http://www.informit.com/articles/article.aspx?p=101373

Liens vers les espaces de noms:
http://www.csharphelp.com/2006/02/namespaces-in-c/

http://msdn.microsoft.com/en-us/library/dfb3cx8s.aspx

+0

S'il y a de petites classes auxiliaires * qui ne sont utilisées qu'avec une classe particulière *, je les mettrai généralement dans le même fichier que la classe qu'elles aident. –

+0

@Robert, j'ai parfois l'habitude de faire ça aussi. Cela dépend du scénario, mais généralement, je suis la règle de chaque classe a son propre fichier. – kemiller2002

+0

Est-ce que chaque fichier de classe doit avoir un espace de noms différent?Puis-je même utiliser le même espace de noms dans différents fichiers? – sooprise

2

Ma seule suggestion serait de briser chaque classe en classe. cs dans son propre fichier nommé ClassName.cs .

Cela facilitera la recherche et la correction des insectes sur la route.

Moins de code dans chaque fichier = moins de recherche pour trouver le code incriminé.

2

Chaque classe doit avoir son propre fichier - pas un fichier .cs contenant plusieurs classes. Je ne suis pas sûr, ne l'ayant pas essayé, mais votre IDE peut imposer ceci.

2

Le principe généralement accepté à suivre est d'avoir un fichier pour chaque classe (ou classe partielle, dans le cas des applications 2.0+). Pour toute application non triviale, vous voudriez certainement et non vouloir toutes vos définitions de classe dans un seul fichier.

1

Vous devriez jeter un oeil sur ces guidelines

+0

Ce serait un meilleur lien, si elle pointait directement à la page qui dit mettre chaque classe dans son propre fichier. :) –

5

Voici quelques notions de base pour vous aider à démarrer.=)

  1. .Net Naming Conventions and Programming Standards and Best Practices;
  2. Object-Oriented Concepts;
  3. Object-oriented design;
  4. C# Coding Style Guide;
  5. File Organization
  6. Code Convention C#;
  7. Design Guidelines for Class Library Developers;

L'architecture de votre solution pourrait ressembler à ceci:

  1. Un projet pour vos classes (une classe par fichier);
  2. Un projet pour votre accès aux données;
  3. Un projet pour votre interface graphique;
  4. Un projet pour votre couche d'intégration (tels que NHibernate, EntityFramework, etc.)

Gardez à l'esprit que vous devez faire de chaque morceau de code réutilisable que possible. En écrivant vos objets de gestion (vos classes) dans un projet indépendant, vous pourrez ensuite référencer ce projet dans un autre, vous n'aurez donc plus à recoder toute votre logique métier (méthodes, etc.) et votre activité. objets (classes, énumérations, interfaces, etc.)

La conception orientée objet tente de généraliser tous les aspects pratiques d'un objet et de l'amener à la classe la plus générale pour vos objets métier. Par exemple:

// File: Person.cs 
public class Person { 
    public string Name { get; set; } 
    public string Number { get; set; } 
    // Some other general properties... 
} 

// File: Customer.cs 
public class Customer : Person { 
    public Customer() { 
     Orders = new List<Order>(); 
    } 
    public string CreditTerm { get; set; } 
    public IList<Order> Orders { get; } 
} 

// File: Contact.cs 
public class Contact : Person { 
    public long PhoneNumber { get; set; } 
    public long FaxNumber { get; set; } 
} 

// File: Supplier.cs 
public class Supplier : Person { 
    public Supplier() { 
     Salesperson = new Contact(); 
    } 
    public Contact Salesperson { get; } 
} 

Il est également recommandé de spécifier ce que représentent chacun de vos projets. Prenons par exemple une demande de gestion de la clientèle:

MyCompany.MyCustomerMgmtSoftware.Domain < = Ce projet contient vos classes d'affaires définitions

MyCompany.MyCustomerMgmtSoftware.Data < = Ce projet contient des classes pour l'accès aux données votre DBRM.

MyCompany.MyCustomerMgmtSoftware < = Ce projet contient normalement votre GUI

MyCompany.MyCustomerMgmtsoftware.Mappings < = Ce projet doit contenir vos fichiers de mappage (tout en utilisant NHibernate, par exemple.

cette aide ?

+0

N'a pas pu être plus en désaccord avec: 1 Un projet pour vos classes (Une classe par fichier); 2 Un projet pour votre accès aux données; Vous voudrez briser vos projets pour BL & DA en plusieurs projs. Par exemple Employees.Biz, Employees.Data, Customers.Biz, Customers.Data (je suppose que vous pouvez avoir plusieurs classes dans chaque proj) dans leurs propres projets (4) distincts. En empilant tout votre BL dans un ensemble gigantesque, vous aurez besoin d'applications séparées pour inclure le code dont ils n'ont pas besoin. Quelqu'un peut casser le code dans une section de code dont vous n'avez pas besoin, mais puisque vous faites référence à la DLL, votre application est également cassée. –

+0

C'est une bonne référence, mais c'est probablement TMI pour quelqu'un qui construit son premier programme. Et pour à peu près tout le monde, à moins qu'ils ne construisent un système ERP. –

+0

@Chris L: Je suis d'accord. Je l'ai déclaré pour les petits projets. À mon avis, Soo ne sera pas prêt pour des projets gigantesques comme ceux que vous avez mentionnés avant un certain temps. Pour un projet de petite entreprise, cette structure pourrait suffire. –