Skip to main content

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;
}