Another example when calling public method inside another public method is totally fine is an CanExecute/Execute approach. I use it when I need both [validation and invariant preservation][1].

But in general I'm always cautious about that. If a method `a()` is called inside method `b()`, it means that method `a()` is an implementation detail of `b()`. Very often it indicates that they belong to different abstraction levels. And the fact that they both are public makes me wonder whether it's a [Single-responsibility principle][2] violation or not.


 [1]: http://enterprisecraftsmanship.com/2016/09/13/validation-and-ddd/
 [2]: https://medium.com/@wrong.about/the-secret-behind-the-single-responsibility-principle-e2f3692bae25