Dieser Artikel ist eine Zusammenfassung von Effective Aggregate Design Teil III: Einblicke durch Entdeckung gewinnen .
In Teil 2 wurde erläutert, wie Aggregate aufeinander verweisen und wie die eventuelle Konsistenz zur Erreichung bestimmter Geschäftsziele verwendet werden kann. Im dritten Teil werden wir sehen, wie sich die Einhaltung der Regeln für Aggregate auf das Design des Scrum-Modells auswirkt (Testprojekt aus dem ersten Teil).
Modelldesign überdenken
Nach einer Refactoring-Iteration, bei der das große Produktaggregat entfernt wurde, wurde BacklogItem zu einem separaten Aggregat. Die neue Version des Modells ist in Abbildung 1 dargestellt. Das BacklogItem-Aggregat enthält eine Sammlung von Task-Instanzen. Jedes BacklogItem hat eine global eindeutige Kennung - BacklogItemId. Die Zuordnung zu anderen Aggregaten erfolgt über Bezeichner. Das BacklogItem-Aggregat scheint ziemlich klein zu sein.
Trotz des positiven Ergebnisses nach der ersten Iteration bestehen noch einige Bedenken. Mit dem Story-Attribut können Sie beispielsweise eine große Textmenge enthalten. Dadurch können potenzielle Gemeinkosten entstehen.
, , . . 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 . , , .
, :
.
.
.
, .
, , , , - .