Vâng, có những hạn chế
Mã dễ đọc là tốt, nhưng cũng hãy cẩn thận với những gì mã được truyền đạt . Khi các phương thức của đối tượng luôn trả về đối tượng, nó sẽ truyền đạt một vài điều:
- Tôi yêu cầu cấu hình nâng cao không nhất thiết phải rõ ràng theo thứ tự nên được đặt hoặc định cấu hình
- Mỗi cuộc gọi phương thức tiếp theo được xây dựng trên lần cuối cùng
Trường hợp sử dụng hợp lệ: Truy vấn cơ sở dữ liệu Ad Hoc
Các thư viện lớp tồn tại trong hầu hết mọi ngôn ngữ cho phép bạn truy vấn cơ sở dữ liệu mà không cần dùng đến SQL được mã hóa cứng. Lấy khung thực thể cho .NET làm ví dụ:
DBContext db = new DBContext();
List<Post> posts = db.Posts
.Where(post => post.Title.Contains("Test"))
.OrderBy(post => post.DateCreated)
.ToList();
Đây là một giao diện trôi chảy trong đó mỗi cuộc gọi phương thức tiếp theo sẽ được xây dựng trên giao diện trước đó. Đọc các cuộc gọi này một cách hợp lý trong bối cảnh truy vấn cơ sở dữ liệu.
Trường hợp sử dụng không hợp lệ: Đường tổng hợp để đặt thuộc tính
Bây giờ chúng ta hãy sử dụng cùng một mẫu với Post
lớp:
public class Post
{
public string Title { get; set; }
public DateTime DateCreated { get; set; }
public string Body { get; set; }
public Post SetTitle(string title)
{
Title = title;
return this;
}
public Post SetDateCreated(DateTime created)
{
DateCreated = created;
return this;
}
public Post SetBody(string body)
{
Body = body;
return this;
}
}
Bây giờ hãy xem cách bạn sẽ sử dụng lớp này:
Post post = new Post()
.SetTitle("Test")
.SetDateCreated(DateTime.Now)
.SetBody("Just a test");
Khi tôi thấy mã này, tôi ngay lập tức hỏi câu hỏi này: "Sau khi gọi SetBody
, nó có truy vấn cơ sở dữ liệu không? Tôi có cần gọi một phương thức khác để nói 'Tôi đã xong chưa?'"
Các cuộc gọi phương thức chuỗi liên lạc với mã bằng cách sử dụng Post
lớp là gì?
- Tôi có một thiết lập phức tạp
- Mỗi cuộc gọi phương thức được xây dựng trên cuộc gọi trước
Điều này có thực sự đúng không? Không. Post
Lớp học không có thiết lập phức tạp. Đặt tiêu đề, ngày tạo và cơ thể không xây dựng cho nhau hướng tới mục tiêu cuối cùng phức tạp hơn. Bạn đã nghiền một cái chốt vuông thành một cái lỗ tròn.
Hạn chế của chuỗi phương thức tự tham chiếu là bạn giao tiếp rằng nhiều cuộc gọi phương thức được yêu cầu để thực hiện điều gì đó và mỗi cuộc gọi sẽ tạo ra lần cuối. Nếu điều này không đúng, thì chuỗi phương thức có thể truyền thông sai cho các lập trình viên khác.
Khi đồng nghiệp của bạn nói:
Giao diện thông thạo không nên được thực hiện chỉ để thuận tiện, nhưng cho ngữ nghĩa
Họ đã hoàn toàn chính xác. Một giao diện trôi chảy, hoặc chuỗi phương thức, truyền đạt một cái gì đó trong và chính nó có thể không đúng.