2008-10-15 14 views
6

Thuật ngữ cho thiết kế này là gì?Thuật ngữ cho thiết kế ala "object.method1(). Method2(). Method3()" là gì?

object.method1().method2().method3() 

..khi tất cả các phương thức đều trả về * điều này?

Tôi đã tìm thấy thuật ngữ này trong một thời gian trước đây, nhưng mất nó trong khi đó. Tôi không biết làm cách nào để tìm kiếm điều này trên google :) Ngoài ra nếu có ai đó có thể nghĩ ra một tiêu đề tốt hơn cho câu hỏi, vui lòng thay đổi nó.

Cảm ơn

Update-Gishu: Sau khi đọc về nó, tôi cảm thấy rằng câu hỏi của bạn là gây hiểu nhầm w.r.t. đoạn mã được cung cấp .. (Hãy để rollback)

Phương pháp Chaining

object.method1().method2().method3() 

giao diện thông thạo

private void makeFluent(Customer customer) { 
     customer.newOrder() 
       .with(6, "TAL") 
       .with(5, "HPK").skippable() 
       .with(3, "LGV") 
       .priorityRush(); 
    } 
+1

Gishu, thay vì trả lời nội tuyến như thế này, bạn nên để lại nhận xét hoặc thêm một câu trả lời khác. http://stackoverflow.com/questions/14593/what-is-the-etiquette-for-modifying-posts#14608 –

Trả lời

10

Trông với tôi như bạn đang mô tả một giao diện thông thạo. Ive cũng nghe nói nó được gọi là đường ống hoặc chuỗi.

Update-Gishu: http://martinfowler.com/bliki/FluentInterface.html

+0

"Giao diện thông thạo" sai ...đó là một cách tiếp cận cụ thể để mô tả ngắn gọn, dễ đọc, các cuộc gọi thông qua các lời gọi liên tiếp chống lại giá trị trả về của hàm thành viên trước đó, nhưng mỗi hàm thành viên không cần trả về tham chiếu đến '* this': nó có thể là một lớp khác hoàn toàn. Lập trình lưu loát sử dụng phương pháp chuỗi là một kỹ thuật, nhưng có thể tồn tại mà không có phương pháp khác. –

+0

@TonyD Cho rằng đây là câu trả lời được chấp nhận, có lẽ câu hỏi đã được nói sai và OP thực sự đề cập đến việc lập trình các API được sử dụng nhiều như thế này. Điều này là khá điển hình của các API được gọi là "thông thạo". – jpmc26

+0

@ jpmc26: điều đó là có thể - và giao diện thông thạo đáng được đề cập đến như một trường hợp sử dụng cụ thể của chuỗi phương pháp (cùng với thành ngữ tham số được đặt tên) - nhưng không giúp ích cho khách truy cập trong tương lai yêu cầu. Điều này đặc biệt quan trọng vì các câu hỏi khác đã bị đóng như bản sao của câu hỏi này, vì vậy không chỉ có OP ở đây với sự quan tâm đến việc có câu trả lời đúng. –

10

Nó chuỗi các cuộc gọi phương pháp, đó là lý do tại sao điều này được gọi method chaining

8

Nó thường được gọi là phương pháp chaining. Một ví dụ về ứng dụng của nó là Named Parameter Idiom.

Là một sang một bên, tôi thấy thật thú vị khi tìm kiếm trong Google cho "đối tượng method1 method2" đi kèm với chính xác trang bạn đang tìm kiếm. :)

2

chuỗi là tên phổ biến hơn trong ngành và hầu hết các nhà phát triển ít nhất đã nghe nói về nó, trong khi giao diện thông thạo thì học thuật hơn và nhiều người sẽ không biết bạn đang nói gì.

3

Nó được gọi là Method Chaining. Như một ví dụ, có một thư viện tăng mà cung cấp một cách xâu chuỗi gán vào một container trước khi cú đúp-khởi đến xung quanh (Boost.Assignment):

vector<int> v; 
v += 1,2,3,4,5,6,7,8,9; 

typedef pair< string,string > str_pair; 
deque<str_pair> deq; 
push_front(deq)("foo", "bar")("boo", "far"); 

Thông thường mặc dù, bạn sẽ thấy nó nhiều hơn trong các ngôn ngữ khác để làm những việc như cung cấp a fluent interface:

FluentGlutApp(argc, argv) 
    .withDoubleBuffer().withRGBA().withAlpha().withDepth() 
    .at(200, 200).across(500, 500) 
    .named("My OpenGL/GLUT App") 
    .create(); 

Tôi không thấy điều đó nhiều trong C++, ngoài luồng.

Các vấn đề liên quan