الروبوت ممارسة الهندسة المعمارية componentized

مقدمة

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

العمارة Componentized

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

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

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

وذلك لأن:

1) بالإضافة إلى Module1 الرئيسية، قد لا يكون أي عنصر أعمال أخرى في حالة التحميل أو الحمل، مثل وحدتين ألف وباء، إذا مترابطة، وعلى افتراض عدم التحميل B، ويستخدم وحدة خط A B، وظيفة، ثم وقد تحطم.

2) أي خدمة المكونات المستقلة، التي قد تكون ناجمة عن مختلف الإدارات المتقدمة في موازاة ذلك، لا ينبغي لنا أن يعتمد كل منهما على الآخر.

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

ويشمل هذا التواصل جانبين:

1) واجهة بين كل قفزة.

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

الممارسات

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

1. الاتصالات

عندما يتعلق الأمر الاتصالات، ويمكن أن نفكر في البرنامج، هناك نوعان من خطوط الحافلات والأحداث. القفز والتوجيه يمكن أن تحل بعض من واجهة الحوار، كانت مخبأة نخب، ولكن لا يمكن حلها بين خدمات المكالمات ورد مع بعضها البعض. صناعة النهج المقترح يشبه واحد من مكونات الروبوت ServiceManager في أربعة - "بالوعة واجهة"، وهذا هو، على أساس طبقة جديدة المكونة ServiceManager، وتوفير الخدمات المشتركة واجهة IService وتنفيذ واجهة حيث احتياجات الخدمة أن تتعرض ويدويا / مسجلة تلقائيا إلى ServiceManager، لذلك كلما تطلب الأمر هي الخدمات المتاحة من خلال: ServiceManager.get (الفئة < تي النمط = "الهامش: 0px؛ الحشو: 0px؛ ماكس العرض: 100؛ مربع التحجيم: مربع الحدود؛ التفاف :! كسر كلمة مهمة." > CLZ) الحصول على طريقة مصنع ثابت، وIBinder getService (اسم سلسلة) الأسلوب، وبطبيعة الحال يمكن أن تتولد من الدرجة ServiceManager من الشرح مماثل ServiceManager addService (اسم سلسلة، خدمة IBinder). الخيار الثاني هو استخدام الحافلة الحدث، مثل EventBus أو RxBus، منذ الحافلة نفسها هي في نفس الوقت لا يمكن أن يتحقق من خلال دعم قفزة وضع مراقب، لذلك يمكن أن تستخدم بدلا من توجيه + نهج "واجهة الحوض". < / T >

2. تسجيل تلقائي

في الممارسة العملية، تحتاج المشروعات القائمة للحفاظ على ثلاثة HashMap، وهي توجيه الجدول، خدمة الجدول والتجمع الجدول، عندما تكون الخدمة أكثر إلى حد ما، دليل صيانة ثلاث جدول التجزئة هي كارثة. لتمويل فوز صغير مخطط المكتبات التوجيه الحالية، على سبيل المثال، وإصدار الجيل الأول هو الحفاظ على HashMap ساكنة التوجيه الطاولة في الذاكرة، يمثل مفتاح المسار، تمثل قيمة CALSS. في حين أن هذا الصيانة سهلة مريحة سيئة، ومع ذلك، فإن قواعد تتغير بمجرد القفز أو ننسى أن التحديث سوف تفشل. التمسك بمبدأ "عدم السماح الجهاز لاستكمال أيديهم،" التغيير في التكرار من خلال انعكاس لمسح AndroidManifest، الجيل التلقائي من HashMap الصيانة، وبالتالي فإن الخريطة يمكن أن يتم تسجيلها تلقائيا. ومع ذلك، منذ المسح هو onCreare في طريقة التطبيق () غير كاملة، وجدت اختبارات اوب عملية المسح تستغرق وقتا طويلا، وبهذه الطريقة الآلية على حساب وقت البدء بالنسبة للسعر. أعتقد أن من الملاحظات، يمكن الشروح إدراج الشفرة التي تم إنشاؤها بشكل حيوي بواسطة HashMap وقت الترجمة، ولكن بعد محاولة للعثور على الجزء التالي من المشهد لا العمل، لأن ميزة الشرح وقت الترجمة فقط نافذا في ترجمة شفرة المصدر، لا يمكنك مسح التعليق AAR حقيبة، وهذا الوضع لا لAAR جزءا لا يتجزأ من جهاز التحكم عن بعد، أصدرت دينامية المشهد. سوف تلاحظ يؤدي حتما إلى فقدان وقت الأداء. لحسن الحظ، الروبوت يوفر تحويل API الرسمي، ويمكن استخدامها لتحويل .dex قبل تشغيل ملفات فئة. الطبقة. وهكذا مع ASM (إذا كان هذا رمز بايت جيل القيادة javap الكثير من المتاعب، ويمكن استخدام المكونات فكرة IntelliJ "بايت كود مخطط"، وفقا لفئات جافا قد تكون مريحة لتوليد رمز بايت) أو يمكن تعديل رمز بايت javassist حيوي لتوليد حيوي HashMap دون فقدان الأداء. وبهذه الطريقة وراء الكواليس صدر مع الطريقة، يمكنك الحفاظ على المرونة.

