問題タブ [solid-principles]

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 投票する
6 に答える
9127 参照

design-principles - リスコフの置換原則-オーバーライド/仮想メソッドはありませんか?

リスコフの置換原則についての私の理解は、真である基本クラスのいくつかのプロパティ、または基本クラスの実装された動作は、派生クラスでも真である必要があるということです。

これは、メソッドが基本クラスで定義されている場合、派生クラスでオーバーライドしてはならないことを意味すると思います。派生クラスの代わりに基本クラスを置き換えると、異なる結果が得られるためです。これはまた、(純粋でない)仮想メソッドを持つことは悪いことだと思いますか?

原理の理解が間違っているのではないかと思います。そうしないと、なぜこの原則が良い習慣であるのか理解できません。誰かが私にこれを説明できますか?ありがとう

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

logging - ロギングは、ロギングを主な目的としないクラス内に存在する必要がありますか?

これはもっと理論的な質問です。ロギングは、ロギングを主な目的としないクラス内に存在する必要がありますか?

これは、数値の計算を実行するものすべての簡単なインターフェイスです。

これは、計算を実行し、いくつかのロギングを行うICalculationインターフェースの実装です。これは非常に実用的なアプローチだと思います。コンストラクターが計算のドメインで通常は見られないものを受け入れることを除けば、インラインロギングは間違いなく邪魔になりません。

ReallyIntenseCalculationからすべてのロギングコードを削除した後、コードには明確な単一責任のように見えるものが含まれるようになりました。

さて、ReallyIntenseCalculationの内部ログ機能を削除しました。その機能を外部化する方法をどのように見つけることができますか。デコレータパターンを入力します。

ICalculationを装飾するクラスを作成することで、ログをミックスに戻すことができますが、そうすると、ReallyIntenseCalculationのプライベートメソッド内で行われていたより詳細なログの一部が損なわれます。

ロギングデコレータを持つことのその他の考えられる長所と短所は何ですか?

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

.net - Bootstrapper で Automapper を構成すると、Open-Closed 原則に違反しますか?

Bootstrapper で Automapper を構成していて、 で を呼び出してBootstrap()い ますが、新しいマッピングを追加する必要があるたびにクラスApplication_Start()を変更する必要があるため、これは間違っていると言われたので、Open-Closed Principle に違反しています。 Bootstrapper.

私は本当にこの原則に違反していると思いますか?

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

.net - .NETのSOLIDDDDORMリクエスト(クリーンなエンティティとリポジトリを使用するため)

するORMはありますか

  • プロパティとクラスの属性なしで、エンティティクラスをクリーンなままにします
  • ActiveRecordパターンではないため、entity.Save/Deleteなどを含めることはできません。

オプション:ストアドプロシージャを実行し、結果をエンティティに解析できます

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

.net - システム書き換えのアーキテクチャをどのように計画する必要がありますか?

以前に一部作業していた現在のシステムを書き直す予定です。私はこれを学習演習として行っています。以下は、古いシステム、新しいシステムの基本的なアーキテクチャ、従うべきいくつかのベストプラクティス、達成したい目標、および私の質問の説明です。

古いシステムについて説明し
ます。1。SQLServerデータベース(正規化されていません)
2。Palmアプリケーション(データベースにデータを入力するため)
3。Webサービス1(Palmアプリケーションはデータベースに入力するためにデータを送信します)
4。Webアプリケーション(データベースにデータを入力してください)-私はこれを作成しました
5. Webサービス2(Webアプリケーション1はデータベースに入力するためにデータを送信します)-私はこれを作成しました
6. Webサイト(データを直接CRUDしてレポートを印刷するため)

新しいシステムのアーキテクチャの概念について説明し
ます。1。UIWebアプリケーションソリューション-古いWebサイトを置き換えます。
2.UIWebアプリケーションソリューション-古いWebアプリケーションとPalmアプリケーションを置き換えます。
3. Webサービスソリューション(WCFを使用)-古いWebサービス1とWebサービス2を置き換えます
。4。ビジネスオブジェクトソリューション-ビジネスオブジェクト、データアクセスソリューションへのコード呼び出し、およびビジネスロジックソリューションへのコード呼び出しがここに配置されます。
5.ビジネスロジックソリューション-ビジネスルールはここに配置されます。
6.データアクセスソリューション-データベースとの間でデータを取得するためのコードがここに配置されます。
7.データ転送オブジェクトソリューション-次のように情報を転送するために使用されます。 7.1。 Webサービスソリューションとの間のUIソリューション。
7.2。 ビジネスオブジェクトソリューションとの間のWebサービスソリューション。
7.3。 データアクセスソリューションとの間のビジネスオブジェクトソリューション。

