dry and abstraction