سؤال

المشروع انا اعمل على ضرب 4200 الخطوط الرئيسية في C# الملفات التي تسبب التحسس إلى اتخاذ بضع ثوان (في بعض الأحيان تصل إلى 6 أو نحو ذلك) للرد خلالها Visual Studio يحبس.أنا أتساءل كيف الجميع يقسم الملفات و ما إذا كان هناك توافق في الآراء.

حاولت البحث عن بعض أدلة وجدت جوجل C++ دليل, ولكن لم أتمكن من رؤية أي شيء عن دلالات مثل وظيفة أحجام ملف الأحجام ؛ ربما هناك - أنا لم ينظر في ذلك لفترة من الوقت.

إذا كيف يمكنك تقسيم الملفات ؟ هل مجموعة الأساليب الخاصة بك من خلال المهام التي تخدم ؟ من أنواع (معالجات الأحداث الخاصة/العامة)?وما هو الحد الأقصى لحجم هل تقسيم الوظائف ؟

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

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

المحلول

وأعتقد تتلخص مشكلتك مع هذا المصطلح الذي تستخدمه: "الرئيسي C # ملف"

.

وإذا لم تقصد الرئيسي (كما في طريقة الرئيسي ()) ليس هناك مكان لهذا المفهوم.

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

وعادة ملفاتي ليست سوى واحد الى واحد تعيينات من الطبقات.

وأحيانا الفئات التي هي ذات الصلة للغاية في نفس الملف.

وإذا كان الملف كبير جدا فمن مؤشرا صفك كبيرة جدا وعامة جدا.

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

وأحيانا يكون هو الشاشة، ولكن هذا هو الحصول على كبير جدا.

وتحرير:

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

نصائح أخرى

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

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

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

وتقسيم أنواع بك حيث أنه من الطبيعي أن ينقسم منهم - ولكن احترس من الأنواع التي تم فعل الكثير جدا. في حوالي 500 خط (جاوة أو C #) أحصل على القلق. في حوالي 1000 خطوط I تبدأ في النظر الجاد في ما إذا كان ينبغي تقسيم نوع حتى ... ولكن أحيانا فقط لا يمكن / لا ينبغي أن يكون.

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

.

وأحيانا يكون من المنطقي لنوع واحد لديهم <م> الكثير طرق - مثل <وأ href = "http://msdn.microsoft.com/en-us/library/system. linq.enumerable.aspx "يختلط =" noreferrer "> System.Linq.Enumerable ولكن يمكن أن فئات جزئية تساعد في مثل هذه الحالات، إذا كنت تستطيع كسر نوع إلى مجموعات منطقية (في حالة Enumerable، تجمع طريق التجميع / مجموعة العمليات / ويبدو تصفية الخ الطبيعي). مثل هذه الحالات نادرة في تجربتي مع ذلك.

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

تحرير

في ضوء تحرير الخاص بك, كنت دائما أصر على أن الترميز جيدة الممارسة الخلفية التعليمات البرمجية هو نفسه في طبقة العرض.بعض الأنماط المفيدة للنظر في واجهة المستخدم refactorings هي القيادة الاستراتيجية, مواصفات, و الدولة.

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

ولا رمز من الناحية الإجرائية، وأنك لن ينتهي مع 4200 خط في ملف واحد.

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

وعموما أنا لم يكن لديك الملفات مع أكثر من 200 خطوط للقانون، وأنا أفضل لهم لو أنهم أقل من 100.

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

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

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

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

يجب أن تقرأ على C# أسلوب إعادة بيع ديون حقا فهم القضايا أنك معالجة.

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

عناصر من C# ستايل هو جيد شجرة ميتة C# ستايل دليل ، وهذا بلوق وظيفة لديها عدد من وصلات جيدة على الانترنت نمط أدلة.

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

وهذا هو الكثير ، ولكن النامية الذوق والأناقة الوضوح هو الفرق الرئيسي بين المطورين و السيئة.

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

هل تمثل مفهوم واحد، مثل مستخدم أو الدولة؟ ثم لا ينبغي أن يكون لديك أي رسم، تحميل / حفظ، إلخ ...

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

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

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

ويمي العثور على وظيفة جيدة ... نظرة من خلال هذه أن تبدأ:

كيف دو-I-كسر-بي-الإجرائي الترميز -habits

هي-هناك-أي-قواعد مقابل ووب

وجوه المنحى-أفضل الممارسات الميراث-V -composition-الخامس واجهات

وهناك أيضا الوظائف التي سوف يحولك إلى الكتب تصميم OO جيدة. A "إعادة بيع ديون" الكتاب هو على الارجح واحدة من أفضل الأماكن التي يمكن أن تبدأ.

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

وحظا سعيدا.

يمكنك أن تبحث عن الأشياء الصغيرة إلى تغيير و تغيير كل ببطء مع مرور الوقت.

  • كل الأساليب المستخدمة في هذا الدرس فقط ؟ البحث عن وسائل الدعم ، مثل التحقق من صحة سلسلة التلاعب التي يمكن نقلها إلى مساعد/util الطبقات.

  • هل تستخدم أي #المنطقة أقسام ؟ مجموعات منطقية من ذات الأساليب في #المنطقة غالبا ما تصلح يجري تقسيمها إلى فئات منفصلة.

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

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

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

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

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

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

حظا سعيدا مع البحث الخاص بك.

استخدم الطبقات الجزئية. يمكنك كسر أساسا فئة واحدة إلى ملفات متعددة.

ولعل OP يمكن أن تستجيب: هو مشروعك باستخدام البرمجة الشيئية؟ والحقيقة أن استخدام كلمة "ملف" يشير إلى أن الأمر ليس كذلك.

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

ومحلل التحسس في Visual Studio 2008 ويبدو أن أسرع بكثير من واحد لعام 2005 (وأنا أعلم أنها فعلت على وجه التحديد الكثير من العمل في هذا المجال)، وذلك على الرغم من أنك يجب بالتأكيد النظر في تقسيم ملف يصل في مرحلة ما عن غيرهم وقد ذكر أو Visual Studio 2008 قد حل مشكلة أداء الفورية الخاصة بك. كنت استخدمه لفتح 100K + خط ينق إلى ملف SQL دون الكثير من هذه المسألة.

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

في الوقت الحاضر، وهي أكبر الفئات التي أنا أكتب ما يزيد عن 200 طوابير طويلة، والطرق هي في معظمها 1-10 خطوط طويلة.

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

والاتفاقية الأول هو استخدام لديها ClassName_RegionName.cs. على سبيل المثال، إذا كنت ترغب في الخروج فئة التي تدير مخطط للاتصال قاعدة بيانات، واتصلت DatabaseConnection الصف الأول من شأنه أن يخلق ملف يسمى DatabaseConnection.cs للطبقة الرئيسية، ثم DatabaseConnection_Schema.cs عن وظيفة المخطط.

وبعض الطبقات فقط لتكون كبيرة. هذا التصميم ليس سيئا. أنها ليست سوى التنفيذ الثقيلة.

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