2012-06-13 2 views
0

Скажем, у меня есть класс с несколькими методами внутри него. Я хочу организовать методы в группы, к которым можно получить доступ, каждый раз создавая новый объект. Цель состоит в том, чтобы сгруппировать методы класса в логические ведраОрганизация VB.Net Mehods

Например:

Dim myclass as MyCustomClass 
myclass.Shipping.Get_List() 
myclass.Production.Get_List() 

Что такое лучший способ сделать это? Я пробовал вложенные классы, но VB.NET не позволит мне получить доступ к методам, как показано выше.

+0

Вы можете быть в состоянии сделать это с вложенным классом, если родительский класс имеет (возможно 'Shared') экземпляр этого класса в виде общественный член. Хотя, честно говоря, это не похоже на хорошую идею. Это очень нетрадиционно и неинтуитивно, что делает код, который намного сложнее поддерживать. И если вы пытаетесь найти способ интуитивно группировать методы в своем классе, то это звучит так, как будто класс нуждается в повторном факторизации в возможно несколько классов. – David

+0

Я действительно разъяснил пример, когда вы написали свой комментарий. Цель состоит в том, что существуют разные группы методов, влияющих на подкатегории. Например, «Доставка» имеет множество методов для этой категории. Первоначально я собирался разделить их на разные классы, но были перекрытия и некоторые общие переменные, на которые все они полагаются. Казалось, более интуитивно было сохранить его как одну структуру, поскольку все они связаны с одними и теми же базовыми данными. – ElPresidente

+0

«перекрытия и некоторые общие переменные» звучат как случай для нескольких полиморфных классов, а не один большой класс, который пытается удовлетворить все. Кроме того, структура классов необязательно должна соответствовать структуре базовых данных. Очень часто это так, но они не должны быть тесно связаны друг с другом. Сама природа объектно-ориентированных классов по сравнению с реляционными данными имеет тенденцию отличаться в представлении одних и тех же понятий. Не зная о коде, я могу только рекомендовать читать образцы дизайна и объектно-ориентированный дизайн. – David

ответ

0

так это то, как я бы делать то, что вы хотите

это не самый лучший дизайн в мире, но он будет работать

Я хотел бы предложить вам перенести фактический get_list и другой вид метода/недвижимость в конкретном классе, сохраняя при этом общий один в родительском классе, который в данном случае является тест

, но тогда я понятия не имею, что ваш код выглядеть так что с этой точки зрения, это ваш выбор

Module Module1 

    Sub Main() 
     Dim test As New test 
     test.Production.Get_List() 
     test.Shipping.Get_List() 
    End Sub 

End Module 


Public Class Shipping 
    Private parent As test 

    Public Sub New(ByRef parent As test) 
     Me.parent = parent 
    End Sub 

    Public Function Get_List() As List(Of Integer) 
     Return parent.GetShipping_List 
    End Function 
End Class 

Public Class Production 
    Private parent As test 

    Public Sub New(ByRef parent As test) 
     Me.parent = parent 
    End Sub 

    Public Function Get_List() As List(Of Integer) 
     Return parent.GetProduction_List 
    End Function 
End Class 

Public Class test 
    Public Property Production As Production 
    Public Property Shipping As Shipping 


    Public Function GetShipping_List() As List(Of Integer) 
     Return Nothing 
    End Function 

    Public Function GetProduction_List() As List(Of Integer) 
     Return Nothing 
    End Function 

    Public Sub New() 
     Production = New Production(Me) 
     Shipping = New Shipping(Me) 
    End Sub 
End Class 
+0

Спасибо. Я думаю, что это тот подход, который я ищу. Причиной такого подхода является то, что мне нужна единая точка интерфейса, с которой другие будут взаимодействовать. Они не могут видеть основную структуру, и все подразделы «Доставка», «Производство» и т. Д. Должны сосуществовать.По этим причинам для меня не имело смысла, чтобы пользовательский экземпляр несколько разных классов. Ваш подход имеет смысл, так как он делает это в фоновом режиме и все еще дает конечному пользователю внешний вид одного интерфейса. – ElPresidente

0

С осторожностью, что вы более чем вероятно, следует пересмотреть вашу архитектуру, вы могли бы реализовать свой образец, как это:

Public Class MyCustomClass 
    Private _shippingList As List(Of String) 
    Private _productionList As List(Of String) 

    Public Production As ProductionClass 
    Public Shipping As ShippingClass 

    Public Sub New() 
     Production = New ProductionClass(Me) 
     Shipping = New ShippingClass(Me) 
    End Sub 

    Public Class ShippingClass 
     Private _owner As MyCustomClass 

     Public Sub New(owner As MyCustomClass) 
      _owner = owner 
     End Sub 

     Public Function Get_List() 
      Return _owner._productionList 
     End Function 
    End Class 

    Public Class ProductionClass 
     Private _owner As MyCustomClass 

     Public Sub New(owner As MyCustomClass) 
      _owner = owner 
     End Sub 

     Public Function Get_List() 
      Return _owner._productionList 
     End Function 
    End Class 

End Class 

Однако, если ваше истинное намерение просто организовать методы в более доступной и логически , Я бы предложил рассмотреть вопрос:

Public Class MyCustomClass 
    Public Sub ShippingListGet() 
    End Sub 

    Public Sub ShippingListAddTo() 
    End Sub 

    Public Sub ShippingThatDO() 
    End Sub 

    Public Sub ShippingThisDo() 
    End Sub 

    Public Sub ProductionListGet() 
    End Sub 

    Public Sub ProductionListAddTo() 
    End Sub 

    Public Sub ProductionThisDo() 
    End Sub 

    Public Sub ProductionThatDo() 
    End Sub 
End Class 

Имейте в виду, что некоторые считают это трудным для чтения. Я лично предпочитаю организацию по этим направлениям, поэтому, когда методы сортируются в алфавитном порядке, они группируются логически.

0

Я нашел решение, которое я искал с помощью интерфейсов

Public Interface ICompany 
    Function Company_List() As DataTable 
End Interface 

Public Class MainClass 
    Public Company As ICompany = New CompanyClass 

    Public Sub New() 
     MyBase.New() 
    End Sub 

    Private Class CompanyClass 
     Public Sub New() 
      MyBase.New() 
     End Sub 

     Public Function Company_List() As DataTable 
       My code.... 
     End Function 
End Class 
End Class 
Смежные вопросы