سؤال

اعتقدت أنني سأعيد كتابة هذا السؤال (نفس التكرار).كان الأصل هو كيفية التفاف نمط المستودع حول قاعدة بيانات EAV/CR.أحاول اتباع نهج مختلف.

سؤال:كيف يمكنك ترميز مستودع البيانات بطريقة نمط تصميم "المصنع"؟ لدي عدد ثابت من الكيانات، ولكن سمات هذه الكيانات خاصة بالعميل إلى حد ما.إنهم يعلنون عن منتجات متشابهة، لكن كل عميل يرفق معلومات مختلفة بها بناءً على نموذج أعماله.على سبيل المثال، يهتم البعض بنسبة التخلص من النفايات بينما يهتم البعض الآخر بكمية الجنيهات المباعة.في كل مرة نجد فيها عميلاً آخر، نضيف مجموعة من الحقول، ونزيل مجموعة من الحقول، ثم نقضي ساعات في تحديث كل حل إلى أحدث إصدار مشترك.

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

محتوى السؤال السابق:

لدينا نموذج بيانات EAV/CR يسمح بفئات مختلفة لنفس الكيان.يتتبع هذا المنتجات حيث يكون لدى العملاء منتجات مختلفة تمامًا.يمكن للعملاء تحديد "فئة" المنتج، وتحميلها بالحقول، ثم تعبئتها بالبيانات.على سبيل المثال،

Product.Text_Fields.Name
Product.Text_Fields.VitaminEContent

أي اقتراح حول كيفية التفاف نمط المستودع حول هذا؟

لدينا ثلاثة جداول EAV:جدول المنتج، وجدول القيمة، وجدول التعريف الذي يسرد أسماء الحقول وأنواع البيانات (نقوم بإدراج أنواع البيانات لأن لدينا جداول أخرى مثل بيانات تعريف Product.Price وProduct.Price، إلى جانب جداول أخرى مثل Product.Photo. ) يتتبع العملاء جميع أنواع الأسعار مثل نسبة الخصم الخاصة بالمنافس بالإضافة إلى الحسابات السريعة.

نستخدم حاليًا Linq to SQL مع C#.

يحرر:

أنا أحب Linq "الاستعلام الديناميكي" أدناه.الفكرة وراء قاعدة بياناتنا هي مثل تخزين خزانة غرفة خلع الملابس.يقوم كل رياضي (أو عميل) بتنظيم خزانته الخاصة بالطريقة التي يرغب بها، ونحن نتولى تخزينها له.نحن لا نهتم بما يوجد في الخزانة طالما أنهم يستطيعون فعل ما يحتاجون إليه.

مثير جدا...هل يمكن أن تكون الكائنات التي تم تمريرها إلى المستودع ديناميكية؟هذا منطقي تقريبًا، مثل نمط المصنع تقريبًا.هل من الممكن للعميل أن يضع تعريفات الفئات الخاصة به في ملف نصي، ثم نرثها ونخزنها في قاعدة البيانات؟

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

المحلول

كما أفهمها، يلخص نمط المستودع التنفيذ الفعلي لقاعدة البيانات من التطبيق.هل تخطط لتخزين البيانات في مخازن بيانات مختلفة؟إذا كنت راضيًا عن Linq to SQL، فأنا أقترح أنك ربما لا تحتاج إلى التجريد بهذه الطريقة لأنها تبدو معقدة للغاية.ومع ذلك، أستطيع أن أرى أن توفير مستودع على نمط EAV، أي.يجب تمرير الاستعلام، وقد يقدم لك الجدول ونوع الحقل واسم الحقل بالإضافة إلى أي شرط مطلوب، التجريد الذي تبحث عنه.

لست متأكدًا مما إذا كان هذا لا يزال مؤهلاً كنمط مستودع بأشد الشروط لأنك لا تستخرج التخزين من التطبيق حقًا.سيكون الأمر بمثابة تأرجح بين المنفعة والجهد ولا أستطيع المساعدة.

قد ترغب في إلقاء نظرة على ملحقات Dynamic Linq الموجودة في معاينة البيانات الديناميكية على Codeplex.

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