6 Ekim 2021 Çarşamba

Domain Driven Design (DDD) Specification

Giriş
Kuralları daha kolay kodlamayı sağlayan predicate gibi düşünülebilir.

Örnek
Şöyle yaparız.
public interface Specification<T> {
  boolean isSatisfiedBy(T t);
}
public class IsUnderageSpecification extends CompositeSpecification<Discount> {
  ...
}
public class IsSeniorSpecification extends CompositeSpecification<Discount> {
  ...
}
public class IsWeekendSpecification extends CompositeSpecification<Discount> {
   ...
}
Bu predicate'leri and ve or yapma imkanı da var. Şöyle yaparız.
public abstract class CompositeSpecification<T> implements Specification<T> {
  public CompositeSpecification<T> or(Specification<T> specification) {
    return new OrSpecification<>(this, specification);
  }

  public CompositeSpecification<T> and(Specification<T> specification) {
    return new AndSpecification<>(this, specification);
  }

  public CompositeSpecification<T> not() {
    return new NotSpecification<T>(this);
} }
Kuralımızı yazmak için şöyle yaparız.
public class DiscountSpecification extends CompositeSpecification<Person> {

  CompositeSpecification<Person> isUnderage = ...;
  CompositeSpecification<Person> isSenior = ...;
CompositeSpecification<Person> isWeekend = ...;
@Override public boolean isSatisfiedBy(Person person) {
return isUnderage .and(isWeekend) .or(isSenior) .isSatisfiedBy(); } }

Hiç yorum yok:

Yorum Gönder