August 2010
Intermediate to advanced
376 pages
10h 6m
English
Qi4j (Qi4j 2006) is a Java framework that support class composition to achieve a DCI-like architecture. The implementation relies heavily on annotations. You can read more about the annotations and the framework in the reference. This code comes from Steen Lehmann.
@Concerns({PurchaseLimitConcern.class,
InventoryConcern.class})
public interface OrderComposite
extends Order, HasLineItems, Composite
{
}
public abstract class InventoryConcern
extends ConcernOf<Invoice>
implements Invoice
{
@Service InventoryService inventory;
public void addLineItem(LineItem item)
{
String productCode=item.getProductCode();
int quantity=item.getQuantity();
inventory.remove(productCode, quantity);
next.addLineItem(item);
}public void removeLineItem(LineItem item) { String productCode=item.getProductCode(); int quantity=item.getQuantity(); inventory.add(productCode, quantity); next.removeLineItem(item); } } @Concerns({PurchaseLimitConcern.class, InventoryConcern.class}) public interface OrderComposite extends Order, HasLineItems, EntityComposite { } @SideEffects(MailNotifySideEffect.class) @Concerns({PurchaseLimitConcern.class, InventoryConcern.class}) public interface OrderComposite extends Order, HasLineItem, EntityComposite { } public abstract class MailNotifySideEffect extends SideEffectOf<Order> implements Order { @Service MailService mailer; @This HasLineItems hasItems; @This Order order; public void confirmOrder() { List<LineItem> items=hasItems.getLineItems(); StringBuilder builder=new ...Read now
Unlock full access