SABER convention: constructors take collaborators as keyword args with sensible defaults — enables stub-injection in specs.
CASTER currently instantiates collaborators inline (`ListingNormalizer.new(...)` and `CSV.read(...)` inside service bodies).
Sketch:
```ruby
def initialize(raw_listing, normalizer: ListingNormalizer)
@raw_listing = raw_listing
@Normalizer = normalizer
end
```
Pairs naturally with D2 (FactoryBot/Shoulda) since DI makes specs cheaper to write.
SABER convention: constructors take collaborators as keyword args with sensible defaults — enables stub-injection in specs.
CASTER currently instantiates collaborators inline (`ListingNormalizer.new(...)` and `CSV.read(...)` inside service bodies).
Sketch:
```ruby
def initialize(raw_listing, normalizer: ListingNormalizer)
@raw_listing = raw_listing
@Normalizer = normalizer
end
```
Pairs naturally with D2 (FactoryBot/Shoulda) since DI makes specs cheaper to write.