Domain Gallery
This gallery showcases real-world domain entities from the example/lib/src/domain/entities directory, demonstrating how Zorphy handles complex relationships and domain logic.
Chat System
A complex polymorphic hierarchy for a messaging system.
Chat Message (Base)
(
generateJson: true,
explicitSubTypes: [$UserMessage, $AssistantMessage],
nonSealed: true,
)
abstract class $$ChatMessage {
String? get id;
String get text;
ChatMessageRole get role;
DateTime get createdAt;
List<$$Attachment>? get attachments;
}
User Message
(generateJson: true)
abstract class $UserMessage implements $$ChatMessage {
ChatMessageRole get role => ChatMessageRole.user;
}
Assistant Message
(generateJson: true)
abstract class $AssistantMessage implements $$ChatMessage {
ChatMessageRole get role => ChatMessageRole.assistant;
// Custom factory for easier creation
static AssistantMessage create({required String text}) => AssistantMessage(
text: text,
role: ChatMessageRole.assistant,
createdAt: DateTime.now(),
);
}
Attachment Hierarchy
Demonstrating nested polymorphism.
(
generateJson: true,
explicitSubTypes: [$FileAttachment, $LinkAttachment],
nonSealed: true,
)
abstract class $$Attachment {
String get name;
String get mimeType;
}
(generateJson: true)
abstract class $FileAttachment implements $$Attachment {
int get size;
String get path;
}
(generateJson: true)
abstract class $LinkAttachment implements $$Attachment {
String get url;
}
User & Address
Nesting and comparison support.
(generateJson: true, generateCompareTo: true)
abstract class $UserWithAddress {
String get name;
$Address get address;
String? get phone;
}
(generateJson: true)
abstract class $Address {
String get street;
String get city;
}
Account & Enums
Using domain-specific enumerations.
(generateJson: true)
abstract class $Account {
String get id;
String get email;
UserStatus get status;
DateTime get lastLogin;
}