Tutorial
This tutorial will focus on the mechanics of the tool, assuming you already understand the IDesign Method. Completly abstract terms with no link to a real project will be used
System Design
Anti-Design
Static Aspect
Eliminate the blank canvas and carry out the anti design by dumping everything in your mind into a static aspect
StaticAspect "Anti-design" {
PersonClient BodyClient EntityClient IndividualClient SubjectClient
ConceptManager ConcernManager WidgetManager MatterManager
PhenonmenonManager ContrivanceManager SubjectManager
SolveEngine DrawEngine BuildEngine AnswerEngine ArrangementEngine ImmitationEngine
ApparatusAccess ArticleAccess SubstanceAccess CreatureAccess MachineAccess
AppratusResource ArticleResource SubstanceResource CreatureResource MachineResource
}
First Iteration
Static Aspect
Based upon the volatitlies create your first Iteration
StaticAspect "Iteration 1" {
PublicClient PartnerClient
FeedManager PhenonmenonManager AnalyticsManager NotificationManager
AnswerEngine ArrangementEngine ImmitationEngine
EntityAccess MaterialAccess
CreatureResource MachineResource:a ArticleResource:n
}
Call Chains
Create multiple call chains to validate the architecture
UseCase "usecase0" {
PublicClient -> PhenonmenonManager -> ImmitationEngine -> EntityAccess
EntityAccess -> CreatureResource
EntityAccess -> MachineResource
ImmitationEngine -> MaterialAccess -> ArticleResource
}
UseCase "usecase1" {
...
}
...
UseCase "usecaseN" {
...
}
Iterate over architecture and call chains
Carry out multiple iterations eliminating smells and making it your best solution within the timebox
StaticAspect {
PublicClient PartnerClient
FeedManager PhenonmenonManager AnalyticsManager
AnswerEngine ImmitationEngine
EntityAccess MaterialAccess
CreatureResource MachineResource:a ArticleResource:n
PubSubUtility
CacheUtility
}
UseCase "usecase0" {
PublicClient -> PhenonmenonManager -> ImmitationEngine -> CacheUtility
ImmitationEngine -> EntityAccess
EntityAccess -> MachineResource
ImmitationEngine -> MaterialAccess -> ArticleResource
ImmitationEngine -> CacheUtility
PhenonmenonManager -:q> PubSubUtility
}
UseCase "usecase1" {
...
}
...
UseCase "usecaseN" {
...
}
Detailed Design
Operation Names
Working on each layer of your design starting with the managers, create operation names within the use cases
UseCase "..."{
PublicClient - IPhenonmenonManager.Observe() > PhenonmenonManager
...
}
UseCase "..."{
PublicClient - IAnalyticsManager.Summary() > AnalyticsManager
...
}
UseCase "..."{
PublicClient - IAnalyticsManager.Export() > AnalyticsManager
...
}
UseCase "..."{
PubSubUtility - INotificationManager.Notify():q > NotificationManager
...
}
Move on to the engine layer
UseCase "..."{
...
PhenonmenonManager - IAnswerEngine.Locate() > AnswerEngine
...
}
UseCase "..."{
...
AnalyticsManager - IAnswerEngine.Summarize() > AnswerEngine
...
}
UseCase "..."{
...
PhenonmenonManager - IImmitationEngine.Mimic() > ImmitationEngine
...
}
Repeating the process for the access layer is left as an exercise for the reader
DTO Names
Working through the layers again we can add DTOs to the detailed design
UseCase "..."{
PublicClient - ObservationResponse IPhenonmenonManager.Observe(ObservationRequest ) > PhenonmenonManager
PhenonmenonManager - IImmitationEngine.Mimic() > ImmitationEngine
}
UseCase "..."{
PublicClient - ObservationResponse IPhenonmenonManager.Observe(ObservationRequest ) > PhenonmenonManager
PhenonmenonManager - MimicResponse IImmitationEngine.Mimic(MimicRequest) > ImmitationEngine
}
Supporting Polymorphism
UseCase "...Linear"{
PublicClient - ObservationResponse IPhenonmenonManager.Observe(ObserveLinear ) > PhenonmenonManager
...
}
UseCase "...Parallel"{
PublicClient - ObservationResponse IPhenonmenonManager.Observe(ObserveParallel ) > PhenonmenonManager
...
}
Contexts
Extend using contexts for DTOS for calls to the manager
UseCase "...PublicLinear"{
PublicClient - Public.ObservationResponse IPhenonmenonManager.Observe(Public.ObserveLinear ) > PhenonmenonManager
...
}
UseCase "...PartnerLinear"{
PublicClient - Partner.ObservationResponse IPhenonmenonManager.Observe(Partner.ObserveLinear ) > PhenonmenonManager
...
}
Extend using contexts for Interfaces
UseCase "...PublicLinear"{
...
PhenonmenonManager - MimicResponse Phenonmenon.IImmitationEngine.Mimic(MimicRequest) > ImmitationEngine
}
Wrapper
Consider using a generic wrapper for Engine responses
UseCase "...PublicLinear"{
...
PhenonmenonManager - Response<MimicResponse> Phenonmenon.IImmitationEngine.Mimic(MimicRequest) > ImmitationEngine
}
Generate
Select Generate from the options menu and run the script on your local machine.
Generate Solution, Projects and DTOs
Visual studio solution structure
Polymorphic contextual DTOs