Loading...
Loading...
Compare original and translation side by side
UserPersistenceServiceEmailNotificationServiceclass UserService {
void saveUser(User user) { /* DB */ }
void sendEmail(User user) { /* SMTP */ }
void validateUser(User user) { /* rules */ }
}class UserRepository {
void saveUser(User user) { /* DB only */ }
}
class EmailService {
void sendEmail(User user) { /* SMTP only */ }
}
class UserValidator {
boolean isValid(User user) { /* validation only */ }
}UserPersistenceServiceEmailNotificationServiceclass UserService {
void saveUser(User user) { /* DB */ }
void sendEmail(User user) { /* SMTP */ }
void validateUser(User user) { /* rules */ }
}class UserRepository {
void saveUser(User user) { /* DB only */ }
}
class EmailService {
void sendEmail(User user) { /* SMTP only */ }
}
class UserValidator {
boolean isValid(User user) { /* validation only */ }
}if (type == "X")switchclass ReportExporter {
void export(String type, Data data) {
if (type.equals("PDF")) { /* PDF */ }
else if (type.equals("DOC")) { /* DOC */ }
else if (type.equals("CSV")) { /* CSV */ }
}
}interface ReportGenerator {
void generate(Data data);
}
class PdfReportGenerator implements ReportGenerator {
@Override public void generate(Data data) { /* PDF */ }
}
class CsvReportGenerator implements ReportGenerator {
@Override public void generate(Data data) { /* CSV */ }
}if (type == "X")switchclass ReportExporter {
void export(String type, Data data) {
if (type.equals("PDF")) { /* PDF */ }
else if (type.equals("DOC")) { /* DOC */ }
else if (type.equals("CSV")) { /* CSV */ }
}
}interface ReportGenerator {
void generate(Data data);
}
class PdfReportGenerator implements ReportGenerator {
@Override public void generate(Data data) { /* PDF */ }
}
class CsvReportGenerator implements ReportGenerator {
@Override public void generate(Data data) { /* CSV */ }
}FlyingBirdBirdclass Bird {
void fly() { /* assume all birds fly */ }
}
class Penguin extends Bird {
@Override void fly() { throw new UnsupportedOperationException("Penguins can't fly"); }
}interface Bird { }
interface FlyingBird extends Bird {
void fly();
}
class Sparrow implements FlyingBird {
@Override public void fly() { /* fly */ }
}
class Penguin implements Bird { /* no fly() */ }FlyingBirdBirdclass Bird {
void fly() { /* assume all birds fly */ }
}
class Penguin extends Bird {
@Override void fly() { throw new UnsupportedOperationException("Penguins can't fly"); }
}interface Bird { }
interface FlyingBird extends Bird {
void fly();
}
class Sparrow implements FlyingBird {
@Override public void fly() { /* fly */ }
}
class Penguin implements Bird { /* no fly() */ }WorkableEatableeat()interface Worker {
void work();
void eat();
}
class Human implements Worker {
public void work() { /* work */ }
public void eat() { /* eat */ }
}
class Robot implements Worker {
public void work() { /* work */ }
public void eat() { } // no-op or throw — forced dependency
}interface Workable {
void work();
}
interface Eatable {
void eat();
}
class Human implements Workable, Eatable {
public void work() { /* work */ }
public void eat() { /* eat */ }
}
class Robot implements Workable {
public void work() { /* work */ }
}WorkableEatableeat()interface Worker {
void work();
void eat();
}
class Human implements Worker {
public void work() { /* work */ }
public void eat() { /* eat */ }
}
class Robot implements Worker {
public void work() { /* work */ }
public void eat() { } // no-op or throw — forced dependency
}interface Workable {
void work();
}
interface Eatable {
void eat();
}
class Human implements Workable, Eatable {
public void work() { /* work */ }
public void eat() { /* eat */ }
}
class Robot implements Workable {
public void work() { /* work */ }
}new ConcreteService()class OrderService {
private PaymentService payment = new PaymentService(); // tight coupling
void placeOrder(Order order) {
payment.charge(order.getTotal());
}
}interface PaymentProcessor {
void charge(BigDecimal amount);
}
class OrderService {
private final PaymentProcessor payment;
OrderService(PaymentProcessor payment) {
this.payment = payment;
}
void placeOrder(Order order) {
payment.charge(order.getTotal());
}
}new ConcreteService()class OrderService {
private PaymentService payment = new PaymentService(); // tight coupling
void placeOrder(Order order) {
payment.charge(order.getTotal());
}
}interface PaymentProcessor {
void charge(BigDecimal amount);
}
class OrderService {
private final PaymentProcessor payment;
OrderService(PaymentProcessor payment) {
this.payment = payment;
}
void placeOrder(Order order) {
payment.charge(order.getTotal());
}
}if (user.getAge() > 18) { /* allow */ }
// ...
if (employee.getAge() > 18) { /* allow */ }boolean isAdult(int age) {
return age > 18;
}
// use: if (isAdult(user.getAge())) { ... }if (user.getAge() > 18) { /* allow */ }
// ...
if (employee.getAge() > 18) { /* allow */ }boolean isAdult(int age) {
return age > 18;
}
// 使用:if (isAdult(user.getAge())) { ... }Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.orElse("Unknown");String city = (user != null && user.getAddress() != null)
? user.getAddress().getCity()
: "Unknown";Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.orElse("Unknown");String city = (user != null && user.getAddress() != null)
? user.getAddress().getCity()
: "Unknown";order.getCustomer().getAddress().getZipCode()OrderCustomerAddressa.getB().getC().getD()order.getCustomerZipCode()String zip = order.getCustomer().getAddress().getZipCode();// On Order (or a service that has Order)
String zip = order.getCustomerZipCode();
// implementation: return customer != null && customer.getAddress() != null
// ? customer.getAddress().getZipCode() : null;order.getCustomer().getAddress().getZipCode()OrderCustomerAddressa.getB().getC().getD()order.getCustomerZipCode()String zip = order.getCustomer().getAddress().getZipCode();// 在Order类(或持有Order的服务类)中
String zip = order.getCustomerZipCode();
// 实现:return customer != null && customer.getAddress() != null
// ? customer.getAddress().getZipCode() : null;class Car extends Engine {
void drive() { start(); /* ... */ }
}class Car {
private final Engine engine;
Car(Engine engine) {
this.engine = engine;
}
void drive() {
engine.start();
// ...
}
}class Car extends Engine {
void drive() { start(); /* ... */ }
}class Car {
private final Engine engine;
Car(Engine engine) {
this.engine = engine;
}
void drive() {
engine.start();
// ...
}
}Controller → HTTP, validation, DTO mapping
Service → Business logic, transactions
Repository → Data access, queries// Controller — only HTTP and delegation
@RestController
class UserController {
private final UserService userService;
UserDto createUser(@RequestBody UserDto dto) {
return userService.createUser(dto);
}
}
// Service — business rules only
@Service
class UserService {
private final UserRepository userRepository;
UserDto createUser(UserDto dto) {
if (userRepository.existsByEmail(dto.getEmail()))
throw new ConflictException("Email already exists");
return map(userRepository.save(toEntity(dto)));
}
}
// Repository — data access only
interface UserRepository extends JpaRepository<User, Long> {
boolean existsByEmail(String email);
}Controller → HTTP处理、验证、DTO映射
Service → 业务逻辑、事务管理
Repository → 数据访问、查询// Controller — 仅处理HTTP请求和委托
@RestController
class UserController {
private final UserService userService;
UserDto createUser(@RequestBody UserDto dto) {
return userService.createUser(dto);
}
}
// Service — 仅处理业务规则
@Service
class UserService {
private final UserRepository userRepository;
UserDto createUser(UserDto dto) {
if (userRepository.existsByEmail(dto.getEmail()))
throw new ConflictException("Email already exists");
return map(userRepository.save(toEntity(dto)));
}
}
// Repository — 仅处理数据访问
interface UserRepository extends JpaRepository<User, Long> {
boolean existsByEmail(String email);
}class UserHandler {
public String handle(HttpRequest req) {
User u = new User(req.getParam("name"), Integer.parseInt(req.getParam("age")));
try (Connection c = DriverManager.getConnection("jdbc:...")) {
c.createStatement().executeUpdate("INSERT INTO users ...");
}
return "<html><body>Added " + u.getName() + "</body></html>";
}
}class UserController {
private final UserService userService;
ResponseEntity<String> createUser(@RequestBody UserDto dto) {
return ResponseEntity.ok(userService.createUser(dto).getId());
}
}
class UserService {
private final UserRepository userRepository;
User createUser(UserDto dto) {
return userRepository.save(User.from(dto));
}
}
interface UserRepository {
User save(User user);
}class UserHandler {
public String handle(HttpRequest req) {
User u = new User(req.getParam("name"), Integer.parseInt(req.getParam("age")));
try (Connection c = DriverManager.getConnection("jdbc:...")) {
c.createStatement().executeUpdate("INSERT INTO users ...");
}
return "<html><body>Added " + u.getName() + "</body></html>";
}
}class UserController {
private final UserService userService;
ResponseEntity<String> createUser(@RequestBody UserDto dto) {
return ResponseEntity.ok(userService.createUser(dto).getId());
}
}
class UserService {
private final UserRepository userRepository;
User createUser(UserDto dto) {
return userRepository.save(User.from(dto));
}
}
interface UserRepository {
User save(User user);
}requireNonNullpublic User createUser(String name, int age) {
Objects.requireNonNull(name, "name must not be null");
if (age < 0 || age > 150)
throw new IllegalArgumentException("Invalid age: " + age);
return new User(name, age);
}requireNonNullpublic User createUser(String name, int age) {
Objects.requireNonNull(name, "name must not be null");
if (age < 0 || age > 150)
throw new IllegalArgumentException("Invalid age: " + age);
return new User(name, age);
}public record User(String name, int age) {
// Compact constructor for validation
public User {
Objects.requireNonNull(name);
if (age < 0) throw new IllegalArgumentException("age must be non-negative");
}
}public final class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = Objects.requireNonNull(name);
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
// No setters
}public record User(String name, int age) {
// 紧凑构造函数用于验证
public User {
Objects.requireNonNull(name);
if (age < 0) throw new IllegalArgumentException("age must be non-negative");
}
}public final class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = Objects.requireNonNull(name);
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
// 无setter
}undefinedundefined
- If there are no critical issues or suggestions or good points, just omit that section.
- If the issue number is more than 10, summarize as "Found 10+ critical issues/suggestions" and only output the first 10 items.
- 若无严重问题、改进建议或优点,可省略对应章节。
- 若问题数量超过10个,总结为“发现10+个严重问题/改进建议”,并仅输出前10个。undefinedundefined
---
---