وأفضل تصميم؟ الكائن نفسه، الدول المختلفة الممكنة

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

سؤال

ولدي طلب بسيط جدا والتي تتكون من موقع الواجهة الأمامية ASP.NET، مع خدمة ويندوز WCF القيام رفع الأحمال الثقيلة الخلفية المنطق.

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

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

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

والآن، هذه الفئة وظيفة لديها 3 المختلفة الممكنة الاستخدامات / الدول. استخدامه الرئيسي هو داخل الخدمة، لاستخدام وظيفة تشغيل () لتشغيل حرفيا على وظيفة. كما أن لديها 2 استخدامات أخرى - بوصفها نموذجا لوحة I المذكورة أعلاه، وبوصفها نموذجا لمربع التحرير والسرد وصفتها أعلاه. الطبقة وظيفة لديها 3 المنشئات العامة، كل واحد وضع ذلك في واحدة من الدول 3. في جميع الحالات، فإن كل "الدولة" مختلفة يهتم فقط بعض الأعضاء أن 2 ولايات أخرى لا يهتمون - في بعض الحالات تستخدم بعض أعضاء في جميع ولايات 3. في "التحرير والسرد حالة مربع 'هو أبسط - في هذه الحالة أريد فقط 3 حقول للقراءة فقط. في "دولة وحة" ما يهمني 6 حقول للقراءة فقط .. في ولاية "العمل" أنا أساسا خلق هذه القيم الحقل كما تقدم وظيفة - ويجب أن يكون كل الخاص

.

وأنا أبحث فقط عن وسيلة نظافة للقيام بذلك. إذا كنت مثيل فئة وظيفة في ولاية A، I <م> معرفة من شأنها أن تفشل في الوصول عضوا X لن تنجح، أو استدعاء الدالة Y. ومع ذلك ما زال كود تحويل البرمجي.

وأنا متأكد من أن الآخرين قد واجهوا هذه المشكلة قبل. كنت أفكر في وجود فئة أساسية الوظيفة ضعت MustInherit / المجرد، ومن ثم وجود 3 الفئات المشتقة، واحد لكل دولة. وضع أعضاء المشتركة في القاعدة وتلك المحددة للدولة في اشتقاق، ومجرد استخدام الفئات المشتقة في قانون بلدي حيثما كان ذلك مناسبا. هذا يبدو بسيطا بما فيه الكفاية لأغراض بلدي ويحل مشكلتي. ربما كان يمكن أن يكون أيضا نوعا من JobFactory ... أعتقد أنني أبحث فقط لكيفية حل الآخرين هذا الأمر ربما لا أفكر خارج منطقة الجزاء بما فيه الكفاية ... لقد كان العديد من الطبقات تكون أجهزة الدولة من قبل في بلدي أيام تطوير اللعبة الهاوي - ولكن هذا كان مختلفا، لأن حالات تلك الفئات يمكن أن تغير الدول (على سبيل المثال، تغيرت على "العدو" الطبقة يمكن أن يكون وضعها من "attack_mode 'إلى' انتظار ') في حالتي، لا يوجد الدول تغيير - خلقت مرة واحدة، يجب على وظيفة البقاء في حالته وعدم محاولة التصرف في واحدة مختلفة. تتبع الدولة ورمي الاستثناءات إذا تم استخدام أسلوب / عضو في حين لا تكون دولة معينة يبدو عمل هش والكثير جدا. أي اقتراحات على أساس كيف تم حل هذه المشكلة من قبل؟ وهذا ما أحاول القيام به مبالغة؟ إذا كانت ستا وظيفةrted للحصول على ولايات أخرى وأكثر اختلافا، لا اعتقد - ولكن ربما لو لم يحصل أن العديد من ولايات مختلفة ثم أنا بحاجة إلى التفكير في تقسيمه إلى فئات مختلفة على أي حال ... مجرد النظر الخاصة بك 2 سنت

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

المحلول

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

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