Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用类(复杂属性)这种变通方法/体系结构/方法正确吗?_Vb.net_Oop_Class_Architecture - Fatal编程技术网

Vb.net 使用类(复杂属性)这种变通方法/体系结构/方法正确吗?

Vb.net 使用类(复杂属性)这种变通方法/体系结构/方法正确吗?,vb.net,oop,class,architecture,Vb.net,Oop,Class,Architecture,我对使用OOP有点困惑,我的意思是,我已经知道(或者我猜)什么是类,什么是对象,什么是方法,什么是属性等等,但是我有这个疑问: 让我们假设我有一个类“洗衣房”,这个类有(仅此示例)3个属性: 洗衣店 名字 垫圈 Id和名称是“基本”类型或简单类型(整数和字符串),但垫圈表示类型为“垫圈”的对象列表,具有3个属性: 洗衣机 洗衣店 容量 烙印 所有这些(在本例中)都是简单/基本类型(整数、字符串、字符串) 所以这是我的困境,有这样一个构造函数是正确的(VB.net) 在该构造函数中,使用id=la

我对使用OOP有点困惑,我的意思是,我已经知道(或者我猜)什么是类,什么是对象,什么是方法,什么是属性等等,但是我有这个疑问:

让我们假设我有一个类“洗衣房”,这个类有(仅此示例)3个属性:

  • 洗衣店

  • 名字

  • 垫圈

  • Id和名称是“基本”类型或简单类型(整数和字符串),但垫圈表示类型为“垫圈”的对象列表,具有3个属性:

  • 洗衣机

  • 洗衣店

  • 容量

  • 烙印

  • 所有这些(在本例中)都是简单/基本类型(整数、字符串、字符串)

    所以这是我的困境,有这样一个构造函数是正确的(VB.net)

    在该构造函数中,使用id=laundryID参数查询属于洗衣房的所有洗衣机,并创建“洗衣机”类型的对象并将其添加到洗衣房列表中

    我不确定我是否会解释我自己,我会非常感激的任何评论,简而言之,使用具有复杂属性的类/对象(其他类/对象)的正确方法(或良好实践)是什么

    我通常使用ADO.net(可能是ADO/LINQ/Entity)以透明的方式解决这个问题,但如果他们这样做了,我真的不知道


    注意:我熟悉VB.net、C#、PHP,所以如果您喜欢解释/帮助我使用示例及其语法,那没关系。

    您的构造函数很好。你基本上是说,如果你有一个ID号,你只能创建一个洗衣类,在这种情况下,如果laundryID不是一个有效的ID号,你可能会抛出一个异常

    我通常将类似于垫圈列表的内容公开为(垫圈的)IEnumerable,因此我的类的使用者自己无法控制该列表

    这是一个简单的例子:

    Public Class Laundry
      Private _LaundryID As Integer
      Private _LaundryName As String
      Private _Washers As List(Of Washers)
    
      Public Sub New(ByVal laundryID As Integer)
        _LaundryID = laundryID
        _Washers = New List(Of Washers)
        '// populate washers
        '// throw exception if something went wrong
      End Sub
    
      '// Properties
    
      Public ReadOnly Property Washers As IEnumerable(Of Washer)
        Get
          Return _Washers
        End Get
      End Property
    
    End Class
    

    如何创建新的洗衣房对象取决于您。它可能只是一个空构造函数,或者是一个共享函数,用于从数据库(或任何地方)返回一个带有预填充ID号的新洗衣房对象。

    您的构造函数很好。你基本上是说,如果你有一个ID号,你只能创建一个洗衣类,在这种情况下,如果laundryID不是一个有效的ID号,你可能会抛出一个异常

    我通常将类似于垫圈列表的内容公开为(垫圈的)IEnumerable,因此我的类的使用者自己无法控制该列表

    这是一个简单的例子:

    Public Class Laundry
      Private _LaundryID As Integer
      Private _LaundryName As String
      Private _Washers As List(Of Washers)
    
      Public Sub New(ByVal laundryID As Integer)
        _LaundryID = laundryID
        _Washers = New List(Of Washers)
        '// populate washers
        '// throw exception if something went wrong
      End Sub
    
      '// Properties
    
      Public ReadOnly Property Washers As IEnumerable(Of Washer)
        Get
          Return _Washers
        End Get
      End Property
    
    End Class
    

    如何创建新的洗衣房对象取决于您。它可能只是一个空构造函数,也可能是一个共享函数,用于从数据库(或任何地方)返回一个带有预填充ID号的新洗衣房对象。

    在OOP世界中,您有许多选项,我在这里包括两个选项:

  • 洗衣房建造期间的装载
  • 首次引用洗衣机时加载(延迟加载)
  • 这里的主要区别是,如果您正在加载1000个洗衣对象(比如在列表中显示它们),您将不会启动1000个单独的查询来加载它们的洗衣机。如果有人选择洗衣房并向下搜索,洗衣机将在您需要数据时加载

    Public Class Laundry
        Private _laundryId As Integer
        Private _name As String
        Private _washers As List(Of Washer)
        Public Sub New(ByVal LaundryId As Integer)
            _laundryId = LaundryId
            ' option one - load them when the Laundry class loads
            LoadWashers()
        End Sub
    
        Public ReadOnly Property Washers As List(Of Washer)
            Get
                If _washers Is Nothing Then
                    ' option two - load them the first time the washers properties are referenced
                    LoadWashers()
                End If
                Return _washers
            End Get
        End Property
    
        Private Sub LoadWashers()
            _washers = New List(Of Washer)
            ' load the washers here
            '...
            '...
    
        End Sub
    End Class
    

    在OOP世界中,您有很多选择,我在这里包括两个:

  • 洗衣房建造期间的装载
  • 首次引用洗衣机时加载(延迟加载)
  • 这里的主要区别是,如果您正在加载1000个洗衣对象(比如在列表中显示它们),您将不会启动1000个单独的查询来加载它们的洗衣机。如果有人选择洗衣房并向下搜索,洗衣机将在您需要数据时加载

    Public Class Laundry
        Private _laundryId As Integer
        Private _name As String
        Private _washers As List(Of Washer)
        Public Sub New(ByVal LaundryId As Integer)
            _laundryId = LaundryId
            ' option one - load them when the Laundry class loads
            LoadWashers()
        End Sub
    
        Public ReadOnly Property Washers As List(Of Washer)
            Get
                If _washers Is Nothing Then
                    ' option two - load them the first time the washers properties are referenced
                    LoadWashers()
                End If
                Return _washers
            End Get
        End Property
    
        Private Sub LoadWashers()
            _washers = New List(Of Washer)
            ' load the washers here
            '...
            '...
    
        End Sub
    End Class