كيف أقنع زملائي في العمل بعدم استخدام مجموعات البيانات لتطوير المؤسسات (.NET 2.0+)

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

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

المحلول

إذا كنت تعمل على تعليمات برمجية قديمة (على سبيل المثال، التطبيقات المنقولة من .NET 1.x إلى 2.0 أو 3.5)، فسيكون الابتعاد عن مجموعات البيانات فكرة سيئة.لماذا تغيير شيء يعمل بالفعل؟

ومع ذلك، إذا كنت تقوم بإنشاء تطبيقات جديدة، فهناك بعض الأشياء التي يمكنك الاستشهاد بها:

  • مناشدة للتجربة ألم في الحفاظ على التطبيقات التي تلتزم بـ DataSets
  • استشهد بمزايا الأداء لنهجك الجديد
  • اطعمهم بحل وسط جيد.انتقل إلى .NET 3.5، وقم بترقية LINQ إلى SQL، على سبيل المثال:في حين لا يزال متمسكًا بالبنية المعتمدة على البيانات، يعد خروجًا كبيرًا وضخمًا عن مجموعات البيانات المفهرسة بالسلسلة، ويفرض...هاهو!مجموعات مخصصة - بطريقة مخفية عنها.

المهم هو أن تظل متسقًا مهما كان النهج الذي تستخدمه، وأن تكون صادقًا تمامًا فيما يتعلق بإيجابيات وسلبيات النهج الذي تتبعه.

إذا فشل كل شيء آخر (على سبيل المثال، لديك فريق تطوير يرفض تمامًا التزحزح عن الممارسات القديمة ويشكك في تعلم أشياء جديدة)، فهذا يعد بمثابة حل إشارة واضحة جدًا جدًا أنك قد تجاوزت فريقك، فقد حان الوقت لترك شركتك!

نصائح أخرى

افعل ذلك بالقدوة وتحرك بخفة.أي شيء أقوى سوف ينفرك من بقية الفريق.

تذكر أن تفكر في احتمالية أن يكونوا على شيء فاتك.كونك جزءًا من فريق يعني تبادل الأدوار في التعلم والتدريس.

لا يوجد شخص واحد لديه كل الإجابات.

تذكر أن تفكر في احتمالية أن يكونوا على شيء فاتك.كونك جزءًا من فريق يعني تبادل الأدوار في التعلم والتدريس.

معار.إن الفكرة بأكملها القائلة بأن "تطوير المشاريع" يختلف بطريقة أو بأخرى عن التطور الطبيعي (وعادة ما يكون المعنى الضمني "أكثر أهمية من") تزعجني حقًا.

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

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

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

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

  • يتطلب أكثر من 12 شهرًا من العمل لنقل الكود الحالي لدينا.تخسر.

وبطبيعة الحال، "يعتمد" على الوضع.في بعض الأحيان تكون DataSets أو DataTables أكثر ملاءمة، كما لو كان منطق الأعمال خفيفًا جدًا، أو التسلسل الهرمي المسطح للكيانات/السجلات، أو تتميز ببعض إمكانيات الإصدار.

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

على سبيل المثال، في أحد المشاريع التي شاركت فيها منذ عامين ونصف، كانت هناك وحدة واجهة مستخدم من المفترض أن تعرض الأسئلة وعناصر التحكم في الإجابة في WinForms DataGrid واحد (ولكي نكون أكثر تحديدًا، كانت UltraGrid من Infragistics).بعض المتطلبات الأكثر صعوبة

  • يمكن أن يكون التحكم في الإجابة على السؤال أي شئ - مربع نص، أو خيارات خانة الاختيار، أو خيارات زر الاختيار، أو القوائم المنسدلة، أو حتى لإظهار مربع حوار مخصص قد يسحب المزيد من البيانات من خدمة ويب.
  • اعتمادا على ما أجاب عليه المستخدم، يمكن أن يؤدي ذلك إلى ظهور المزيد من الأسئلة الفرعية مباشرة تحت السؤال الرئيسي.وإذا تم تقديم إجابة مختلفة لاحقًا، فيجب أن يعرض ذلك مجموعة أخرى من الأسئلة الفرعية (إن وجدت) المتعلقة بتلك الإجابة.

تمت كتابة التنفيذ الأصلي بالكامل في DataSets وDataTables والمصفوفات.كان مقدار التكرار خلال مئات الصفوف لجداول متعددة أمرًا محيرًا للعقل تمامًا.لم يساعد ذلك المبرمج الذي جاء من خلفية C++ في محاولة ذلك المرجع كل شيء (مرحبًا، الكائنات التي تعيش في الكومة تستخدم المتغيرات المرجعية, ، مثل المؤشرات!).لا أحد، ولا حتى المبرمج الأصلي، يستطيع تفسير سبب قيام الكود بما يفعله.لقد جئت إلى مكان الحادث بعد أكثر من ستة أشهر من ذلك، وكان لا يزال مليئًا بالأخطاء.لا عجب أن مطور الجيل الثاني الذي توليت منه قرر الاستقالة.

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

ومن المفارقات أنني أردت نشر سؤال كان عكس ذلك تمامًا.لقد اتبع معظم المبرمجين الذين عملت معهم نهج كائنات/مجموعات البيانات المخصصة.يكسر قلبي مشاهدة شخص ما مع تعريف جدول SQL Server الخاص به مفتوحًا على شاشة واحدة، ويكتب ببطء فئة غلاف الصف المطابقة في Visual Studio في شاشة أخرى (مع استكمال الخصائص الخاصة وأدوات ضبط الحروف لكل عمود).إنه أمر مؤلم بشكل خاص إذا كانوا أيضًا عرضة لإنشاء جداول مكونة من 60 عمودًا.أعلم أن هناك أنظمة ORM يمكنها بناء هذه الفئات تلقائيًا، لكنني رأيت النهج اليدوي يستخدم بشكل متكرر أكثر.

