Создание вложенного беглого API в Java
Мы пытаемся придумать свободный API для вложенного объекта. Считайте, что у нас есть следующие три класса
Атрибут: name: String Значение: Object
Предмет: действие: строковые атрибуты:
Порядок: действие: строковые атрибуты: предметы:
Здесь мы хотим иметь свободный API, который может помочь построить над объектами.
Теперь нам нужно иметь строителей следующим образом:
Атрибут Строитель
AttributeBuilder.make().name().value().build();
Построитель предметов
ItemBuilder.make().action()
.attribute()
.name().value().build()
.attribute()
.name().value().build()
.build();
Построитель заказов
OrderBuilder.make().action()
.attribute()
.name().value().build()
.attribute()
.name().value().build()
.item()
.action()
.attribute()
.name().value().build()
.attribute()
.name().value().build()
.build()
.build();
Позже мы можем вложить объект заказа в другой объект.
Так есть ли способ добиться такого вложенного построения DSL?
1 ответ
Вау, это много Строителей. Вы уверены, что вам нужно построить каждую деталь иерархии, как это?
Глядя на код, мы видим, что сущности образуют древовидную иерархию. У заказов есть предметы, а у предметов есть атрибуты. Если сущности действительно будут такими простыми, вы могли бы построить иерархию, вообще не используя Builders. Смотрите пример здесь.
Для быстрой обработки заказов вы можете использовать шаблон Composite. Например, если вам нужно будет рассчитать цену заказа на основе предметов и атрибутов. Или вычтите заказанные предметы и атрибуты из хранилища сальдо.