If I’ve understood then, a narrow waist architecture follows two principles:
- code to an interface not an implementation
- segregate interfaces, don’t overload them with responsibilities
- code to an interface not an implementation
- segregate interfaces, don’t overload them with responsibilities
You could have a really skinny interface (one method call only):
class TaxLogic {
data = iDatabase.loadOneDatabaseRow(id);
process(data);
}
interface IDatabase {
loadOneDatabaseRow(id);
}
class PostgresDb implements IDatabase {
loadOneDatabaseRow(id) {...}
}
But this violates ports and adapters because the logic is on the outside and the database is on the inside.