2010-05-10 2 views
0

저는 최근에 객체로 프로그래밍을 시작했으며 좋은 습관을 일찍 학습하려고합니다.C# OOP 파일 구조?

내 응용 프로그램이 두 개의 파일하는 것입니다 구조 계획 방법 :

이 에게

1 : Program.cs -이 파일은 응용 프로그램의 주요 논리를 포함
2 : Class.cs -이 파일이 포함됩니다 모든 클래스 정의

아주 간단합니다. 내가 더 이상 파일을 가져야하는지 궁금해서 ... 글쎄, 내게 말해.

도움을 주시면 감사하겠습니다.

+0

Program.cs에 "main logic"이 포함되어 있으면 클래스에 무엇이 들어 있을까요? GUI 또는 콘솔에서 로직을 래핑하는 "main"함수가 무엇일까? – harpo

답변

7

일반적으로 각 클래스에는 자체 파일이 있어야합니다.

Program.cs -이 파일은 메인 클래스가이 파일에 있음을 의미하는이 말을 할 때 나는 가정하고 응용 프로그램

에 대한 주요 로직이 포함됩니다. (응용 프로그램의 진입 점이있는 클래스). 논리의 여러 부분을 분리하여 가장 합리적인 클래스에 배치해야합니다. 지향 설계를 반대 할

링크 : 네임 스페이스에 대한
http://www.csharphelp.com/2006/05/designing-object-oriented-programs-in-c/

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

링크 :
http://www.csharphelp.com/2006/02/namespaces-in-c/

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

+0

동의합니다. * 특정 클래스에서만 사용되는 작은 도우미 클래스가있는 경우 * 일반적으로 도움이되는 클래스와 동일한 파일에 그 클래스를 배치합니다. –

+0

@ 로버트, 나도 때때로 그 일을하는 버릇이있다. 시나리오에 따라 다르지만, 일반적으로 각 클래스의 규칙을 따르는 것은 자체 파일입니다. – kemiller2002

+0

각 클래스 파일마다 다른 네임 스페이스가 있어야합니까?서로 다른 파일에서 동일한 네임 스페이스를 사용할 수 있습니까? – sooprise

2

내 유일한 제안 클래스의 각 클래스를 파괴하는 것입니다. cs를 ClassName.cs라는 자체 파일에 저장합니다. .

버그를 찾아서 쉽게 해결할 것입니다.

각 파일의 코드가 적어 지지만 문제가되는 코드를 찾기가 어렵습니다.

2

각 클래스에는 많은 클래스가 포함 된 .cs 파일이 아닌 자체 파일이 있어야합니다. 나는 그것을 시도하지 않고 있지만, 당신의 IDE가 이것을 집행 할지도 모른다.

2

따라야 할 원칙은 각 클래스 (또는 2.0+ 앱의 경우 부분 클래스) 당 하나의 파일을 갖는 것입니다. 중요하지 않은 응용 프로그램의 경우에는 이 아니며은 모든 클래스 정의를 단일 파일로 유지해야합니다.

1

당신은 여기에 당신이 시작하는 데 도움이되는 몇 가지 기본 사항은 다음 guidelines

+0

각 파일을 자신의 파일에 넣으라고 말하는 페이지를 직접 가리키면 더 나은 링크가 될 것입니다. :) –

5

에보고해야한다.=)

  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;

솔루션의 아키텍처는 다음과 같습니다 수업 (파일 당 하나 개의 클래스)에 대한

  1. 한 프로젝트;
  2. 데이터 액세스를위한 하나의 프로젝트.
  3. GUI 용 프로젝트 하나. 가능한 한 재사용으로 코드의 각 부분을 확인해야 염두에 통합 계층

(등, EntityFramework, NHibernate 등) 베어

  • 한 프로젝트. 독립적 인 프로젝트에 비즈니스 객체 (클래스)를 작성하여 나중에이 프로젝트를 다른 프로젝트로 참조 할 수 있으므로 비즈니스 로직 (메소드 등)과 비즈니스를 모두 다시 코딩 할 필요가 없습니다

    개체 지향 디자인은 개체의 모든 실용적인 측면을 일반화하여 비즈니스 개체의 최상위 클래스로 가져 오려고합니다. 예 :

    // 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; } 
    } 
    

    각 프로젝트의 의미를 지정하는 것이 좋습니다. 의는 예를 들어 고객 관리를위한 응용 프로그램 보자

    MyCompany.MyCustomerMgmtSoftware.Domain <을 = 비즈니스 클래스를 포함해야한다이 프로젝트는

    MyCompany.MyCustomerMgmtSoftware.Data <이 =이 프로젝트는 데이터에 액세스하기위한 클래스를 포함해야한다있는 정의 귀하의 DBRM.

    MyCompany.MyCustomerMgmtSoftware < =이 프로젝트는 일반적으로

    MyCompany.MyCustomerMgmtsoftware.Mappings <이 = 예를 들어, 자 NHibernate를 사용하는 동안이 프로젝트는 (당신의 매핑 파일을 포함해야합니다.

    이 도움을 않는 GUI를 포함 ?

  • +0

    함께 동의하지 않을 수 있습니다 : 1 귀하의 클래스에 대한 하나의 프로젝트 (파일 당 하나의 클래스); 2 데이터 액세스를위한 하나의 프로젝트. BL & DA 프로젝트를 여러 프로젝트로 나누고 싶을 것입니다. 예를 들어 Employees.Biz, Employees.Data, Customers.Biz, Customers.Data (각 proj에 여러 개의 클래스가있을 수 있다고 가정)를 각각의 프로젝트 (4 개)로 분리합니다. 모든 BL을 하나의 엄청난 어셈블리로 쌓아 올리면 필요하지 않은 코드를 포함하기 위해 별도의 Apps가 필요합니다. 누군가는 필요하지 않은 코드 섹션에서 코드를 깨뜨릴 수 있지만 dll을 참조하기 때문에 앱이 손상됩니다. –

    +0

    이것은 훌륭한 참고 자료이지만 첫 번째 프로그램을 작성중인 사람에게는 TMI 일 가능성이 높습니다. 그리고 그들이 ERP 시스템을 구축하지 않는다면 다른 모든 사람들에게. –

    +0

    @Chris L : 동의합니다. 나는 작은 프로젝트를 위해 이렇게 말했다. 내 의견으로는, 당신은 잠시 동안 언급하고있는 것과 같은 거대한 프로젝트를 준비하지 못할 것입니다. 소규모 회사 주택 프로젝트의 경우이 구조로 충분할 수 있습니다. –