Vb.net OOP-具有主列表和对象组合的实体的对象
我试图总结一下如何正确地为业务对象实现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
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的类(不继承任何东西),看看我能想出什么。谢谢我只是在想。我真正的对象不是“客户”(只是一个简单的例子)。真正的对象将由许多对象组成,这些对象也有一个“主列表”,这意味着我必须为每个主列表对象创建一个新的第二类,用于组成真正的对象?基本上是的。然而,你真的应该考虑责任分离。其中一个类负责维护列表元素。另一个只是列表中值的一个小包装器。太好了。谢谢你的信息。我只是想确保我没有不必要的重复努力。