سؤال

أقوم حاليًا بتنفيذ تطبيق Monotouch الذي سيتم نقله في النهاية إلى Monodroid. التطبيق هو مجرد عميل لخدمة ويب Odata. لا شيء يتوهم للغاية أو الأداء الحرجة.

التحدي هو إعادة استخدام أكبر قدر ممكن من الكود. أدرك أن واجهة برمجة تطبيقات واجهة برمجة التطبيقات الخاصة بـ Monotouch و Monodroid مختلفة تمامًا ، لكنني آمل أن أعيد استخدام طبقات البيانات وطبقات الأعمال.

نظرًا لأن طبقة واجهة المستخدم الخاصة بي تتبع نمط MVP ، آمل أيضًا إعادة استخدام وحدات التحكم في واجهة المستخدم عن طريق ترميز تمثيل مجردة لكل عرض. ومع ذلك ، لا يمكنني إلا أن أخمن ما إذا كان هذا سيعمل لأنه لم يُسمح لي بعد بتجريبي monodroid.

الآن أسئلتي:

  • ما رأيكم في هذا النهج؟ هل هذه فكرة جيدة ، أم أنها ستؤدي فقط إلى تطبيق متواضع بسبب الاختلافات في مفهوم واجهة المستخدم بين iPhone و Android؟

  • هل يمكنك تقديم أي تلميحات حول كيفية تنظيم التطبيق لزيادة إعادة استخدام التعليمات البرمجية؟

شكرًا،

أدريان

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

المحلول

ما رأيكم في هذا النهج؟ هل هذه فكرة جيدة ، أم أنها ستؤدي فقط إلى تطبيق متواضع بسبب الاختلافات في مفهوم واجهة المستخدم بين iPhone و Android؟

أود أن أقول هذا الأخير ، ولكن يمكنك بالتأكيد إعادة استخدام جزء كبير من كائنات عملك والمجال. يتم استخدام نفس Mono SQLite في monodroid ، وبالتالي فإن جزء استمرار البيانات في تطبيقك (إذا كان يستخدم ذلك) يمكن إعادة استخدامه.

لن أزعج نفسي بإنشاء واجهة مستخدم طبقة متوسطة - وهما مختلفان تمامًا. على سبيل المثال على تطبيقات Android ، لديك القائمة السفلية ، والتي يمكن أن تحتوي على 6 أزرار على الشاشة. على iPhone ، من المحتمل ألا يكون لديك 6 أزرار في شريط علامات تبويب أو شريط أدوات. لجعل نمط شائع لذلك لن يساعدك كثيرًا.

مثال آخر هو ListViews (UitableViews). إنهم مختلفون تمامًا. كما تتوقع أن يكون تطبيق monodroid مخلصًا لأخته القبيحة Java. على Android ، لا يتعين عليك استخدام التشابك الضخم من عدم التوجيه الذي تقوم به Apple عليك ، ولكن مجرد arrayadapter بسيطة كمصدر للبيانات - تم تصنيفها للتخطيطات الأكثر تعقيدًا.

شيء مهم آخر يجب ملاحظته Android ليس لديه حجم شاشة واحدة. تقوم بإنشاء صور ل 3 كثافات شاشة مختلفة. أحجام الخطوط ليست مطلقة.

يوفر لك Android آليات تخطيط مماثلة لـ XAML والويب ، على iPhone ، أنت لست محظوظًا جدًا (أو أكثر حظًا ، اعتمادًا على كيفية مشاهدته) لأن كل شيء يتم وضعه بشكل عام (يمكنهم فعل ذلك دائمًا 320 × 480).

هل يمكنك تقديم أي تلميحات حول كيفية تنظيم التطبيق لزيادة إعادة استخدام التعليمات البرمجية؟

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

(أنا على معاينة monodroid ولدي أيضًا تطبيقات MT)

نصائح أخرى

