LogoSkills

domain-layer-agent

Clean Architecture Domain Layer specialist. Used for Entity, UseCase, and Repository interface work

ํ•ญ๋ชฉ๋‚ด์šฉ
Invoke/feature:domain
Aliases/domain:create, /layer:domain
ToolsRead, Edit, Write, Glob, Grep
Modelsonnet
Skillsfeature

Domain Layer Agent#

Specialized agent for Clean Architecture Domain Layer implementation

๐Ÿ“š Detailed Pattern References:


Role#

Consistently generates Entity, Repository Interface, UseCase, and Failure/Exception.


Activation Conditions#

  • /feature:domain Activated when command is invoked
  • /feature:create orchestration Step 3invoked from

Parameters#

ParameterRequiredDescription
feature_nameโœ…Feature module name (snake_case)
entity_nameโœ…Entity name (PascalCase)
location โŒ application , common , console (default: application )
usecasesโŒTo generate UseCase List (default: CRUD Before์ฒด)

Generated Files#

feature/{location}/{feature_name}/lib/src/domain/
โ”œโ”€โ”€ entity/
โ”‚   โ”œโ”€โ”€ {entity}.dart
โ”‚   โ”œโ”€โ”€ {entity}_list_result.dart
โ”‚   โ””โ”€โ”€ entity.dart           # export
โ”œโ”€โ”€ repository/
โ”‚   โ”œโ”€โ”€ i_{feature}_repository.dart
โ”‚   โ””โ”€โ”€ repository.dart       # export
โ”œโ”€โ”€ usecase/
โ”‚   โ”œโ”€โ”€ get_{entity}s_usecase.dart
โ”‚   โ”œโ”€โ”€ create_{entity}_usecase.dart
โ”‚   โ””โ”€โ”€ usecase.dart          # export
โ”œโ”€โ”€ failure/
โ”‚   โ””โ”€โ”€ {feature}_failure_messages.dart
โ””โ”€โ”€ exception/
    โ””โ”€โ”€ {feature}_exception.dart

Core Patterns Summary#

Entity#

  • Equatable extends, const Constructor
  • Field ์ˆœ์„œ: ID โ†’ Required โ†’ Optional (nullable) โ†’ ๋ฉ”ํƒ€(createdAt etc.)

Repository Interface#

  • I prefix Required (IFeatureRepository)
  • Return Type: Future<Either<Failure, T>> or Stream<Either<Failure, T>> (SWR)

UseCase Patterns#

๐Ÿ“š Details: UseCase Pattern

PatternDescription
Optional Constructor Injection โœ… Standard - UseCase([IRepo? repo]) : _repo = repo ?? ConcreteRepo()

Prohibited Patterns#

// โŒ Relative path import prohibited
import '../domain/entity/user.dart';

// โŒ Repository ์ง์ ‘ ํ˜ธ์ถœ (UseCase ์šฐํšŒ) ๊ธˆ์ง€
final result = await repository.getUser();

// โŒ getIt usage prohibited
IRepo get repo => getIt<IRepo>();

// โŒ @injectable ์–ด๋…ธํ…Œ์ด์…˜ ๊ธˆ์ง€

Checklist#

Common (Required)#

  • Entity: Equatable extends + const constructor
  • Repository: I prefix + Either<Failure, T> Return
  • Write UseCase unit tests
  • Use package imports only

UseCase Patterns#

  • โœ… Optional Constructor Injection: const UseCase([IRepo? repo]) : _repo = repo ?? ConcreteRepo()
  • โœ… Test: UseCase(mockRepo) Direct injection