私はVB.NETを使用していますが、この質問はすべてのオブジェクト指向言語(Java、C#など)に適用されます。質問にJavaとC#のタグを付けましたが、適切でないと見なされた場合は削除します。
属性の1つとしてClassAAA
への参照を含むエンティティクラスがあります。ClassBBB
Public Class ClassAAA
Private Property _blah As ClassBBB = Nothing
Private Property _somethingElse As String
Private Property _anotherthing As String
' Make it private so cannot instantiate class without supplying ClassBBB '
Private Sub New()
End Sub
Public Sub New(ByRef value As ClassBBB)
_blah = value
End Sub
Public Property ImportantAttribute As String
Get
Return _blah.Imp
End Get
Set(ByVal value As String)
_blah.Imp = value
End Set
End Property
' other stuff '
End Class
ClassBBB
エンティティクラスの外部に公開したくありません。これが私の質問です。更新を実行したいのですが、使用したいClassAAA
静的/共有更新メソッドがありClassBBB
ます。これを行うための最良の方法は何ですか?
Public Shared Sub UpdateClassAAA(byRef value as ClassAAA)
' XXX Cannot do this because ClassBBB reference is private XXX '
ClassBBBDAO.update(value._blah)
' Do other updates on other ClassAAA attributes '
End Sub
ClassBBB
参照を公開する(または公開ゲッターメソッドを提供する)ことはできますが、それによっての内部動作が明らかになりClassAAA
ます。
私が考えているのは、アセンブリ、つまりデータレイヤーでのみ表示され、クライアントプロジェクトでは表示されないようにClassBBB
参照を作成することです。Friend
しかし、これはまだ私がクラスの内部の仕組みを公開しているように感じます。
これに対するより良いアプローチはありますか?