私はVB.NETを使用していますが、この質問はJava、C#などのあらゆるOO言語に適用されます。私は、エンティティクラスの外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
を持っています。これは私の質問です:私は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
IはClassBBB
基準を公開する(またはパブリックゲッターメソッドを供給する)が、それはClassAAA
の内部の仕組みを公開することになる可能性があります。
私が考えているのは、ClassBBB
の参照Friend
をアセンブリ内でのみ表示できるようにすることです。つまり、データレイヤーであり、クライアントプロジェクトには表示されません。しかし、私はこのクラスの内部の仕組みを公開しているような気がします。
もっと良いアプローチがありますか?
ええ、あなたが正しいと思います - 共有/静的CRUDメソッドから離れ、エンティティクラス自体に移動する必要があります。 – CodeClimber