Many of us have heard about aspect-oriented programming. When some concerns like logging, validations and other aspects are flexibly injected into processes. But what's about design of the application? Aren't there any aspects?

I think there are. One of the most frequent examples is interface IEntity<T> with property Id of type T. It says that object is uniquely identified in the persistent storage. Sometimes we are talking about parent-child relationship, which can be realized as a IChild<T> interface with Parent property of T type. Many entities have names. So IHasNamed aspect can be frequently used. IActive aspect with enabled or disabled status. For logistics you may want IDimensions aspect, IValuable for e-commerce, etc.

Idea is that we consider object as a set of aspects with possibility to add them dynamically. Just imagine that you have a IMembership interface provided by some security frameowkr that you can't upgrade. But want to make membership expirable sometimes. E.g. one of your admins is on vacation and you are going to grant this role temporarily to another employee. For that purposes you've created ILifetime interface with Start/Expiration properties and create new membership like _factory.Entity<IMembership, ILifetime>();

Many other benefits are inherited from https://stanego.com/business-objects-redesigned/.