lib/one_piece/commanded/value_object.ex
defmodule OnePiece.Commanded.ValueObject do
@moduledoc """
Defines a module as a "Value Object". For more information about value objects, please read the following:
- [Value Object Wikipedia](https://en.wikipedia.org/wiki/Value_object)
- [ValueObject by Martin Fowler](https://martinfowler.com/bliki/ValueObject.html)
"""
@doc """
Converts the module into an `Ecto.Schema`, and derive from `Jason.Encoder`.
## Usage
defmodule MyValueObject do
use OnePiece.Commanded.ValueObject
embedded_schema do
# ...
end
end
"""
@spec __using__(opts :: []) :: any()
defmacro __using__(_opts \\ []) do
quote do
use Ecto.Schema
@derive Jason.Encoder
@primary_key false
end
end
end