...
- this removes the duplication between the
placeOrder(...)
parameter list and the list of members inPlaceOrderParameters
class.
As a mixin, this becomes:
Code Block |
---|
@Action
public class Customer_placeOrder {
private final Customer target; // target
public Customer_placeOrder(Customer target) { ... }
@Value @Accessors(fluent = true)
public static class PlaceOrderParameters { // to assist supporting methods
Product product;
int quantity;
}
public static class PlaceOrderEvent extends ActionDomainEvent<Customer> {}
@Action(domainEvent = PlaceOrderEvent.class) // event publishing
public Customer act(PlaceOrderParameters) { ... } // execution
public boolean hideAct() { ... } // supporting methods
public String disableAct() { ... }
public String disable1Act(PlaceOrderParameters params) { ... }
public Collection<Product> choices0Act() { ... }
public Product default0Act() { ... }
public int default1Act() { ... }
public String validate1Act(PlaceOrderParameters params) { ... }
public String validateAct(PlaceOrderParameters params) { ... }
} |
Notes:
- we still have three classes here (mixin, parameters and domain event), but we have removed the duplication between the
act(...)
parameter list and the list of members ofPlaceOrderParameters
class
Discussion
With the parameters object passed in everywhere, I could see myself starting to move functionality onto that object. So as an idiom, we might see the following sort of code (in a mixin):
Mixins and Parameters combined (proposed)
yada yada