وحددت الخطوات التالية:

  • buildSrc مشروع جديد أو مشروع مستقل.
  • وصول تحويل الاعتماد: تنفيذ "com.android.tools.build:gradle:3.2.1، ومن الجدير بالذكر أن الحزمة التي تحتوي على مكتبة ASM.
  • تنفيذ فئة جديدة تحويل الطبقة، يتم تعيين مجموعة المسح إلى: TransformManager.SCOPEFULLPROJECT، اجتياز الدليل والمدخلات في المدخلات وجرة tranform (TransformInvocation transformInvocation)، عملية ClassVisitor باستخدام رمز بايت؛
  • آخر مسجل في العادة المساعد في تحويل العرف.
  • تفاصيل تنفيذية محددة يمكن الرجوع إلى الوثائق الرسمية.

    3. مكون إدارة دورة حياة

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

    4. التبعية وحزمة رئيسية إدارة

    المزيد والمزيد من الانقسام من وحدة وAAR، ضرورة أن تتكرر في كل مرة التكوين يعتمد ومشاريع المعايير الأساسية. منذ الاعتماد بين كل طبقة (طبقة الرئيسية الوحدة، والأعمال التجارية طبقة المكونات، طبقة وظيفية التجمع، وقاعدة الطبقات المكونة) متشابهة، وبالتالي استخراج gradle_component واحد، لتكوين Gradle المشترك على وجه التحديد، يمكن أن تكون موحدة بحيث تعتمد، على سبيل المثال:

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

    تطبيق البرنامج المساعد: "com.android.application '// حدة رئيسية تطبيق البرنامج المساعد: "com.android.library '// وحدة

    ويمكننا أن تخصيص المعلمات "isMainAPP" ومحليا وحدة وحدة للسيطرة على مفتاح رئيسي.

    إذا (isMainAPP) {// التبديل تطبيق البرنامج المساعد: "com.android.application '// حدة رئيسية } {شيء آخر تطبيق البرنامج المساعد: "com.android.library '// وحدة }

    5. متعدد عملية الاتصالات

    إدارة العملية هي أصغر وحدة لتخصيص الموارد، وكم عنصر العمل عند حد معين، وسوف تحتاج إلى النظر في استخدام الاتصالات عملية متعددة. إذا كنت ببساطة قفزة لا تنطوي على الحصول على البيانات، ثم عنصر التوجيه غير قادر، لأن آلية نوايا المدمج في الروبوت كانت دائما عبر عملية. إذا كنت بحاجة لمزامنة البيانات، تحتاج إلى النظر في عملية نقل البيانات القذرة التي تحدث، مثل sharepreferences عملية في وقت واحد هو صعب، لأن sharepreferences كل قطعة من البيانات في ملفات والذاكرة، وأحيانا يست هي نفسها. نظام أندرويد يوفر آلية التواصل الموثق القائم على mmap، وتنفيذ المشروع هو تنفيذ التعليمات البرمجية AIDL، وتوليد بعيد الطبقة بيندر وكيل وفئة من العملية الحالية، وتحديد الخدمة وBinderPool ذات الصلة. ومع ذلك، فإن مثل هذا الوزن قليلا، والنظر في استخدام التقليدية ContentProvider + سكليتي (ContentProvider AIDL آلية التواصل في حد ذاته، ولكن نظامها التغليف طبقة)، وزيادة الدعم لاعتراض الاتصالات عملية متعددة في مكتبة ارتباط التوجيه.

    الحلول القائمة

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

    وأخيرا، والهندسة المعمارية والمعلومات ذات الصلة

    إطار تصميم التجمع بابوا نيو غينيا

    الروبوت التكنولوجيا المتقدمة لمحة عامة

    وضع تتلقى:

    ووتش إلكتروني + الخاص الرد، "أندروز البيانات" الوصول الحر!

    الروبوت للحصول على الحصول على بنية متطورة المعلومات، وشفرة المصدر والملاحظات والفيديو. UI كبار، وتحسين الأداء، ودورات مهندس معماري، NDK والتنمية الهجينة (ReactNative + Weex) الصغيرة إلكتروني صغير، ممارسة الرفرفة الروبوت المتقدم جميع جوانب التكنولوجيا.

    قه السبب الحقيقي ليس أن يطير، وقال الحقيقة في الفيلم مؤتمر "الطفل جزء"

    "الحب الشقق" تراجع قياسي شباك التذاكر، وتعكس على ما يمكن أن نتعلمه من؟

    وحدة التحكم اللعب: بخاخ TAIPAN أحمر بدعة MB

    الروبوت - الأداء الأمثل حصة

    قبل عام وتعادل الآن والمارة إطار غونغ لي فان بينغ بينغ تشاو يينغ لها لماذا بحق الجحيم مع كبار الممثلة تتجه عشرة

    تشارك هوانغ شياو مينغ ملياري حالة الأسهم والتلاعب، وهناك ما يقرب من 50 شركة تحت اسم

    تلعب وحدة التحكم: سوبر الشيطان الجناح GUNDAM

    تسعى إلى المزاج منغنيو الألبان الصين لبناء من الطراز العالمي نوعية الصلبة القياسية

    WRC 2016 | ستانفورد أستاذ أسامة الخطيب: غواصة "الصورة الرمزية" كيفية إنقاذ حطام في إناء العتيقة منذ 350 عاما

    تلعب وضع التحكم: ما يصل إلى مواجهة يتل وايت التنين الملك الغربية تشو شيانغ يو

    كيفية جعل مهرج؟ كما نشأت دورا فيلم "مهرج" على استعداد لإعطاء إجابة

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