سؤال

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

لذلك أنا أفكر، من أجل معرفة ما إذا كانت فكرتي تتمتع بأي جر لديه أقل تكلفة، لمتابعة Yagni متطرف:

  • لا توجد ميزات أمنية (أي أي مستخدمين، إلخ). لأي عميل جديد أقوم بتثبيت مثيل قاعدة بيانات جديدة ومثيل WebApp جديد. يتم حماية كل مثيل WebApp بواسطة كلمة مرور خادم HTTP (DIGEST أو إذن أساسي، ربما عبر HTTPS).

  • لا التدويل. مجرد سلسلة الإنجليزية جزءا لا يتجزأ من التعليمات البرمجية المصدر.

  • لا فصل. فقط صفحات الويب التي تحدث إلى قاعدة البيانات.

  • لا حيل الأداء. لا توجد قوائم انتظار، مبتدئ، توقيت، وظائف الخلفية، والمكالمات غير المتزامنة، إلخ.

  • لا التوسع. لا تقسيم قاعدة البيانات، لا شظايا، لا التجميع أو النسخ المتماثل.

  • بالإضافة إلى ذلك، استخدم Yagni على المستوى الجزئي كلما كان ذلك مناسبا.

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

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

هل هذا ما يعنيه الناس بجني، أو هو هذا مثال مرضي وبريث على Yagni؟

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

المحلول

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

بعض الأشياء التي ستحتاجها. من وجهة نظري، النقاط الأكثر أهمية:

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

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

نصائح أخرى

هذا هو ما يسمونه "النماذج الأولية". أذهب خلفها.

هناك دقة بين ياجني والنماذج الأولية.

  1. عندما يكون التهاب المميزات المطلوب المستخدم، وتقول لا، هذا ياجني.

  2. عندما ينطبق (I18N، "فصل" (؟)، قوائم الانتظار، المخابرات، مؤقتات، إلخ) وأنت تقول لا لنفسك. هذا ليس حقا yagni. هذا النماذج الأولية.

يبدو أن معظم ما لديك هنا لا يبدو أنه طلاء ذهبي موجه نحو المستخدم. لن أتصل بهذا - بدقة - Yagni.

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

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

تطبيق الويب الخاص بك تستطيع دعم OpenID، Active Directory، قاعدة البيانات المحلية، الملف المسطح، و Zillion أنواع أخرى من أساليب المصادقة، ولكن يمكنك تلبية الاحتياجات عن طريق تنفيذ أبسط واحد. (إلي، ياجنان يدل dtsttcpw.).

"يمكنني أن أفعل أي شيء، بالنظر إلى الوقت الكافي"

- كل مبرمج قابلته على الإطلاق

ليس من المعجبين بمبدأ Yagni بنفسي؛ أراها تستخدم كثيرا في تبرير البرامج سيئة التصميم. البرمجيات الزائدة هي مشكلة أيضا بالطبع، لكن "Yagni" لا تترك مساحة كبيرة لتحليل التأثير الفعلي.

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

لقد كتبت واحدة أو تطبيقين كان من المفترض أن تكون تطبيقات مضايقة أو المبالغ المتاحة لا تزال في الإنتاج بعد عامين. هم آلام للحفاظ عليها.

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

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

إذا كنت ستتطور حقا تطبيق ويب ثوري لسوق المؤسسة أنا لست متأكدا حقا أي من هذه الأشياء Y.واو أإتجاه جيمأوننا نeed.

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

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

فقط 0.2

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

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

القول إن كودك يجب أن يكون دائما مفتوحا للتعديلات إذا كان عميلك يفكر ميزة Y هو ضروري للغاية. بنية جيدة أمر لا بد منه!

فيما يتعلق بالتوسع، قوائم الانتظار، التخزين المؤقت: ذلك يعتمد. ما هو شرط التطبيق؟ هل هو موقع إنترانت يستخدمه 10 مستخدمين متزامنين أو هل هو موقع إلكتروني شهير مع ملايين المستخدمين. هذا يعتمد. العثور على المتطلبات والقيام بذلك - لا شيء أكثر. yagni. إذا تغير الاحتياجات الخاصة بك؛ تغيير طلبك - يجب أن يكون مفتوحا للتعديلات.

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

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

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

إليك مثال ...

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

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

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

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

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

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

ما سأفعله هو:

1) تصميم أنها تأخذ في الاعتبار القرارات المعمارية الصحيحة. من المحتمل أن تكون التدويل والأمن يجب أن تتلاشى في هذه الحالة.

2) عند تطوير، قم بإنشاء السنانير ليتم تنفيذ هذه المبادئ لاحقا. لذلك عندما يكون لديك الوقت والميزانية، يمكنك تنفيذها دون إعادة عرض كبير.

3) ثم يمكنك التركيز على الميزات التي من شأنها أن تجعل تطبيقك تطير وأهم أكثر أهمية لعملائك المحتملين.

لذلك أعتقد أنه في هذه الحالة كنت أستخدم المزيد من نهج القبيل من "Yagni المتطرف" كما اقترحت.

في رأيي، يجب أن يتبع Yagni افتراضيا كما يسمح تعزيز الإنتاجية إلى حد كبير.

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

نعم، لكن ...

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

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

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

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

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