Tôi đang thực hiện việc viết DSL đầu tiên của mình cho một công cụ đơn giản trong công việc. Tôi đang sử dụng mô hình xây dựng để thiết lập đối tượng cha mẹ phức tạp nhưng đang chạy vào các bức tường gạch để xây dựng bộ sưu tập con của đối tượng cha. Dưới đây là một ví dụ:Viết DSL đầu tiên của tôi trong C# và bị treo lên trên func <T> & Hành động
var myMorningCoffee = Coffee.Make.WithCream().WithOuncesToServe(16);
mẫu với đóng cửa (Tôi nghĩ đó là những gì họ đang gọi)::
var myMorningCoffee = Coffee.Make.WithCream().PourIn(
x => {
x.ShotOfExpresso.AtTemperature(100);
x.ShotOfExpresso.AtTemperature(100).OfPremiumType();
}
).WithOuncesToServe(16);
lớp mẫu (không có con PourIn() phương pháp như thế này
Sử dụng
là những gì tôi đang cố gắng tìm ra.)public class Coffee
{
private bool _cream;
public Coffee Make { get new Coffee(); }
public Coffee WithCream()
{
_cream = true;
return this;
}
public Coffee WithOuncesToServe(int ounces)
{
_ounces = ounces;
return this;
}
}
Vì vậy, trong ứng dụng của tôi cho công việc Tôi có xây dựng đối tượng phức tạp tốt, nhưng tôi không thể cho cuộc sống của tôi tìm ra cách để có được mã lambda cho bộ sưu tập phụ trên đối tượng cha mẹ. (trong ví dụ này là các bức ảnh (bộ sưu tập trẻ em) của expresso).
Có lẽ tôi là khái niệm khó hiểu ở đây và tôi không ngại bị đặt thẳng; tuy nhiên, tôi thực sự thích cách đọc này và muốn tìm ra cách để làm việc này.
Cảm ơn, Sam
Tôi phải trung thực; đó thực sự là một sử dụng khủng khiếp của DSL, IMHO. Nó đọc khủng khiếp với tôi. Nhưng với từng người, tôi cho là vậy. –
Vậy vấn đề của bạn là gì? Tất cả các mã này trông độc quyền, vì vậy chúng tôi không thể nào biết được ý nghĩa của nó. Ví dụ, kiểu tham số của IncludeApps là gì? – tster
Bạn có thể đăng chữ ký cho phương thức IncludeApps không? –