تتضمن الاختيارات الهندسية دائمًا مقايضات بين إيجابيات وسلبيات الخيارات المتاحة.يتميز النهج المرتكز على DataSet بمزاياه (التمثيل في الذاكرة لبيانات قاعدة البيانات الفعلية في الذاكرة، والفئات التي يكتبها أشخاص يعرفون ما يفعلونه، والمألوفة لمجموعة كبيرة من المطورين وما إلى ذلك)، كما تفعل كائنات البيانات المخصصة (التحقق من نوع الترجمة، لا يحتاج المستخدمون إلى تعلم SQL وما إلى ذلك).إذا كان كل شخص آخر في شركتك يسلك مسار DataSet، فمن الممكن تقنيًا على الأقل أن تكون DataSets هي الخيار الأفضل لما يفعلونه.

مجموعات البيانات/الجداول ليست سيئة للغاية، أليس كذلك؟

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

في النهاية، إذا نجح الكود، فإن الباقي هو الدلالات من وجهة نظري.

أعتقد أنه يمكنك محاولة بيع فكرة أدوات رسم الخرائط ورسم الخرائط O/R.تعتبر فائدة معاملة الصفوف ككائنات قوية جدًا.

أعتقد أنه يجب عليك التركيز على الأداء.إذا كان بإمكانك إنشاء تطبيق يُظهر اختلاف الأداء عند استخدام DataSets مقابل Custom Entities.حاول أيضًا أن توضح لهم مبادئ التصميم المستند إلى المجال وكيف تتناسب مع أطر عمل الكيان.

لا تجعل الأمر مناقشة دينية أو عقائدية.من الصعب الفوز بهذه الأمور (وهذا ليس ما تريده على أي حال)

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

كان لدي مطورين يستخدمون dataTables لتخزين البيانات التي تم جلبها من قاعدة البيانات ومن ثم الحصول على كود منطق الأعمال باستخدام dataTable هذا...وأوضحت لهم كيف قمت بتقليل الوقت اللازم لتحميل الصفحة من استغراق 7 ثوانٍ من وحدة المعالجة المركزية بنسبة 100% (على خادم الويب) إلى عدم القدرة على رؤية تحرك خط وحدة المعالجة المركزية على الإطلاق.عن طريق تغيير كائن الذاكرة من dataTable إلى جدول التجزئة.

لذا خذ مثالاً أو حالة مفادها أنه من الأفضل تنفيذ شيء ما بشكل مختلف، واربح تلك المعركة.لا تخوض حرباً على مستوى عالٍ..

إذا كانت قابلية التشغيل البيني ستكون مصدر قلق في المستقبل، فمن المؤكد أن DataSet ليس هو الاتجاه الصحيح للذهاب إليه.يمكنك الكشف عن DataSets/DataTables عبر الخدمة ولكن ما إذا كان ينبغي عليك ذلك أم أنه قابل للنقاش.إذا كنت تتحدث عن .NET->.NET، فمن المحتمل أنك على ما يرام، وإلا فسيكون لديك مطور عميل غير سعيد للغاية من الجانب الآخر من السياج يستهلك خدمتك

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

إذا كان بإمكانك الملف الشخصي، فما عليك سوى القيام بذلك والملف الشخصي.مجموعات البيانات أثقل من البسيطة Collection<T>

قارئات البيانات أسرع من استخدام المحولات...

يعد تغيير السلوك في كائن ما أسهل بكثير من تدليك مجموعة بيانات

على أي حال:فقط افعل ذلك، واطلب المغفرة وليس الإذن.

لا يحب معظم المبرمجين الخروج من مناطق راحتهم (لاحظ أن التقاطع بين مجموعة "معظم المبرمجين" ومجموعة "Stack Overflow" هو على الأرجح المجموعة الفارغة)."إذا نجحت من قبل (أو حتى عملت للتو) فاستمر في القيام بذلك".يتطلب المشروع الذي أعمل عليه حاليًا الكثير من الحجج لجعل المبرمجين الأقدم يستخدمون مجموعات XML/المخططات/البيانات بدلاً من ملفات CSV فقط (الإصدار السابق من البرنامج يستخدم ملفات CSV).إنها ليست مثالية، والمخططات ليست قوية بما يكفي للتحقق من صحة البيانات.لكنها خطوة في الاتجاه الصحيح.يستخدم الكود الذي أقوم بتطويره تجريدات OO على مجموعات البيانات بدلاً من تمرير كائنات مجموعة البيانات.بشكل عام، من الأفضل التدريس بالقدوة، خطوة صغيرة واحدة في كل مرة.

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

تم إنجاز المهمة.

التركيز على البيانات يعني تعقيدًا أقل في التعليمات البرمجية.

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

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

تبدأ صغيرة.هل هناك تطبيق مفيد يمكنك استخدامه لتوضيح وجهة نظرك؟

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

لذلك كتبت تطبيقًا لأتمتة عملية الإنشاء.كان لديه واجهة مستخدم WinForms بدائية.ولكن نظرًا لأننا كنا نتجه نحو WPF، فقد قمت بتغييره إلى واجهة مستخدم WPF، مع الاحتفاظ بواجهة مستخدم WinForms أيضًا، وذلك بفضل Model-View-Presenter.بالنسبة لأولئك الذين لم يكونوا على دراية بـ Model-View-Presenter، فقد كان مثالًا سهل الفهم يمكنهم الرجوع إليه.

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

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