يبدو أن لديك مفهومًا قويًا جدًا هناك. في الواقع ، هناك مشروع مفتوح المصدر يسمى Monocross (http://code.google.com/p/monocross/) يستخدم نمط MVC للقيام بشيء مماثل.

قام Miguel de Icaza بالترويج لما يبدو وكأنه مشروع MVVM رائع قد يساعدك أيضًا. https://github.com/migueldeicaza/monotouch.mvvm

لقد نجحت في تنفيذ نمط MVC لطبقة العرض التقديمي ، ونموذج المجال ، وطبقة الخدمات ، والمستودع ، والشائع ، كلها غير منصة. عندما أحتاج إلى الحصول على رمز محدد من النظام الأساسي مثل NetworkConnectionManager (اسمي) ، أستخدم #F #ENDIF لالتفاف الكائنات أو حيث أحتاج إلى اختبار الوحدة ، فأنا أستخدم تطبيق وحدة التحكم لجميع اختبارات الوحدة الخاصة بي ، فهذا هو نفسه بالضبط المشروع كمشاريع Project Android و iPhone و Windows Phone باستثناء أنني أترك طبقة واجهة المستخدم التي هي جميع CRUD الخاصة بواجهة المستخدم. أقوم أيضًا بتمييز وحدة التحكم الخاصة بي باستخدام وحدة التحكم ، ومشاريع Android الخاصة بي مع Android تعريف حتى أتمكن من القيام بـ #EF #ENDIF

يجب أن أقول إن الأمر يعمل بشكل رائع ، إذا كان بإمكاني وضع طبقة MVC بالكامل تحت اختبار الوحدة في وحدة التحكم وأن تعمل تحت Android أكثر من أنا إلى حد كبير ، فستنجح تحت iPhone و Windows Phone لأن وحدة التحكم لا تحتوي حتى على واجهه المستخدم. إنها الطريقة المثالية لاختبار عام طبقة العرض التقديمي. على الرغم من أن هذا النهج الذي أتبعه قد يكون مبالغة ، أخطط لدعم هذا التطبيق لفترة طويلة ، وأخطط أيضًا لتنقله إلى أجهزة Android و iPad و Windows 8 ، لذا من الضروري أن تأخذ الوقت الإضافي للحصول على هذا بشكل صحيح .

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

كما ذكرنا سابقًا ، فإن Android لديه الكثير من الإضافات والخروج ، على سبيل المثال ، المشكلة الأكبر التي واجهتها مع Android هي العمليات متعددة الخيوط أو غير متزامنة وتناوب النشاط ، مما سيؤدي إلى قسّن نشاطك وإعادة إنشائها وبالتالي طمس وجهة نظرك جنبا إلى جنب معها. لقد اخترت المسار لإدارة جميع تكوين الدوران بمفردي مما يعني أنه يجب علي تنظيف جميع القتائم ، والموارد التي يستخدمها النشاط يدويًا.

حاولت القيام بشيء مماثل - في حالتي لأنني أردت استخدام VS وجميع أدوات تطوير Windows الخاصة بي بأكبر قدر ممكن من التعليمات البرمجية.

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

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

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

قد يتأخر بعض الشيء ، لكن هذا تنمية متنقلة عبر المنصات الفيديو مفيد للغاية. أنا أيضًا أكتب تطبيق MT الذي سيتم نقله إلى Android و WP. لتخزين البيانات أنا أفكر بجدية Vici Coolstorage الذي من المفترض أن يصنع نموذج البيانات إعادة استخدام تماما. بالإضافة إلى ذلك ، أقوم بنقل أي رمز من النظام الأساسي إلى المرافق والمشاريع الشائعة داخل الحل. آمل أيضًا أن أكون قادرًا على إعادة استخدام رمز اتصال خدمة الويب في MD و WP. الباقي هو iOS محدد في الوقت الحالي.

سيكون من المثير للاهتمام معرفة كيف يسير مشروعك. هل إعادة استخدام الكود تؤتي ثمارها حقًا؟

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