わからないこと
- ControllerとServiceの切り分けが分かりません。
- 下記に簡単な例を示しましたので、どの方法がベストか、他の方法が良いか、ご教示いただきたいです。
- (そもそもRepositoryを直接コントローラから実行するのって普通ですか?Serviceを経由する必要はないですか?)
処理概要(細かいところは省きます)
- テーブルaのデータを取得
- 取得できなかったら処理終了
- テーブルbのデータ取得
- DTOにaとbのデータをセット
コード
※現在springを使用しているため、javaおよびspringで記載します。
パターン1:全部Serviceで処理(同一のDTOを構成する処理はまとめるという思想、ただ関連テーブルが増えるとserviceのメソッド内の処理が膨大になります・・・)
Java
1@Controller 2public Class hogeController{ 3 public hogeDto search(){ 4 return hogeService.getDto(); 5 } 6} 7 8@Service 9public Class hogeService{ 10 public hogeDto getDto(){ 11 aEntity = aRepogitory.findOne(1); 12 if( aEntity == null ){ 13 return null; 14 } 15 bEntity = bRepogitory.findOne(1); 16 17 hogeDto.setHoge(aEntity.hoge); 18 hogeDto.setFuge(bEntity.fuga); 19 20 return hogeDto; 21 } 22}
パターン2:全部Controllerで処理(多分この程度の処理なら許容されそうですけど、もっと膨大になったらだめですよね・・・?)
Java
1@Controller 2public Class hogeController{ 3 public hogeDto search(){ 4 aEntity = aRepogitory.findOne(1); 5 if( aEntity == null ){ 6 return null; 7 } 8 bEntity = bRepogitory.findOne(1); 9 10 hogeDto.setHoge(aEntity.hoge); 11 hogeDto.setFuge(bEntity.fuga); 12 13 return hogeDto; 14 } 15}
パターン3:値のセットはControllerで処理、後はServiceで実装(データ操作はすべてServiceを経由、データ操作に不随してロジックもついてたらこれですかね・・・・?)
Java
1@Controller 2public Class hogeController{ 3 public hogeDto search(){ 4 aEntity = hogeService.getA(); 5 if( aEntity == null ){ 6 return null; 7 } 8 bEntity = hogeService.getB() 9 hogeDto.setHoge(aEntity.hoge); 10 hogeDto.setFuge(bEntity.fuga); 11 return hogeDto; 12 } 13} 14 15@Service 16public Class hogeService{ 17 public hogeDto getA(){ 18 aEntity = aRepogitory.findOne(1); 19 if( aEntity == null ){ 20 return null; 21 } 22 23 return aEntity; 24 } 25 26 public hogeDto getB(){ 27 return bRepogitory.findOne(1); 28 } 29}
どうあるべきか、ご意見お聞かせいただけたら幸いです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。