یکی از اصولی که بسیاری از ابزارها و کتابخانه های مشهور در جاوا آن را رعایت می کنند Package by Feature است که در برابر روش Package By Layer قرار دارد.
در روش Package by Feature از package ها بعنوان ابزاری برای بیان قابلیت های نرم افزار استفاده می شود و در هر package فقط کلاس های مرتبط با یک قابلیت خاص قرار داده می شود، برای مثال در یک برنامه مدیریت داروخانه ممکن است package بندی بصورت زیر باشد:
-
com.app.doctor
-
com.app.drug
-
com.app.presription
و در هر کدام از این package ها کلاس ها و فایل های مرتبط با آن package در لایه های مختلف نرم افزار جمع شده اند (کلاس های UI, Controller و ...). مهمترین مزیت این روش ماژولاریتی بالا و وابستگی کم بین package است.
در روش Package By Layer، از لایه بندی برنامه برای دسته بندی کلاس ها استفاده می شود، برای مثال در برنامه مدیریت داروخانه packaging می تواند بصورت زیر باشد:
-
com.app.action
-
com.app.model
-
com.app.dao
که در این روش کلاس ها مختلف یک قابلیت در package های مختلف پراکنده می شوند و در نهایت ماژولاریتی پایین می آید و وابستگی بین package زیاد است.
از مزایای روش Package by Feature نسبت به Package By Layer می توان به موارد زیر اشاره کرد:
-
Modularity بالاتر
-
Navigation آسانتر بین کدها
-
مدیریت راحتتر کلاس ها و قابلیت ها در زمان بزرگ شدن پروژه
-
و ...