domain + interface + impl (ad)