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 OOP-具有主列表和对象组合的实体的对象_Vb.net_Oop_Theory - Fatal编程技术网

Vb.net OOP-具有主列表和对象组合的实体的对象

Vb.net OOP-具有主列表和对象组合的实体的对象,vb.net,oop,theory,Vb.net,Oop,Theory,我试图总结一下如何正确地为业务对象实现OOP设计: 在数据库中有一个“主列表”(例如分类) 是另一个对象的一部分,作为属性(即对象组合),但具有附加属性 这就是我坚持理论的地方。假设我有一个分类对象,继承自抽象类BusinessObject,定义了CRUD函数(MustOverride)。这将给我: Public MustInherit Class BusinessObject Public Sub New() End Sub Public MustOverride

我试图总结一下如何正确地为业务对象实现OOP设计:

  • 在数据库中有一个“主列表”(例如分类)
  • 是另一个对象的一部分,作为属性(即对象组合),但具有附加属性
  • 这就是我坚持理论的地方。假设我有一个分类对象,继承自抽象类BusinessObject,定义了CRUD函数(MustOverride)。这将给我:

    Public MustInherit Class BusinessObject
        Public Sub New()
    
        End Sub
    
        Public MustOverride Function Create() As Boolean
        Public MustOverride Sub Read(ByVal id As Integer)
        Public MustOverride Function Update() As Boolean
        Public MustOverride Function Delete() As Boolean
    End Class
    
    Public Class Classification
        Inherits BusinessObject
    
        <Fields, properties, etc. for ID, Name (or Description), and 
         IsActive. DB table has only these 3 fields.>
    
        Public Sub New()
            MyBase.New()
        End Sub
    
        Public Overrides Function Create() As Boolean
            Dal.Classifications.Create(Me)
        End Function
    
        Public Overrides Function Delete() As Boolean
            Dal.Classifications.Delete(Me)
        End Function
    
        Public Overloads Overrides Sub Read(ByVal id As Integer)
            Dal.Classifications.Read(Me)
        End Sub
    
        Public Overrides Function Update() As Boolean
            Dal.Classifications.Update(Me)
        End Function
    End Class
    
    客户对象将由CustomerClassification组成:

    Public Class CustomerClassification
        Inherits Classification
    
        Private _level As Integer
    
        Public Property Level() As Integer
            Get
                Return _level
            End Get
            Set(ByVal value As Integer)
                _level = value
            End Set
        End Property
    
        Public Sub New()
            MyBase.New()
        End Sub
    End Class
    
    Public Class Customer
        Inherits BusinessObject
    
        Public Property Classification() As CustomerClassification
        ........ etc
    End Class
    
    现在,我的设计问题是创建、读取、更新和删除功能仍然暴露在CustomerClassification对象中:

    Dim c as New Customer
    c.CustomerClassification.Update() ' <-- Not desirable!
    
    Dim c作为新客户
    
    c、 CustomerClassification.Update()’因此,如果我理解正确,您希望
    Update()
    函数仅对
    Customer
    类可用


    如果您的
    分类
    客户
    类部署在同一程序集中,则可以将
    更新()
    功能标记为
    朋友
    。这将使该程序集之外的类无法访问它。

    如果我正确理解了您的问题,则您的客户类不需要聚合实际分类类的实例。它需要有一个单独类的实例,该类指定分类的级别和类型,由ID或枚举值表示。分类类只能在管理员维护分类ID/枚举列表的情况下使用。

    我希望分类类和客户类都具有CRUD函数,但我不希望CustomerClassification具有CRUD函数。我是否应该在Customer类中为分类设置两个属性:ClassificationID和Level,前面的组合?我们的想法是在Customer表单上有一个包含列表(分类)的组合框,并设置Customer.CustomerClassification=ComboBox.SelectedItem。好的,我这样做,创建一个ClassificationID和Level的类(不继承任何东西),看看我能想出什么。谢谢我只是在想。我真正的对象不是“客户”(只是一个简单的例子)。真正的对象将由许多对象组成,这些对象也有一个“主列表”,这意味着我必须为每个主列表对象创建一个新的第二类,用于组成真正的对象?基本上是的。然而,你真的应该考虑责任分离。其中一个类负责维护列表元素。另一个只是列表中值的一个小包装器。太好了。谢谢你的信息。我只是想确保我没有不必要的重复努力。