Este artigo é uma sinopse da Parte III do Projeto Agregado Eficaz: Obtendo Insight por meio da Descoberta .
A Parte 2 discutiu como os agregados se referem uns aos outros e como usar a consistência eventual para atingir objetivos de negócios específicos. Na terceira parte, veremos como a aderência às regras de agregados afeta o design do modelo Scrum (projeto de teste da primeira parte).
Repensando o Design do Modelo
Depois de uma iteração de refatoração que eliminou o grande agregado Product, BacklogItem se tornou um agregado separado. A nova versão do modelo pode ser vista na Figura 1. O agregado BacklogItem contém uma coleção de instâncias de Task. Cada BacklogItem possui um identificador globalmente exclusivo - BacklogItemId. A associação com outros agregados ocorre por meio de identificadores. O agregado BacklogItem parece ser bem pequeno.
Apesar do resultado positivo após a primeira iteração, algumas preocupações ainda existem. Por exemplo, o atributo de história permite que você contenha uma grande quantidade de texto. Podem surgir custos indiretos potenciais devido a isso.
, , . . BacklogItem Task? ? ?
. :
, .
0 , . , done.
, done, .
. , . , 1 . , . , , , .
, , . , .
1, Task EstimationLogEntry. , . , Task BacklogItem, EstimationLogEntry Task? . , . .
, . , . 10 15, , 12 .
, . 4 16. , 12 , Scrum . , 12 (1 ). , 12 , , 12 , .
: ? , , 12 ( , ; ). 12 , 12 , 144 (12*12) . , .
, . Scrum , . (24) (6) 144. (24 12) , . 12 12 .
. 144 ? -? , ? , , ? .
. BacklogItem. , BacklogItem . , , .
, , , , , .
, . . . . BacklogItem. , .
, , . BacklogItem Task . . , .
0 , , . , done, , , done, .
? . , , . , . . 12- . , 144 12 , done.
. , (6 ), . , . , .
. , . , . . , , , . , , . , .
? 12 + 12 , 12 . , 12 . , 12 12 , 25 . . , . .
? , .
. , story points, . , . , , . , story points .
Task . . , , .
, , Tak BacklogItem. , , .
Task estimateHoursRemaining(), . :
public class TaskHoursRemainingEstimated implements DomainEvent {
private Date occurredOn;
private TenantId tenantId;
private BacklogItemId backlogItemId;
private TaskId taskId;
private int hoursRemaining;
...
}
. :
BacklogItemRepository BacklogItem .
TaskRepository Task, BacklogItem
BacklogItem estimateTaskHoursRemaining(), hoursRemaining Task. BacklogItem .
, . . , Task, , , .
public class TaskRepositoryImpl implements TaskRepository {
...
public int totalBacklogItemTaskHoursRemaining(
TenantId aTenantId,
BacklogItemId aBacklogItemId) {
Query query = session.createQuery(
"select sum(task.hoursRemaining) from Task task "
+ "where task.tenantId = ? and "
+ "task.backlogItemId = ?");
...
}
}
. , ? - ? « UI». . .
Ajax, . , , Ajax . 143 144 , . Ajax Push.
, – . , , , .
, Task BacklogItem. , . . 50 , 25, .
Task BacklogItem . , , .
, :
.
.
.
, .
, , , , - .