Careeroza
Project Structure
Standard Maven/Gradle Layout
shop-app/
├── pom.xml
└── src/
├── main/java/com/careeroza/shop/
│ ├── ShopApplication.java
│ ├── model/ Product.java, Order.java
│ ├── service/ OrderService.java
│ ├── repository/ OrderRepository.java
│ └── util/ PriceUtils.java
└── test/java/com/careeroza/shop/
└── service/ OrderServiceTest.javaTwo common ways to organise packages:
| Style | Packages | Good for |
|---|---|---|
| By layer | controller, service, repository, model | small apps, tutorials |
| By feature | order, product, payment, user | larger apps; related code stays together |
Package-private for Hiding
package com.careeroza.shop.payment;
public class PaymentService { // public API of the package
private final SignatureHelper helper = new SignatureHelper();
public boolean verify(String payload, String signature) {
return helper.sign(payload).equals(signature);
}
}
class SignatureHelper { // package-private: invisible outside com.careeroza.shop.payment
String sign(String payload) {
return Integer.toHexString(payload.hashCode());
}
}Tip: Classes without public are an easy way to keep implementation details inside a package.