ما هي الطريقة المفضلة لديك من التفاعل مع قواعد البيانات من لغة البرمجة?[مغلقة]

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

  •  08-06-2019
  •  | 
  •  

سؤال

هناك العديد من الطرق للتواصل والتفاعل مع طبقة قاعدة البيانات.في جافا على سبيل المثال المشتركة الاستخدامات JDBC المكالمات من الخام SQL ، الكائن العلائقية المخططون, JDBCTemplate (الربيع) الإجراءات المخزنة.... الخ

في اللغة الخاصة بك ، الخيار الذي تفضله و لماذا ؟ عندما كنت تنظر في الآخرين ؟

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

المحلول

ORM في كل مرة على الأقل يجب أن نفكر في قواعد البيانات أفضل.

نصائح أخرى

أنا حقا مثل 3 + 1 الطبقة وسيلة للقيام بهذه الأمور.الدرجة الأولى على واجهة واحدة منطق الأعمال ، ومن أجل استمرار البيانات.آخر واحد كنت أقول ؟ كائنات المجال و الواجهات.هذا يجعل من الممكن لتحميل أي واحد أو اثنين من أهم مستويات بالإضافة إلى المجال "الطبقة" ، ينبغي أن قانون العمل.

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

واجهة المستخدم الطبقة يفعل عكس ذلك تماما.فإنه يعرض ويتلقى البيانات في الطريقة التي يمكن للمستخدم تتصل و خرائط الإدخال/الإخراج إلى كائن المجال الشكل.

منطق الأعمال الطبقة فقط أريد أن أعرف شيء واحد.منطق الأعمال.فإنه لا يهتمون البيانات من و لا يهتمون حيث البيانات الطبقة وضعه.فهو يعرف أنه ينبغي أن العلم حساب كان مكشوفا ، وكيفية القيام فعليا ليس هذا هو جزء من عمله حقا.

المجال الكائنات نفسها ليس لديها أي منطق ، فهي مجرد حاويات لنقل البيانات بين الطبقات.هذا يعني أنه يمكنك تحميل كائنات المجال واجهات دون الحاجة إلى التفكير في كل شيء عن التبعيات.

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

</rant>

تحرير:نعم.وهذا ينطبق على كل من ينق ، دون سرعة الصوت, وغيرها من ORMs.

روبي على القضبان' ActiveRecord مناديل الكلمة مع كل ما رأيت حتى الآن. LINQ يبدو أنه قد يكون من الأفضل في بعض الحالات, ولكن ActiveRecord هو في غاية المرونة.

LINQ هو الطريق للذهاب من هنا

أنا أفضل أن بناء الأعمال التجارية نموذج كائن طبقة (الكائنات collecitons من الكائنات).

بناء القدرة على التفاعل مع قاعدة البيانات في كل كائن/جمع (لـ SQL Server استخدام النظام.البيانات.SqlClient).لقد استعملت هذا النمط ل SQL Server, MySQL و Oracle.

ثم تتفاعل مع الكائنات من رمز التطبيق.

قبل التلخيص قاعدة البيانات الخاصة بي في الكائنات ، رمز التطبيق هو ثابت بغض النظر عن الخلفية قاعدة البيانات الخاصة بنا.

اسندت هو في الواقع رائعة.

انا استخدم SQL الكيمياء عند العمل داخل الثعبان - يعمل مع كل DBMS لقد عبر تشغيل.

خفيف الوزن تعتمد على البيانات والتطبيقات على MacOS X, يمكنني استخدام البيانات الأساسية التي لديها قدر كبير نمذجة البيانات أداة يمكن الوصول إليها عن طريق Xcode.

كل من هذه تظهر أن ORM الحق في القيام به هو ممتاز.لقد كان أقل النجاح والتمتع مع EJB.

أنا لم نصل إلى LINQ العالم حتى الآن, ولكن أنا حقا أحب DataTable/TableAdapter الفئات التي Visual Studio قد يتم عن طريق XSD dataset.بواسطة تستمر بضعة والنقرات بعد خلق مخطط قاعدة البيانات لدي الآن مجموعة البيانات/DataTable الكائن الذي يتم كتابتها بقوة و لدي محول الأساليب التي تستخدم parametrized الاستفسارات إلى إجراءات مخزنة كل ما عندي من البيانات الخام.سوف حتى إنشاء الاستعلام الجدول محولات بعض تلك الإجراءات التي لا ترتبط مباشرة إلى جدول.

