2012-04-24 15 views
0

私は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をアセンブリ内でのみ表示できるようにすることです。つまり、データレイヤーであり、クライアントプロジェクトには表示されません。しかし、私はこのクラスの内部の仕組みを公開しているような気がします。

もっと良いアプローチがありますか?

答えて

2

ClassAAA皮およびClassBBBをカプセル化する場合、それは、内部更新ClassBBBにパブリックメソッドを持つべきであるClassAAAです。 facadeデザインパターンは、上品で洗練された問題解決方法を示す優れた例です。

+0

ええ、あなたが正しいと思います - 共有/静的CRUDメソッドから離れ、エンティティクラス自体に移動する必要があります。 – CodeClimber

1

私は、あなたが唯一の私が考える

+0

返信ありがとう – CodeClimber

3

にClassBBBメンバーのgetterを作成または更新メソッドクラスメソッド作るために持っており、静的ではなく、シンプルなアイデアがClassAAA内のパブリック更新方法を作ることだと思います必要に応じて他のクラスで呼び出すようにします。このようにしてClassAAAという内部の詳細は公開されませんが、他の人が必要な機能を有効にすることができます。

+0

返信ありがとうございます – CodeClimber

関連する問題