次の例を考えてみましょう。
3つの層を持つサーバーアプリケーションがあります。クライアントに公開されるサービスレイヤー、永続性に使用されるデータベースレイヤー、および何かを計算するビジネスレイヤー。
このアプリケーションは、3つの異なるタイプのデータを提供します。ユーザー、支払いおよび作業時間。
アプリケーションをどのようにパッケージ化する必要がありますか?レイヤー ごとのパッケージ:
foo.bar.service
UserService.class
PaymentsService.class
WorktimeService.class
foo.bar.persistence
UserPersistenceService.class
PaymentPersistenceService.class
WorktimePersistenceService.class
foo.bar.business
PaymentCalculator.class
またはタイプ別パッケージ:
foo.bar.user
UserService.class
UserPersistenceService.class
foo.bar.payment
PaymentService.class
PaymentsPersistenceService.class
PaymentCalculator.class
foo.bar.worktime
WorktimeService.class
WorktimePersistenceService.class
アプリケーションが大きくなり、より多くのロジックが実装されると、最初の例は混乱する可能性があると思います。ただし、タスクが「永続的なサービスレイヤーを拡張して何か凝ったことをする」ことである場合は、適切な場所を見つける方が簡単なようです。2番目の例は、何百万ものクラスでパッケージをフラッディングすることなく、より簡単に拡張できます。
それらから選択するためのベストプラクティスはありますか?それとも、パッケージ構造について他に何か考えがありますか。