最初の3層アプリケーションを作成しようとしました。その過程で私は1つの問題に遭遇しましたが、まだ最適な解決策を見つけることができていません。基本的に、私のすべてのオブジェクトは、次のようにサブの実装を強制するIFillableインターフェイスを使用します
Public Sub Fill(ByVal Datareader As Data.IDataReader) Implements IFillable.Fill
このサブは、データリーダーからのIDがオブジェクト自体のプロパティと同一になることを期待します。
Me.m_StockID = Datareader.GetGuid(Datareader.GetOrdinal("StockID"))
結局、私はこのようなデータレイヤーになります。
Public Shared Function GetStockByID(ByVal ConnectionString As String, ByVal StockID As Guid) As Stock
Dim res As New Stock
Using sqlConn As New SqlConnection(ConnectionString)
sqlConn.Open()
res.Fill(StockDataLayer.GetStockByIDQuery(sqlConn, StockID))
End Using
Return res
End Function
ほとんどの場合、このパターンは理にかなっているようです。ただし、私の問題は、StockBarcodeListというStockのプロパティを実装したいとします。上記のパターンでは、このプロパティを実装する方法に関係なく、接続文字列を渡す必要があります。これにより、レイヤー分離の試みが明らかに失敗します。
私がこの問題をどのように解決できるかについて誰かが何か提案がありますか、それとも私はこれを完全に間違った方法で行っていますか?誰かが私の実装を改善する方法について何か提案がありますか?ただし、データセットをいかなる形式でも使用しないように意図的に試みていることに注意してください。