سؤال

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

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

والنهج 2: هل يمكن إنشاء خصائص الطبقة الرئيسية وسلم وصولا الى الطبقات التطبيقات الأخرى. (العيوب: ينتهي بك الأمر تمرير مؤشر إلى كائن خصائص لدرجة تقريبا ويبدو أن تصبح زائدة جدا ومرهقة، وأنا لا <م> مثل عليه)

وأي اقتراحات؟

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

المحلول

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

ومن الآثار الجانبية لطيفة لحقن التبعية هو أن التعليمات البرمجية الخاصة بك ينبغي أن تكون أكثر قابلة للاختبار بسهولة.

نصائح أخرى

والواقع، نهج 2 يعمل بشكل جيد حقا.

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

ونهج 2 من تمرير الكائن المعلومات العالمي من خلال مختلف الصانعين الخاص بك هو أسهل للسيطرة.

وباستخدام اضع صريحة يساعد أيضا.

class MyConfig extends Properties {...}

class SomeClass {
    MyConfig theConfig;
    public void setConfi( MyConfig c ) {
        theConfig= c;
    }
    ...
}

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

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

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

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

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

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

وحقن التبعية هو أيضا طريقة لطيفة للقيام بذلك.

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

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

ويمكنك أيضا استخدام واجهات، مجرد محاولة أن لا تبالغي.

وApproache 2 أفضل ديفينيتلي.

وعلى أي حال، يجب أن لا ندع البحث الفئة الأخرى من خلال الكائن التكوين. يجب أن injet التكوين التي اتخذت في الكائن التكوين أووسيدي الكائن.

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

وحتى في الرئيسية () هل يمكن أن يكون

MyObject mobj = new MyObject();
mobj.setLookupDelay(appConfig.getMyObjectLookupDelay);
mobj.setTrackerName(appConfig.getMyObjectTrackerName);

وبدلا من

MyObject mobj = new MyObject();
mobj.setConfig(appConfig);

وحيث appConfig هو التفاف حول المكتبة التكوين اباتشي أن تفعل كل بحث من قاعدة ذات قيمة على اسم القيمة في ملف التكوين.

وبهذه الطريقة وجوه الخاص بك تصبح قابلة للاختبار جدا بسهولة.

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

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