3 اقتراح نمط التطبيق الطبقة
-
26-09-2019 - |
سؤال
لقد حاولت تقديم أول تطبيق لثلاثين. في هذه العملية ، واجهت مشكلة واحدة ، لم أجد حلاً مثاليًا. في الأساس ، تستخدم جميع كائناتي واجهة 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 لسلسلة الاتصال الخاصة بك.