إذا لم تقم بإنشاء الإجراءات المخزنة بعد مجرد جداول معالج إنشاء إجراءات أو مخصصا البيانات SQL بالنسبة لك.

هذا وقد تم منذ Visual Studio 2005 و قد خفض جذري على "هيكل" مع تطبيقات ويب جديدة و أستطيع التركيز أكثر على الأعمال وعرض المنطق.

نحن نستخدم نهج مختلط ، اعتمادا على ما سوف تتناسب مع حالة معينة ضمن التطبيق:

  • عند قراءة صفحة تستحق من المعلومات على الشاشة للمستخدم تحديث نستخدم السبات
  • عند تجهيز دفعة من التحديثات أو تلخيص حيث معظم البيانات بالفعل في قاعدة البيانات (على سبيل المثالنهاية اليوم تجهيز) نستخدم PL/SQL (وحاول أن تفكر في مجموعات)
  • عندما يقوم المستخدم بإجراء بحث أو تشغيل تقرير موجز نستخدم ibatis sqlmaps لبناء بعض SQL واعادة فقط الحقول ونحن مهتمون في (ليس كل عمود و بالتأكيد ليس أي لا لزوم لها الطفل الصفوف ، urggh)
  • أي أن تشغيل سريع سنستعمل النهج يعمل بشكل أفضل

هذا هو الحال مع جافا/أوراكل.

ActiveRecord, الذي هو نمط موثقة الأولى (على ما أظن) في فاولر أنماط من المشاريع المعمارية.اعتقد انها نفذت في اللغات الأخرى من روبي ، على الرغم من أنها معروفة مثل التكنولوجيا الأساسية في القضبان.ومهما كان أنيق التجريد قاعدة البيانات, على الرغم من أنني يجب أن أعترف أن أجد عالي الكعب قليلا و في find_by_sql المنطقة.ولكن هذا قد يكون مجرد لي.

ولكن (وضع على غاضب الرجل العجوز قبعة الآن) كل ORMs في العالم ليست بديلا عن معرفة جيدة SQL ، والتي بدونها لا أحب حقا أن نرى الوصول إلى RDBMS يسمح على الإطلاق.

نحن نستخدم دلفي و Oracle Data Access Components (ODAC) و اللغط عبر أوراكل.OleDBProvider.

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

بلدي المفضل هو الطريق إلى كائن طبقة تجريد.من الناحية المثالية, هذا هو فقط المكان الذي يعمل مع SQL.ولكن في الممارسة العملية ، الكائنات في بعض الأحيان تحتاج إلى القيام SQL-y الأشياء أيضا.ولكن لا شيء خارج الكائن.

حتى الآن, لقد كتبت هذه الطبقات نفسي لأن ما كان متاح كان الأمر محرجا جدا بطيئة جدا أو كبيرة جدا.

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

أحب السبات الكثير :)

أعرف أنه لديها منحنى التعلم ، ولكن بمجرد أن تتقن انها لطيفة جدا.

وغني عن القول, أنا لا يمكن أن تنتظر للحصول على يدي على الجديد إطار الكيان في .NET framework 3.5 SP1 (أعلم أنه متاح بالفعل ، ولكن أنا قليلا كسول نوع XML :) )

في C# أحب LINQ to SQL عن أي شيء جديد, ولكن أنا حقا مثل استخدام .netTiers + CodeSmith مولد الحصول على سريعة وقذرة طبقة البيانات إلى قاعدة البيانات يحدث إذا أنا باستخدام C# على .NET 2.0.

ونحن حاليا باستخدام ODAC التحدث إلى قاعدة بيانات Oracle و استخدام الكثير من أوراكل حزم (PL/SQL).N-tier نظام يتم من خلال RemObjects مما يعني أن العميل لديه أي SQL في ذلك على الإطلاق و يحتاج فقط القدرة على إرسال طلبات HTTP لذا أي تثبيت علوية.

كل هذا يتم باستخدام بورلاند دلفي و تم ووكينغ لمدة 2 سنة في بيئة إنتاج.

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