他のルールと同様に、ここで重要なことは、ルールの目的、精神を考慮し、教科書でルールがどのように表現されているか、このケースにそれを適用する方法を正確に分析することに夢中にならないことだと思います。弁護士のようにこれにアプローチする必要はありません。ルールの目的は、より良いプログラムを書くのを助けることです。プログラムを書く目的がルールを守ることではないようです。
単一責任ルールの目的は、各機能に1つの自己完結した一貫性のあることを実行させることにより、プログラムの理解と保守を容易にすることです。
たとえば、私はかつて「checkOrderStatus」のようなものを呼び出す関数を作成しました。この関数は、注文が保留中、発送済み、バックオーダー済み、何であるかを判断し、どれを示すコードを返しました。その後、別のプログラマーがやって来て、この関数を変更して、注文品の出荷時に手持ちの数量も更新しました。これは、単一の責任原則に大きく違反しました。後でそのコードを読んでいる別のプログラマーは、関数名を確認し、戻り値がどのように使用されたかを確認し、データベースの更新を行ったことを疑うことはないでしょう。手持ちの数量を更新せずに注文ステータスを取得する必要がある人は、厄介な立場にあります。注文ステータス部分を複製する新しい関数を作成する必要がありますか?db更新を行うかどうかを知らせるフラグを追加しますか?等。
一方で、「2つのこと」を構成するものを軽視しません。私は最近、顧客情報をシステムからクライアントのシステムに送信する関数を作成しました。この関数は、要件を満たすためにデータを再フォーマットします。たとえば、データベースにはnullのフィールドがありますが、nullを許可しないため、「指定なし」のダミーテキストを入力するか、正確な単語を忘れてしまいます。おそらく、この関数はデータを再フォーマットして送信するという2つのことを実行しています。しかし、「再フォーマット」と「送信」ではなく、非常に意図的にこれを単一の関数に入れました。誰かに新しい電話をかけてもらい、彼がリフォーマットしてから送信しなければならないことに気づかないようにしたいのです。
あなたの場合、データベースを更新して、書き込まれたレコードのイメージを返すことは、論理的かつ必然的にうまくいく可能性のある2つのことのように思えます。私はあなたのアプリケーションの詳細を知らないので、これが良いアイデアであるかどうかを明確に言うことはできませんが、もっともらしいようです。
レコードのすべてのデータを保持するオブジェクトをメモリ内に作成し、データベース呼び出しを行ってこれを書き込み、オブジェクトを返す場合、これは非常に理にかなっています。あなたの手にオブジェクトがあります。なぜそれを返さないのですか?オブジェクトを返さなかった場合、呼び出し元はどのように取得しますか?彼はあなたが書いたオブジェクトを取得するためにデータベースを読まなければならないでしょうか?それはかなり非効率的です。彼はどのようにレコードを見つけますか?主キーを知っていますか?誰かが、書き込み関数がレコードを再読み取りできるように主キーを返すことが「合法」だと宣言した場合、なぜレコード全体を返さないのですか?違いは何ですか?
一方、オブジェクトの作成がデータベースレコードの書き込みとはまったく異なる作業であり、呼び出し側がオブジェクトを作成せずに書き込みを実行したい場合、これは無駄になります。呼び出し元がオブジェクトを必要としているが書き込みを行わない場合、オブジェクトを取得する別の方法を提供する必要があります。これは、冗長なコードを記述することを意味します。
しかし、シナリオ1の方が可能性が高いと思うので、おそらく問題はないと思います。