سؤال

لقد حاولت تقديم أول تطبيق لثلاثين. في هذه العملية ، واجهت مشكلة واحدة ، لم أجد حلاً مثاليًا. في الأساس ، تستخدم جميع كائناتي واجهة ifill التي تفرض تنفيذ SUB على النحو التالي

Public Sub Fill(ByVal Datareader As Data.IDataReader) Implements IFillable.Fill

يتوقع هذا الفرعي بعد ذلك أن تكون المعرفات من DataReader متطابقة مع خصائص الكائن على هذا النحو.

Me.m_StockID = Datareader.GetGuid(Datareader.GetOrdinal("StockID"))

في النهاية ، انتهى بي الأمر مع datalayer الذي يبدو مثل هذا.

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. بموجب النمط المذكور أعلاه بأي طريقة أقوم بتنفيذ هذه الخاصية ، سأحتاج إلى تمرير ConnectionString إليها والذي يكسر محاولتي بوضوح لفصل الطبقة.

هل لدى أي شخص أي اقتراحات حول كيف يمكن أن أتمكن من حل هذه المشكلة أم أني في هذه الطريقة الخاطئة تمامًا؟ هل لدى أي شخص أي اقتراحات حول كيفية تحسين تنفيذي؟ يرجى ملاحظة أنني أحاول عمدا تجنب استخدام مجموعة البيانات بأي شكل من الأشكال.

هل كانت مفيدة؟

المحلول

هل هناك سبب معين لتمريره ConnectionString على الاطلاق؟ يبدو وكأنه قيمة التكوين بالنسبة لي؟ لذا فإن استخدام شيء مثل ثابت (أو أ Config قد تكون Singleton) فكرة أفضل.

نصائح أخرى

استخدم ملف app.config لسلسلة الاتصال الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top