2013-02-13 4 views
0

-Edit- 이것은 설계중인 재정 API를위한 것입니다. 나는 빈 구조의 클래스를 생성하면서 일반적인 구조에 대한 느낌을 얻고있다. 필자가 가장 염려하는 점은 매뉴얼을 사용하는 방법을 설명 할 필요없이 쾌적한 사용자 환경을 설계하는 것입니다. -End Edit-VB.Net 내의 클래스 디자인

나는 특정 클래스를 설계하는 가장 좋은 방법을 생각하려고 머리를 쓰다듬어왔다. 예를 들어 일반 예을 만듭니다.

Namespace SomeNamespace 
    Public Class Results 
     Public a1 as Integer 
     Public a2 as Integer 
     ... 
     Public b1 as Integer 
     ... 
     Public z1 as Integer 
    End Class 
End Namespace 

위의 예는 일반적이지만, 요점은 클래스 내에 많은 값이 있다는 것입니다. 변수 이름의 문자는 유사한 결과 그룹을 나타냅니다. "a"결과는 유사합니다. "b"와 비슷합니다. 결과 클래스의 각 유형에 대한 클래스를 만들려고했습니다 (결과 유형이기 때문에 서로 분리 된 개념이기 때문에). ...

Public Class Results 
    Class a 
     Public a1 as Integer 
    End Class 
    Class b ... End Class 
End Class 

이의 문제는, 사람이 클래스를 사용하면

Dim ResultObject as new SomeNamespace.Results.a() 

는 결과 개체가 먼저 인스턴스화되어야 할 것이라고 명시되지 않는 것입니다 서브의 때문에 클래스 a, b 등은 결과 객체에 의존합니다. 그러나 사용자는 객체 a, b 등을 볼 수 있으며, 먼저 부모 객체를 생성해야한다는 것을 모를 수 있습니다.

클래스를 구분하는 것에 대해 생각하고 각 생성자가 Result 개체를 만들지 만 논리적으로는 뒤떨어져 있습니다. 어떤 충고? 혼란 스럽다면 미안 해요.

+0

what ?? 당신은 당신이 저장하고 싶은 것은 무엇이든간에'IEnumerable' 또는'Dictionary'가 필요합니다. public propertyA, propertyB, propertyC ... 같은 유형의 Z에 대한 모든 방법은 최악의 디자인입니다. –

+0

내가 실제로 그렇게 디자인 할 정도로 멍청한 사람이라면, 내 시간을 낭비하지 않았을 것이다. – MonkeyDoug

답변

0

왜 추상 클래스 결과를 만들지 말고 상속 구조 ResultTypeA, ResultTypeB 등을 만드시겠습니까? 문제에 대한 세부 사항이 없으므로 의미있는 답을 내리기가 정말 어렵습니다.

0

첫 번째 인덱스가 결과 클래스 (예 : 'a'또는 'b'문자)이고 두 번째 인덱스가 결과 번호 (예 : a1 또는 z2 등) 인 단일 2 차원 정수 배열을 사용하지 않는 이유는 무엇입니까?)?

+0

응답 해 주셔서 감사합니다. 안타깝게도 데이터를 얻는 방법이나 저장 방법 및 적절한 OOP 클래스 디자인에 더 관심이 있습니다. 다시 고마워요 :) – MonkeyDoug

0

두 가지 빠른 권장 사항.

1) 수업에서 필드를 노출시키지 마십시오. 메서드와 속성 만 노출합니다. 자동 구현 된 속성을 사용하는 경우 선언에 Property 키워드를 추가하면됩니다. 그렇지 않으면 필드를 비공개로 선언하고 공개로 공개하는 속성을 선언하십시오.

Public Class Foo 
    Private _V1 As Integer ' Backing field 
    Public Property V2 As Integer ' Auto Property 
    Public Property V1 As Integer ' With backing field 
     Get 
      Return _V1 
     End Get 
     Set (Value as Integer) 
      _V1 = value 
     End Set 
    End Property 
End Class 

2) 클래스 선언을 중첩하지 마십시오. 대신

Public Class Results 
    Class a 
     Public a1 as Integer 
    End Class 
    Class b ... End Class 
End Class 

의 다음 작업을 수행합니다

Public Class Results 
    Public Property A1 As A 
    Public Property B1 As B 
End Class 
Public Class A 
    Public Property A1 As Integer 
End Class 
Public Class B 
    Public Property B1 As Integer 
End Class 

명명 규칙의 경우 동사로 명사와 방법 같은 속성의 이름을합니다. 주문 질문과 관련하여 카테고리 (명사)로 시작하여 점차적으로 구체적인 용어로 형용사를 추가하는 것이 좋습니다.

Property NameFirst As String 
    Property NameLast As String 
    Property ContactEmail As String 
    Property ContactPhoneHome As String 
    Property ContactPhoneWork As String 
+0

답장을 보내 주셔서 대단히 감사합니다. 나는 당신이 그 시간을 보냈던 것에 크게 감사드립니다! – MonkeyDoug