記事中の経験談は、Spring Frameworkの実務経験によるものです。
Entityの役割
任意にテーブルデータを組み合わせたカスタムエンティティ(ユーザー定義エンティティ)を作成することも可能
しかし、自分の経験上、カスタムエンティティを簡単に認めると、好き勝手なエンティティが乱立するので良くない(当たり前ですね…)
Serviceの役割
業務ロジックを実行するためのメソッドを実装し、主にControllerクラスから呼び出される
業務ロジックで必要となるデータは、Repositoryを介して、Entityオブジェクトとして取得する
経験上、Serviceクラスは業務ロジック全般を担うので、肥大化しがちになる
そのため、各役割に応じて適切にクラスを分割する必要があるかと思います
Repositoryの役割
Spring FrameWork(Java)では、MyBatis(SQL と Java オブジェクトを紐付ける永続化フレームワーク)の関数を呼び出す実装をしていました。
参考リンク
4.1. ドメイン層の実装 — TERASOLUNA Global Framework Development Guideline 1.0.0.publicreview documentation