搜索

PythonReactSEOPDF
GitHub Skill

create-value-object

Create Value Object for domain modeling following DDD patterns. Use when you need to encapsulate primitive values with validation, business rules, and immutability. Creates reusable VOs like PriceField, EmailField, QuantityField with validation and domain logic.

Dev-Int☆ 0 仓库 Stars0 仓库 Forks

安装与使用

请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。

查看来源 ↗使用指南

技能说明

Create Value Object

Generate immutable Value Object with validation and business rules.


When to Use

  • Encapsulate primitive values (string, int, float)
  • Add validation to domain values
  • Avoid primitive obsession
  • Create reusable domain concepts

Inputs/Outputs

Input Example Output
name PriceField Shared/Entities/VO/ValueObjectName.php (if shared)
type string, int BC/Entities/VO/ValueObjectName.php (if BC-specific)
validation ['min' => 0] -
location Shared, Admin -

Process

Step Action
Create Use template: value-object.php.tpl
Validate make cs-fixer && make stan

Structure

Value Object (final readonly, private constructor, static factory):

final readonly class ValueObjectName {
    private function __construct(private TypeHere $value) {}

    public static function fromString(string $value): self {
        if (empty($value)) {
            throw InvalidValueObject::empty();
        }
        return new self($value);
    }

    public function toString(): string { return $this->value; }
    public function equals(self $other): bool { return $this->value === $other->value; }
}

See: docs/GLOSSARY.md#value-object for detailed definition


Rules

Class Structure:

  • final readonly class, private constructor
  • Static factory: fromString(), fromInt(), fromCents(), etc.
  • Immutable (no setters)

Validation:

  • In factory method
  • Throw domain exceptions (not generic)
  • Clear error messages

Methods:

  • Getter: toString(), toInt(), toFloat()
  • Comparison: equals(), isGreaterThan(), etc.
  • Business logic if needed (e.g., add(), multiply())

Location Decision:

  • Shared/Entities/VO/ if used across multiple BCs (ResourceUuid, EmailField, NameField, PriceField)
  • BC/Entities/VO/ if BC-specific only (ArticleReference, SupplierCode, TaxRate)

Templates

  • value-object.php.tpl

Location: .claude/templates/


References

  • Value Object definition: docs/GLOSSARY.md#value-object
  • Value Object pattern: docs/QUICK_REF.md#value-object-pattern
  • Architecture: docs/architecture.md#value-objects
  • Shared VOs: src/Shared/Entities/VO/

Related Skills

  • create-entity - Use VOs in entities
  • create-use-case - Pass VOs in requests

使用示例

查看来源仓库中的使用示例与配置说明。

查看来源 ↗

来源历史

收录时间
2026-01-20
索引更新时间
2026-01-26
Branch
main

收录与同步日期属于本站记录。源码修改历史请查看来源仓库。

GitHub ↗

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!