(N) السبات - هل من الممكن تعيين جداول متعددة ديناميكيًا لفئة واحدة

StackOverflow https://stackoverflow.com/questions/51654

سؤال

لدي موقف حيث أستخدم برنامج GIS الذي يخزن المعلومات حول كائنات GIS في جدول قاعدة بيانات منفصل لكل نوع/فئة من كائنات GIS (الطريق، النهر، المبنى، البحر، ...) ويحتفظ بجدول البيانات الوصفية الذي يخزن فيه معلومات حول اسم الفئة وجدول قاعدة البيانات الخاص بها.

تشترك كائنات نظم المعلومات الجغرافية ذات الفئات المختلفة في بعض المعلمات، على سبيل المثال.الوصف والمعرف.أرغب في تمثيل جميع فئات GIS المختلفة هذه بفئة C# مشتركة واحدة (دعنا نسميها GisObject)، وهو ما يكفي لما أحتاج إلى القيام به من الجزء غير المتعلق بـ GIS من التطبيق الذي يسرد كائنات GIS في GIS المحدد فصل.

المشكلة بالنسبة لي هي كيفية تعيين تلك الكائنات باستخدام NHibernate لشرح NHibernate عند إنشاء C# GisObject لتلقي و استخدم اسم الجدول كمعلمة والذي سيتم قراءته من جدول التعريف (يمكن أن يكون في خطوتين، يمكنني جلب اسم الجدول يدويًا في الخطوة الأولى ثم تمريره إلى NHibernate عند سحب بيانات GisObject).

هل تعامل أي شخص مع هذا النوع من المواقف، وهل يمكن القيام بذلك على الإطلاق؟

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

المحلول 2

@ بريان تشياسون

لسوء الحظ، لا يعد إنشاء جميع فئات بيانات GIS خيارًا لأنه يتم إنشاء الفئات ديناميكيًا في التطبيق.يجب أن تكون كل بيانات نظم المعلومات الجغرافية من نفس النوع عبارة عن فئة، ولكن لدى المستخدم إمكانية الحصول على مجموعة جديدة من البيانات ووضعها في قاعدة البيانات.لا أستطيع أن أعرف في المقدمة الفئات التي سيكون لدى المستخدم الخاص بي في التطبيق.لذلك، لا يعمل نموذج التعيين الأمامي لكل فئة لأنه سيكون هناك غدًا جدول قاعدة بيانات جديد آخر، وستكون هناك حاجة إلى إنشاء فئة جديدة بتعيين جديد.

قد يكون هناك إمكانية لكتابة الاستعلام المخصص الخاص بي في ملف تكوين XML لفئة Gisobject الخاصة بي ، ثم في فئة الوصول إلى البيانات التي تجلب هذا الاستعلام باستخدام

string qs = getSession().getNamedQuery(queryName);

واستخدم استبدال السلسلة لإدخال اسم قاعدة البيانات (عن طريق استبدال بعض سلسلة العنصر النائب) والتي سأمررها كمعلمة.

qs = qs.replace(":tablename:", tableName);

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

نصائح أخرى

يبدو أن أبسط شيء يمكنك القيام به هنا هو إنشاء فئة أساسية مجردة مع جميع أعضاء GIS المشتركين ثم وراثة فئات X الأخرى التي لن تحتوي على أكثر من تعيينات NHibernate الضرورية.سأستخدم بعد ذلك نمط المصنع لإنشاء كائن من النوع المحدد باستخدام البيانات التعريفية الخاصة بك.

إحدى الطرق التي يمكنك من خلالها القيام بذلك هي الإعلان عن واجهة مثل IGisObject تحتوي على الخصائص العامة المعلنة على الواجهة.ثم قم بتنفيذ فئة محددة يتم تعيينها لكل جدول.بهذه الطريقة ستظل جميعها من النوع IGisObject.

يمكنك إلقاء نظرة على ما يقوله Ayende هنا: كيانات الجداول المتعددة.

ولكن بما أن لديك جداول منفصلة، ​​فلا أعتقد أنها ستنجح.يمكنك أيضا التحقق من مجموعة نهوسر

أعتقد أنني سأطرح السؤال عن سبب ملاحقتك لبيانات نظم المعلومات الجغرافية مباشرة في قاعدة البيانات وعدم استخدام واجهة برمجة التطبيقات التي يتم توفيرها عادةً كتجريد لك.إذا كان هذا نظام ESRI، فهناك أدوات تسمح لك بإنشاء عروض قاعدة بيانات ثابتة في كائنات GIS الخاصة بهم، ومن ثم ربما من هذه النقطة قد يكون مناسبًا لاستخراج البيانات.

من وثائق NHibernate، يمكنك استخدام أحد ملفات رسم خرائط الميراث.

قد يكون لديك أيضًا فئة منفصلة لكل جدول، ولكن اطلب منهم جميعًا تنفيذ بعض الواجهة المشتركة

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