У меня немного другое понимание преднамеренного программирования (как более общего термина, а не только того, что делает Чарльз Симони). Он тесно связан с плавными интерфейсами и может быть достигнут с различной степенью сложности на современных объектно-ориентированных языках.
Некоторые из этих концепций основаны на доменно-ориентированном дизайне (на самом деле термин «свободный интерфейс» популяризировал Эрик Эванс, автор «синей книги») Программное обеспечение ).
Цель состоит в том, чтобы сделать код бизнес-уровня понятным для непрограммиста (то есть делового человека). Это может быть достигнуто с помощью имен классов и методов, которые явно указывают намерение операции. По моему мнению, явный и преднамеренный код создает читаемый и поддерживаемый код.
Рассмотрим два приведенных ниже примера, которые достигают одного и того же: создание заказа для клиента со скидкой 10% и добавление к нему пары продуктов.
//C#, Normal version
Customer customer = CustomerService.Get(23);
Order order = new Order();
//What is 0.1? Need to look at Discount property to understand
order.Discount = 0.1;
order.Customer = customer;
//What's 34?
Product product = ProductService.Get(34);
//Do we really care about Order stores OrderLines?
order.OrderLines.Add(new OrderLine(product, 1));
Product product2 = ProductService.Get(54);
order.OrderLines.Add(new OrderLine(product2, 2)); //What's 2?
Order.Submit();
//C#, Fluent version
//byId is named parameter, states that this method looks up customer by Id
ICustomerForOrderCreation customer =
CustomerService.GetCustomerForOrderCreation(byId: 23);
//Explicit method to create a discount order and explicit percentage
Order order = customer.CreateDiscountOrder(10.Percent())
.WithProduct(ProductService.Get(byId: 34))
.WithProduct(ProductService.Get(byId: 54))
.WithQuantity(2); //Explicit quantity
Order.Submit();
Слегка изменив свой стиль программирования, вы сможете более четко сообщать о своих намерениях и сократить количество необходимости просматривать код в другом месте, чтобы понять, что происходит.