سؤال

لقد كنت أفكر في "الممارسات الجيدة" فيما يتعلق ببنية الحزمة ضمن حزم osgi.حاليًا، في المتوسط، لدينا ما بين 8 إلى 12 فصلًا في كل حزمة.كانت إحدى مبادرتي/اقتراحي هي الحصول على حزمتين؛com.company_name.osgi.services.api (للفئات/الواجهات ذات الصلة بواجهة برمجة التطبيقات (والتي يتم تصديرها خارجيًا) وحزمة واحدة com.company_name.osgi.services.impl للتنفيذ (غير مُصدَّرة)).ما هي إيجابيات وسلبيات هذا؟أي اقتراحات أخرى؟

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

المحلول

قد تفكر أيضًا في وضع الواجهات com.company_name.subsystem, ، والتنفيذ في com.company_name.subsystem.impl, ، يمكن أن يكون رمز OSGI المحدد، إن وجد، موجودًا com.company_name.subsystem.osgi.في وقت ما قد يكون لديك تنفيذ متعدد لنفس الواجهات.في هذه الحالة يمكنك أن تنظر - com.company_name.subsystem.impl1 و com.company_name.subsystem.impl2, ، على سبيل المثال:

com.company.scm        // the scm api
com.company.scm.git    // its git implementaton
com.company.scm.svn    // its subversion implementation
com.company.scm.osgi   // the place to put an OSGI Activator

وبهذا المعنى، يمكن أن تكون بنية الحزمة غير متوافقة مع OSGi، إذا انتقلت لاحقًا إلى حاوية مختلفة، فما عليك سوى وضع إضافة إضافية

com.company.scm.sca     // or whatever component model you might think of

دائما api و impl في اسم الحزمة الخاصة بك قد يكون مزعجا.إذا كنت في شك استخدم impl لكن لا api.

نصائح أخرى

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

ما يهم هو أن تقوم بفصل واجهة برمجة التطبيقات (API) والتنفيذ.تحتوي إحدى الحزمة على واجهة برمجة التطبيقات (API) الخاصة بمفهومك والأخرى على التنفيذ.بهذه الطريقة يمكنك توفير تطبيقات مختلفة لواجهة برمجة التطبيقات (API) المحددة جيدًا.في بعض الحالات قد يكون ذلك ضروريًا إذا كنت تريد الوصول إلى الخدمات من حزمة عن بعد (باستخدام، على سبيل المثال.آر-أو جي إس آي)

يتم بعد ذلك استخدام حزم واجهة برمجة التطبيقات (API) من خلال مشاركة التعليمات البرمجية والخدمات من حزم التنفيذ من خلال مشاركة الخدمة.أفضل طريقة لاستكشاف هذه الاحتمالات هي إلقاء نظرة على ServiceTrackers.

في حالتك، يمكن أن يكون لديك التطبيق في نفس الحزمة، ولكن جميع فئاتها "محمية".بهذه الطريقة، يمكنك تصدير الحزمة ولن يكون التنفيذ مرئيًا للخارج، حتى عند عدم استخدام OSGi (ولكن كملف jar عادي).

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