問題タブ [single-responsibility-principle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
231 参照

oop - 単一責任の原則-ファイルからリストをロードしますか?

車のクラスがあるとしましょう。

そして、私は車のリストを保持するカスタムCarServiceクラスを持っています:

次に、車のリストをファイルからCarServiceクラスにロードします。私の古いOOPの本能は、これをCarServiceクラスのLoadFromFile()のようなメソッドとして配置することでした。ただし、SRPとテスト容易性について学習しているので、よくわかりません。

単一責任の原則に従って、これを設計する正しい方法は何ですか?CarLoaderクラスが必要ですか?

アップデート

解決策はさまざまな言語で同じである必要があると思いますが、C++を使用します。C#、Java、またはpythonを使用している場合、私の質問は同じです。

0 投票する
2 に答える
237 参照

asp.net-mvc - ユニットテストとSRP(テスト方法の範囲/組織)

次のようなMVCアクションがあるとします。

不正アクセスの試みのケースをテストするには、いくつのテスト方法が必要ですか?

つまり、単一のテストを作成しますか?

または私は2つのテストを書きますか?

問題は、技術的にはコントローラーがSRPに違反していることだと思いますが、それ自体が問題であるとは考えていません(同意しない場合は修正してください)。それがテストメソッドにどのようにマッピングされるかはわかりません。メソッドの責任ごとに1つのテストですか、それともメソッドを通る単一のルートごとに1つのテストですか?

0 投票する
6 に答える
1536 参照

ruby-on-rails - ファット レール ヘルパーをクリーンアップする

今日、いくつかのコードを DRY しようとして、いくつかの重複する File.exists を抽出しましたか? いくつかのヘルパー メソッドによってプライベート メソッドに使用されるコード

def template_exists?(*template)そして誤ってサルは、この既存の Rails ヘルパー メソッドにパッチを適用しました。これは、コードのにおいを示す非常に明確な指標でした。継承されたメソッドは必要ありませんでしたが、継承しました。その上、このヘルパーでリファクタリングされたメソッドは一体何をしていたのでしょうか?

したがって、このヘルパーはやりすぎであり、SRP (Single Responsibility Principle) に違反しています。Rails ヘルパーは本質的に SRP 内に保持するのが難しいと感じています。私が見ているヘルパーは、他のヘルパーのスーパークラス ヘルパーであり、300 行以上を数えます。これは、対話フローをマスターするために JavaScript を使用した非常に複雑なフォームの一部です。fat ヘルパーのメソッドは短くてきちんとしているので、それほどひどいものではありませんが、懸念の分離が必要であることは間違いありません。

どのように出ればいいですか?

  1. メソッドを多くのヘルパーに分割しますか?
  2. ヘルパー メソッド内のコードをクラスに抽出し、それらにデリゲートしますか? これらのクラス (Mydomain::TemplateFinder など) の範囲を指定しますか?
  3. ロジックをモジュールに分割し、上部にインクルードとしてリストしますか?
  4. 他のアプローチ?

私が見るように、偶発的なモンキーパッチに関しては、2 の方が安全です。もしかして組み合わせ?

コード例と強い意見を歓迎します!

0 投票する
4 に答える
3172 参照

wpf - 現在の MVVM ビュー モデルのプラクティスは、単一責任の原則に違反していますか?

現在のプラクティス (少なくとも WPF と Silverlight を使用) では、ビュー モデルでコマンド バインディングを介してバインドされたビューが表示されるか、少なくともビュー モデルで処理されるビュー イベントが表示されます。ビュー モデルはビュー ステートをモデル化するだけでなく、ビュー (ユーザー) に応答するため、これはSRPに違反しているように見えます。他の人は、SRP に違反せずにビュー モデルを構築する方法を尋ねたり、実装がそうするかどうかを尋ねたりしました(これは MVC のコントローラーですが、ほぼ類似しています)。

では、現在の慣行は SRP に違反しているのでしょうか? それとも、「ビュー モデル」は本当に SRP に違反しないものの集まりなのでしょうか? これを少し理解するには、単一の責任とは何か、概念に複数の責任がある場合は、SRP に準拠して個々の責任が分割されているかを知る必要があるようです。わからない。

ウィキペディアのビューモデルの定義によると

[T]ViewModel は「View のモデル」であり、View と Model の間のデータ バインディングにも役立つ View の抽象化であることを意味します。

SRP にはこれで十分だと思われますが、後でエントリに次のように記載されています (強調を追加)。

[ViewModel] は、Model 情報を View 情報に変更し、View から Model にコマンドを渡すデータ バインダー/コンバーターとして機能します。

ビュー モデルの役割に関する Prism のブログ投稿で、著者は次のように述べています (繰り返しますが、私の強調です)

要するに、ビューモデルは次の複合体であるということです:

  • ビューの抽象化
  • コマンド
  • 値コンバーター
  • ビューステート

私はそこに多くの定義を見逃していると確信していますが、それらは次のカテゴリに分類されるようです:

  1. ビューステートのモデリングの単一の「あいまいな」責任 (つまり、状態とは どういう意味ですか)
  2. 複数の責任 (ビュー ステート、ユーザー インタラクション (つまりコマンド))
  3. 単一の特定の責任 (抽象化、状態、相互作用、変換) の複合体。したがって、「すべてのものを管理する」という単一の責任があります。

興味があれば、(2) は正しいと感じますが、一般的な実装に反しているように見えるので、私はこれを「気にします」。

0 投票する
1 に答える
75 参照

oop - 肥大化したと見なされる前に、エンティティに合理的に配置できるメソッドはいくつありますか?

単一責任の原則、分解などに関するこれらすべての読み物では、エンティティが肥大化するというアラーム信号がどうあるべきかを理解することは困難です。

最大数の方法を検討する必要があるか、または他の客観的な基準があるかどうかについて、どこかに良いアドバイス/読み物がありますか?

0 投票する
5 に答える
2295 参照

php - OOP における単一責任の原則

アプリケーションの設計では、通常、オブジェクトをデータベース内の重要なテーブルにマップします。オブジェクトは、そのデータに関連するすべてのもの (リンク テーブルを含む) を処理します。たとえばActivity、 と のようなプロパティ、 と のnameようdue_dateなメソッド、および と のようなメソッドload()を使用してsave()、他のオブジェクト (の配列) を返すオブジェクトを作成しました。単一責任の原則に違反しているため、これは「悪い」OOP ですか?getParent()getContributors()getTeam()

0 投票する
1 に答える
161 参照

algorithm - SRP アルゴリズム設計

私はボブおじさんのアジャイル PPP を読んでいます。具体的には、その SRP の部分を読んでいます。原理について読んでいるときに、SRP が非常に多くの小規模なクラスと相互に依存する私たちの設計の結合を増加させているのではないという疑問が生じました。お互いに?カップリングを減らすと書かれていることは知っていますが、その方法がわかりませんでした。

0 投票する
3 に答える
18065 参照

c# - C# で単一責任の原則を学ぶ

単一責任の原則 (SRP) を学ぼうとしていますが、あるクラスからいつ、何を削除し、どこに配置/整理する必要があるかを理解するのが非常に難しいため、非常に困難です。

いくつかの資料とコード例をグーグルで探していましたが、見つけたほとんどの資料は、理解しやすくするのではなく、理解を困難にしました。

たとえば、ユーザーのリストがあり、そのリストから、ユーザーが出入りするときに挨拶とさようならのメッセージを送信する、ユーザーが入ることができるかどうかを確認するなど、多くのことを行う Control という名前のクラスがある場合彼を蹴ったり、ユーザーのコマンドやメッセージを受け取ったりします。

例から理解する必要はあまりありません.私はすでに1つのクラスにあまりにも多くのことをしていますが、後でそれを分割して再編成する方法については十分に明確ではありません.

SRP を理解していれば、チャンネルに参加するためのクラス、あいさつとさようならのためのクラス、ユーザー認証のためのクラス、コマンドを読むためのクラスが必要ですよね?

しかし、たとえば、どこでどのようにキックを使用しますか?

私は検証クラスを持っているので、天気を含むあらゆる種類のユーザー検証がそこにあると確信しています。ユーザーをキックする必要はありません。

したがって、キック関数はチャネル結合クラス内にあり、検証が失敗した場合に呼び出されますか?

例えば:

ここで、オンラインで無料のわかりやすい C# 資料を提供してくれるか、引用された例をどのように分割するか、可能であればいくつかのサンプル コード、アドバイスなどを示して、私に手を貸していただければ幸いです。

0 投票する
4 に答える
1449 参照

oop - 単一責任原則 (SRP) と私のサービス クラス

YoutubeVideoServiceCRUD(作成、読み取り、更新、および削除)操作を行うクラスがあります。私の見解では、作成、読み取り、更新、および削除は、クラスが変更される 4 つの理由です。このクラスは単一責任の原則に違反していますか?

違反する場合はCreateYoutubeVideoServiceReadYoutubeVideoService、 、 のUpdateYoutubeVideoServiceような 4 つのクラスが必要DeleteYoutubeVideoServiceです。授業が多いのはやり過ぎじゃない?

0 投票する
3 に答える
2439 参照

android - 1回のインストールで2つのアプリケーションをインストールする方法は?

私はAndroidアプリケーションを初めて使用します.Oneproject、Twoprojectとして2つのサンプルアプリケーションを作成しました.Oneprojectを実行すると、Twoprojectは同じデバイスに自動的にインストールされます。このために、androidmanifestfile.xmlで次のようにインテントフィルターを初期化します。

2つのアプリケーションをデバイスにインストールできますが、Oneprojectを起動すると、Twoprojectを実行できません。1回のインストールで2つのアプリケーション(apk)をインストールして起動するにはどうすればよいですか?

どんな体のplzzzも私を助けてくれます......