DSL về cơ bản là tạo ngôn ngữ phụ nhỏ của riêng bạn để giải quyết vấn đề miền cụ thể. Điều này được giải quyết bằng cách sử dụng phương pháp chuỗi. Ngôn ngữ mà dấu chấm và dấu ngoặc đơn là tùy chọn giúp làm cho các biểu thức này có vẻ tự nhiên hơn. Nó cũng có thể tương tự như một mẫu xây dựng. DSL không phải là ngôn ngữ, mà là một mẫu mà bạn áp dụng cho API của mình để làm cho các cuộc gọi trở nên tự giải thích hơn.
Một ví dụ là Guice, Guice Users Guide http://docs.google.com/View?docid=dd2fhx4z_5df5hw8 có một số mô tả sâu hơn về cách giao diện bị ràng buộc để triển khai và trong ngữ cảnh nào.
Một ví dụ phổ biến khác là dành cho ngôn ngữ truy vấn. Ví dụ:
NewsDAO.writtenBy("someUser").before("someDate").updateStatus("Deleted")
Trong quá trình triển khai, hãy tưởng tượng mỗi phương thức trả về đối tượng Truy vấn mới hoặc chỉ cập nhật nội dung này trong nội bộ. Tại bất kỳ thời điểm nào, bạn có thể chấm dứt chuỗi bằng cách sử dụng các hàng ví dụ() để nhận tất cả các hàng hoặc updateSomeField như tôi đã làm ở trên đây. Cả hai sẽ trả về một đối tượng kết quả.
Tôi cũng khuyên bạn nên xem ví dụ Guice ở trên, vì mỗi cuộc gọi đều trả về một loại mới với các tùy chọn mới trên chúng. Một IDE tốt sẽ cho phép bạn hoàn thành, làm cho nó rõ ràng tùy chọn mà bạn có tại mỗi điểm.
Chỉnh sửa: dường như nhiều người coi DSL là ngôn ngữ mới, đơn giản, có mục đích đơn lẻ với trình phân tích cú pháp của riêng họ. Tôi luôn luôn kết hợp DSL như sử dụng phương pháp chuỗi như một quy ước để thể hiện hoạt động.
Nhưng bạn có thực sự có những người không kỹ thuật làm điều đó không? – BobbyShaftoe
có lẽ tốt hơn để mô tả chúng theo cách khác nhau-kỹ thuật; họ là những người chiến thắng cá nhân, chứ không phải lập trình viên java. –
hy vọng bạn biết rằng DSL của bạn là python. –