كيف يمكنك منع أكثر تعقيدا حلول أو التصاميم ؟ [مغلقة]

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

  •  01-07-2019
  •  | 
  •  

سؤال

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

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

المحلول

الحصول على شخص جديد أن ننظر في الأمر.

نصائح أخرى

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

في تجربتي, تصميم مفرط العامة الحالة يميل إلى تولد الكثير من التعقيد.

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

الجزء الصعب هو أن الرجل الذي وضعت "يعمل على أي كوكب" تصميم غالبا ما يعتبر ذكي, لذلك قد تضطر إلى العمل بجد إلى القول بأن التصميم هو أيضا ذكي.

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

إليك بعض الأفكار للحصول على تصميم أكثر بساطة:

  • قراءة بعض كتب البرمجة و المواد ثم تطبيق لهم في العمل الخاص بك و كتابة التعليمات البرمجية
  • قرأت الكثير من التعليمات البرمجية (جيدة أو سيئة) مكتوبة من قبل أشخاص آخرين (مثل مشاريع مفتوحة المصدر) وتعلم لمعرفة ما يصلح وما لا
  • بناء شبكات الأمان (وحدة الاختبارات) لتمكين التجريب مع التعليمات البرمجية الخاصة بك
  • استخدام التحكم في الإصدار لتمكين التراجع ، إذا كانت تلك التجارب تأخذ المنعطف الخاطئ
  • TDD (اختبار مدفوعة التنمية) و BDD (السلوك التنمية المدفوعة)
  • تغيير الموقف الخاص بك, أسأل كيف يمكن أن تجعل من ذلك ، "أنه يعمل ببساطة" (الاتفاقية على تكوين يمكن أن تساعد هناك ؛ أو تسأل كيف أن أبل تفعل ذلك)
  • الممارسة (مثل الجاز اللاعبين المربى مع رمز ، في محاولة رمز كاتا)
  • كتابة نفس الكود عدة مرات ، مع لغات مختلفة و بعد مرور بعض الوقت
  • تعلم لغات جديدة مع المفاهيم الجديدة (إذا كنت تستخدم لغة ثابتة ، تعلم ديناميكية واحد ؛ إذا كنت تستخدم اللغة الإجرائية ، وتعلم وظيفية واحدة ؛ ...) [لغة واحدة في السنة عن الحق]
  • اطلب من شخص إلى مراجعة قانون بنشاط نسأل كيف يمكنك أن تجعل الخاصة بك رمز أبسط وأكثر أناقة (ثم جعله)
  • الحصول على سنوات تحت الحزام الخاص بك عن طريق القيام الأشياء المذكورة أعلاه (الوقت يساعد نشط العقل)

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

قراءة "العمل بفعالية مع إرث كود" من قبل Michael C.الريش.

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

باستخدام اختبار التنمية القائمة التالية روبرت C.مارتن ثلاث قواعد TDD:

  1. لا يسمح لك لكتابة أي رمز الإنتاج إلا أن تجعل الفشل وحدة اختبار يمر.
  2. لا يسمح لك أن تكتب أي أكثر من اختبار وحدة من كافية إلى فشل ؛ وتجميع حالات الفشل هي فشل.
  3. لا يسمح لك لكتابة أي رمز الإنتاج من كافية لتمرير واحد فشله في اختبار الوحدة.

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

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

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

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

استخدام الهزيل اللغة. لغات مثل جافا ، أو في بعض الأحيان C++ يبدو في بعض الأحيان إلى تشجيع سيئة ، الملتوية الحلول.أشياء بسيطة تميل إلى span أكثر من عدة أسطر من التعليمات البرمجية, و تحتاج فقط إلى استخدام 3 المكتبات الخارجية كبيرة إطار لإدارة كل شيء.النظر في استخدام Python, Ruby, الخ.- إذا لم للمشروع الخاص بك, ثم لبعض استخدام الخاص.يمكن أن تغيير العقلية الخاصة بك لصالح البساطة ، إلى التأكد من أن البساطة هو ممكن.

فإنه أمر لا مفر منه مرة واحدة كنت قد مبرمج أن هذا سوف يحدث.إذا كان لديك بجدية unestimated جهد أو ضرب المشكلة اين الحل الخاص بك فقط لا يعمل ثم توقف الترميز والحصول على التحدث مع مدير المشروع.أحب دائما أن تأخذ حلول معي إلى الاجتماع, مشكلة, يمكنك أن تفعل x والتي سوف يستغرق 3 أيام أو يمكننا أن نحاول y والتي سوف تستغرق 6 أيام.لا تجعل اختيار نفسك.

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

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

بعض التقنيات أجد المفيدة:

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

في سياق مماثل شخص آخر يمكنك ترتد الأفكار.تأكد من أنك يمكن أن يفسر لهم لماذا تعقيد له ما يبرره!

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

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

هذا يلي من Bendazo بعد تبسيط حتى يصبح من السهل.

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

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

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

طلب آراء من الناس الذين يحصلون على ركلات الترجيح من ونظيفة, حلول بسيطة.

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

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