Я попытался сделать свое первое трехуровневое приложение. В процессе, который я столкнулся с одной проблемой, мне еще предстоит найти оптимальное решение.
В основном все мои объекты используют интерфейс IFillable, который заставляет реализацию подпрограммы выглядеть следующим образом
Public Sub Fill(ByVal Datareader As Data.IDataReader) Implements IFillable.Fill
В этом подпрограмме ожидается, что идентификаторы из хранилища данных будут идентичны свойствам объекта как такового.
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
В основном этот шаблон, кажется, имеет смысл. Однако моя проблема, скажем, я хочу реализовать свойство Stock, называемое StockBarcodeList. В соответствии с вышеупомянутым шаблоном, при любом способе реализации этого свойства мне нужно будет передать ему строку подключения, которая, очевидно, нарушит мою попытку разделения слоев.
У кого-нибудь есть какие-либо предложения о том, как я могу решить эту проблему, или я поступаю по этому поводу совершенно неправильно? У кого-нибудь есть какие-либо предложения по улучшению моей реализации? Обратите внимание, однако, что я намеренно стараюсь избегать использования набора данных в любой форме.