- vừa được xem lúc

Fine-grain refactoring deep dive (3) - Self-Encapsulation field.

0 0 34

Người đăng: logbasex

Theo Viblo Asia

1. Issue

Cho đoạn code sau:

public class Charge { private int units; private double rate; public Charge(int units, double rate) { this.units = units; this.rate = rate; } public int getUnits() { return units; } public void setUnits(int units) { this.units = units; } public double getRate() { return rate; } public void setRate(double rate) { this.rate = rate; } public Money getAmount() { return Money.usd(units * rate); }
}

Bạn có thể thấy, tất cả các fields đều được đánh dấu là private modifier với getter/setter đấy đủ, tuy nhiên ở phần dưới method getAmount() đã phá vỡ nguyên tắc Encapsulation trong lập trình hướng đối tượng bằng việc truy cập trực tiếp vào các fields. Hơn nữa việc hard-code như thế này làm cho method thiếu đi sự linh hoạt cần thiết trong trường hợp chúng ta muốn override method getAmount(), lazy initialization hay validation.

2. Solution

Mình sẽ thay đổi đoạn code trên một chút ở method getAmount():

public Money getAmount() { return Money.usd(this.getUnits() * this.getRate());
}

Mọi thứ đã trở nên dễ dàng hơn ngay cả với việc mở rộng class:

static class CustomCharge extends Charge { public CustomCharge(int units, double rate) { super(units, rate); } @Override public int getUnits() { return super.getUnits() * 2; }
}

3. Final Thought

Không phải bao giờ việc self-encapsulation field cũng cần thiết ngoài trừ phần lớn những trường hợp sau:

  • Inheritance
  • Lazy initialization
  • Validation

Cảm ơn mọi người đã đọc bài. Happy Coding! 😆😆

References:

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tổng hợp các bài hướng dẫn về Design Pattern - 23 mẫu cơ bản của GoF

Link bài viết gốc: https://gpcoder.com/4164-gioi-thieu-design-patterns/. Design Patterns là gì. Design Patterns không phải là ngôn ngữ cụ thể nào cả.

0 0 302

- vừa được xem lúc

Học Spring Boot bắt đầu từ đâu?

1. Giới thiệu Spring Boot. 1.1.

0 0 278

- vừa được xem lúc

Cần chuẩn bị gì để bắt đầu học Java

Cần chuẩn bị những gì để bắt đầu lập trình Java. 1.1. Cài JDK hay JRE.

0 0 51

- vừa được xem lúc

Sử dụng ModelMapper trong Spring Boot

Bài hôm nay sẽ là cách sử dụng thư viện ModelMapper để mapping qua lại giữa các object trong Spring nhé. Trang chủ của ModelMapper đây http://modelmapper.org/, đọc rất dễ hiểu dành cho các bạn muốn tìm hiểu sâu hơn. 1.

0 0 194

- vừa được xem lúc

[Java] 1 vài tip nhỏ khi sử dụng String hoặc Collection part 1

. Hello các bạn, hôm nay mình sẽ chia sẻ về mẹo check String null hay full space một cách tiện lợi. Mình sẽ sử dụng thư viện Lớp StringUtils download file jar để import vào thư viện tại (link).

0 0 71

- vừa được xem lúc

Deep Learning với Java - Tại sao không?

Muốn tìm hiểu về Machine Learning / Deep Learning nhưng với background là Java thì sẽ như thế nào và bắt đầu từ đâu? Để tìm được câu trả lời, hãy đọc bài viết này - có thể kỹ năng Java vốn có sẽ giúp bạn có những chuyến phiêu lưu thú vị. DJL là tên viết tắt của Deep Java Library - một thư viện mã ng

0 0 139