سؤال

هل يتناقضون؟

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

ماذا تعتقد؟هل تحاول دائمًا الفصل والتعامل مع النفقات العامة؟

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

المحلول

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

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

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

نصائح أخرى

وYAGNI هو كقاعدة عامة (وليس الدين). فك الارتباط هو أكثر أو أقل تقنية (أيضا ليست الدين). حتى انهم لا علاقة حقا، كما أنها لا تتعارض مع بعضها البعض.

وYAGNI حوالي البراغماتية. افترض أنك لا تحتاج إلى شيء، حتى تقوم بذلك.

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

و"فصل" (أو "زوجين فضفاضة") هي الفعل، لذلك يتطلب العمل. YAGNI هو افتراض، الذي ضبط عند جدوا أنه من لم يعد صحيحا.

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

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

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

فك الارتباط من أجل فك الارتباط يمكن أن تكون سيئة. بناء مكونات قابلة للاختبار مهم جدا رغم ذلك.

والجزء الصعب من القصة هو معرفة متى وكم فصل التي تحتاج إليها.

إذا "وحدة الاختبار هو ألم في المؤخرة" ثم أود أن أقول إن كنت <م> لا في حاجة إليها. أكثر من فصل الوقت يمكن أن يتحقق مع تكلفة صفر تقريبا كذلك، لذلك لماذا لا تريد أن تفعل ذلك؟

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

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

لقرار شخصي جدا، ثم، لا يمكن أن يكون هناك مبادئ توجيهية ليصف.

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

وYAGNI الفوضى :) ... حقا، ونحن لسنا في حاجة إلى أن يكون كل رمز مختلطة للذهاب "أسرع".

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

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

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