新しいシステムのベストプラクティスの概念を説明しましょう。1。Web
サービスソリューションの単体テスト。
2.ビジネスオブジェクトソリューションの単体テスト。
3.ビジネスロジックの単体テスト。
4.データアクセスソリューションの単体テスト。
5.単一責任の原則
6.オープン/クローズの原則
7.リスコフの置換の原則
8.インターフェースの分離の原則
9.依存性逆転の原則

新しいシステムの目標
デザインパターン、WCF、TDD、Rhino Mocks、Expression Blend 3、Visual Studio 2010、TFSを学びながら、システム全体に統合テストをラップした単体テストをラップしたクリーンなコードを生成できることを願っています。 2010.また、このシステムを、Railsなどの将来の新しい言語を学習するためのリファレンスとして使用したいと思います。

質問
1.私がレイアウトしたものに基づいて、誰かが私のアーキテクチャに問題を抱えていますか?より良いアイデアはありますか?
2.記載されていない、従うべき特定のベストプラクティスはありますか?
3.従うべきではない、私がリストした特定のベストプラクティスはありますか?

お時間をいただきありがとうございます!

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

code-generation - 堅牢なコード フレームワーク?

私は自分のソフトウェアをより強固なものにするコードを書くのが嫌いです。これは、フレームワークが行うべきことです。では、コードを強化するコード「拡張」ユーティリティを知っている人はいますか?

このようなものを自分で作成する必要がある場合は、次のように機能します。デバッグ フラグを使用してコードをコンパイルすると、各メソッドに「固定化」コードが自動的に追加されます。

try-catch でコードをワープし、キャッチに Debug.Assert(true) を配置します (例外が元の場所でキャッチされるように)。

各メソッドのエントリをログに記録し、引数の "ToString()" 値を出力して、何が起こっているのかを追跡できるようにします。

各引数の null を確認します。

「IsValid」フレームワークを使用して、オブジェクト自体と各引数をチェックします。ここで、IsValid() は、その期待が真であることをオブジェクトが宣言する方法です (たとえば、私が TableOfContentsEntry の場合、IsValid である Book に常にあることを期待します)。 () であり、IsValid() である Page を指します。

では、なぜですか?

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

nhibernate - SOLID SRP および FluentNhibernate エンティティ

このクラスはhttp://wiki.fluentnhibernate.org/Getting_startedから のもので、いくつかのロジックが含まれており、これは単一責任の原則に違反していると思います。どう思いますか?どうやってこれを解決しますか?

私を悩ませているもう 1 つのことは、nhibernate では常に IList が使用され、機能の少ない IEnumerable が使用されない理由です。

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

c# - 単一責任原則(SRP)と私のRPGのクラス構造は「奇妙」に見えます

私はただ楽しみのために、そしてSOLIDの原則についてもっと学ぶためにロールプレイングゲームを作っています。私が最初に注目していることの1つは、SRPです。ゲーム内のキャラクターを表す「キャラクター」クラスがあります。名前、体力、マナ、能力スコアなどがあります。

さて、通常は、Characterクラスにもメソッドを配置するので、次のようになります...

しかし、SRPのために、すべてのメソッドを別のクラスに移動することにしました。そのクラスに「CharacterActions」という名前を付けたところ、メソッドのシグネチャは次のようになりました...

ここで、使用しているCharacterオブジェクトをすべてのCharacterActionsメソッドに含める必要があることに注意してください。これはSRPを活用するための正しい方法ですか?これは、カプセル化というOOPの概念に完全に反しているようです。

それとも私はここで完全に間違ったことをしていますか?

これについて私が気に入っていることの1つは、私のCharacterクラスがその機能を非常に明確にしていることです。これは、単にCharacterオブジェクトを表しているだけです。

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

c# - C# コードの SOLIDness をどのように測定できますか?

C# コードのSOLID性を測定するために、どのような指標があり、どのツールが存在しますか? または、原則が最も有害に違反している場所を示すツールはありますか?

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

c# - 優れたコードを示す実世界のオープンソース c# アプリケーション

私はSOLIDの原則について読んでいて、実際の製品でSOLIDの原則が使用されていることを示す、DOTNETに優れた大規模なオープンソースアプリケーションまたはプロジェクトがあるかどうか疑問に思っていました.

優れたコーディング サンプルと見なされるオープンソース プロジェクトが他にある場合は、それらも見てみたいと思います。