質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.37%

  • Java

    10446questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • 関数

    151questions

    関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

メソッドや関数からメソッド等を呼ぶ、入れ子になってるような場合の命名について。

解決済

回答 1

投稿 2017/11/24 13:01

  • 評価
  • クリップ 0
  • VIEW 77

LokiTick

score 12

質問

うまく説明できないのですが例えば、以下のようなDBからデータを取ってくるようなプログラムがあるとします。

class Service {
  private Dao dao;

  Data fetchXXX(key) {
    dao.selectXXX(key)
  }
}

class Dao {
  Data selectXXX(key) {
    //DB処理
    return data;
}


Serviceはよりクライアントに近い層から呼ばれるとします。
上記のようにServiceではDaoを利用して具体的な処理を移譲しています。
そこで親となるメソッド、例だとfetchXXX(key)の名前は子のselectXXX(key)と同じにすべきでしょうか。
Serviceでデータに対するなんらかの処理をしてそれを返す場合は異なった名前になるのが予想されますが、
上記のようにServiceをインターフェースとしてDaoを利用するような(処理を単純に移譲するだけ)場合、
名前は同じなのが良いのか、よくないのか教えていただきたいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

メソッドの命名における重要なポイントの1つは「利用者に対するインターフェイス」という観点です。つまり提示の例では、Daoクラスを利用する側がどのような名前でメソッドを呼び出せるようにするか?が重要です。Serviceクラスのメソッド名はServiceクラスを利用する側にとって重要な名前であり、それは本来Daoクラスのメソッド名とは関係のないことです。

また、クラス名には適切な「役割名」を、メソッド名には適切な「責務名」を付けなければなりません。その意味からは、ある関係のみ(今回の例ではServiceとDao)に着目して名前を付けるのは適切ではありません。可能な限り1つのクラスは他のクラスと密結合にならないように独立した存在として設計すべきです。

したがって、Serviceクラスから単に移譲で呼び出されるからという理由だけでDaoクラスのメソッドをServiceクラスのメソッド名と同じにしなければならないという必然性はないし、また場合によっては同じ名前になることもありうるということです。
あくまでも、そのクラスの役割と責務、そして外部に対するインターフェイスに着目して名前を検討すればよいでしょう。

投稿 2017/11/24 14:50

編集 2017/11/24 14:50

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/24 16:46

    非常にわかりやすく、私の知りたかったことをお答えしていただきありがとうございました。
    "利用者に対するインターフェイス"という観点はとてもわかり易く、今後はこのコトを肝に銘じて良い設計を心がけます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.37%

関連した質問

  • 受付中

    [Java]オブジェクトを作成して標準入力から該当するデータを出力させたいです。

    前提・実現したいこと Javaです。 5種類のパンについて、 人気の順位, 名前, 値段 の3つの情報を持つクラスを作り、標準入力から入力された順位のパンの情報を標準出力に

  • 解決済

    toString()メソッドのうまい書き方がわかりません。

    簡単な単方向連結リストの実装をしてみたのですが、toStringメソッドがうまく書けないで、困っています。 どのように記述するのがベストだと思われますか? public c

  • 解決済

    Javaのプログラムでコンパイルエラーになります。

    Java Bronzeの問題の問題で以下のソースでコンパイルエラーになるのですがどこをどう直したら画面に表示されますか??回答よろしくお願いします。 class Parent

  • 解決済

    ファイルの書き出し

    前提・実現したいこと csvファイルから読み込んだものをソートして別のcsvファイルに書き出しを行いたいです。 発生している問題・エラーメッセージ 書き出しが行われない。

  • 解決済

    JAVAでメソッドが連続しないようにする方法

    今leapmotionを率いていろいろやっているのですが あるメソッドだけ、1秒ごとにしか反応しないようにしたいです。 何か方法はありますか。 #イメージです!!

  • 解決済

    まだわからないJavaラムダ式

    現在Java勉強中の身です ラムダ式の処理をつかってコレクションの要素をひとつずつ取り出したいのですが 書き方がわかりません。 今現在は HashMap<S

  • 解決済

    メインクラスについて

    Javaを勉強し始めたものです 初歩的な質問だと思いますが、わかる方回答願います Javaのコードを書き、実行しようとしたところ、 エラー: メイン・クラス〇〇〇が見つから

  • 解決済

    while文でmapのkyeと値を表示

    現在java se 8を勉強しております。 while文を用いて、keyと値をコンソールに表示したいのですが、うまくいかず どなたかご教授いただければと存じます ※for 文の書き

同じタグがついた質問を見る

  • Java

    10446questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • 関数

    151questions

    関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。