タグ付けされた質問 「design-patterns」

設計パターンは、ソフトウェア設計で一般的に発生する問題に対する一般的な再利用可能なソリューションです。

6
グローバルに一意のメッセージIDを使用してコードを検索可能にする
バグを見つけるための一般的なパターンは、このスクリプトに従います。 たとえば、出力がない、プログラムがハングしているなど、奇妙な点を観察してください。 ログまたはプログラム出力で関連するメッセージを見つけます。たとえば、「Fooが見つかりませんでした」。(以下は、これがバグを見つけるためのパスである場合にのみ関連します。スタックトレースまたは他のデバッグ情報がすぐに利用できる場合は、別の話です。) メッセージが印刷されるコードを見つけます。 Fooが画像を最初に入力する(または入力する必要のある)場所と、メッセージが印刷される場所の間でコードをデバッグします。 この3番目のステップでは、コード内に「Coo not find Foo」(またはテンプレート化された文字列Could not find {name})が印刷される場所が多くあるため、デバッグプロセスが停止することがよくあります。実際、スペルミスが何度かあったとすると、実際の場所を見つけるのに非常に速くなりました。システム全体で、そして多くの場合世界中でメッセージが一意になり、関連する検索エンジンがすぐにヒットしました。 これから明らかな結論は、コード内でグローバルに一意のメッセージIDを使用し、メッセージ文字列の一部としてハードコーディングし、コードベース内に各IDが1つしか存在しないことを検証する必要があるということです。保守性の観点から、このコミュニティはこのアプローチの最も重要な長所と短所をどのように考えていますか?これをどのように実装するか、そうでなければ実装が必要にならないことを保証しますか?(ソフトウェアには常にバグがあると仮定して)

9
静的メンバー以外のユーティリティクラスはC ++のアンチパターンですか?
クラスに関係のない関数をどこに置くべきかという質問は、C ++でクラス内のユーティリティ関数を結合するのが理にかなっているのか、それとも名前空間にフリー関数として存在するのかという議論を巻き起こしました。 私は、後者のオプションが存在しないC#のバックグラウンドから来ているため、私が書いている小さなC ++コードで静的クラスを使用する傾向があります。しかし、その質問に対する最高の投票された回答といくつかのコメントは、静的なクラスがアンチパターンであることを示唆していても、無料の関数が優先されるべきであると述べています。C ++ではなぜそうなのですか?少なくとも表面的には、クラスの静的メソッドは、名前空間の自由な関数と見分けがつかないように見えます。なぜこのように後者を好むのですか? ユーティリティ関数のコレクションが何らかの共有データを必要とする場合、たとえば、プライベート静的フィールドに保存できるキャッシュなど、状況は異なりますか?

10
イディオムとデザインパターンの違いは?
イディオムとデザインパターンの違いは何ですか?これらの用語はどこかで重複しているようです。正確には、私にはわかりません。それらは交換可能ですか?何を使うべきですか? ここでは C ++イディオムのリストです。それらをデザインパターンと呼ぶことはできますか? ウィキペディアでは、 低レベルの設計パターンとしてのイディオムのプログラミング どういう意味ですか?何をしてない「低レベル」ここに意味ですか? この質問は別の質問からインスパイアされています:https : //stackoverflow.com/questions/7343531/are-the-some-design-patterns-language-dependent

6
コントローラーレイヤーに存在できるビジネスロジックの量。
アプリケーションのコントローラーコードで表されるビジネスロジックがある場合があります。これは通常、モデルから呼び出すメソッドやそれらを渡す引数を区別するロジックです。 これの別の例は、ビジネスルールのセットに従って、モデルから返されたデータをフォーマットまたはサニタイズするために機能するコントローラーに存在するユーティリティ関数のセットです。 これは機能しますが、災害といちゃつくかどうか疑問に思っています。コントローラーとモデル間で共有されるビジネスロジックがある場合、2つのレイヤーは分離できなくなり、コードを継承する人は、ビジネスロジック関連のコードの場所の不均一性によって混乱する可能性があります。 私の質問は、コントローラーでどのくらいのビジネスロジックを許可する必要があるか、また、ある場合、どのような状況ですか?

4
ドメインモデルの検証を配置する場所
ドメインモデル検証のベストプラクティスをまだ探しています。ドメインモデルのコンストラクターに検証を入れるのは良いですか?私のドメインモデル検証の例は次のとおりです。 public class Order { private readonly List<OrderLine> _lineItems; public virtual Customer Customer { get; private set; } public virtual DateTime OrderDate { get; private set; } public virtual decimal OrderTotal { get; private set; } public Order (Customer customer) { if (customer == null) throw new ArgumentException("Customer name must …

11
MVCの「C」は本当に必要ですか?
Model-View-Controllerパターンでのモデルとビューの役割は理解していますが、コントローラーが必要な理由を理解するのに苦労しています。 MVCアプローチを使用してチェスプログラムを作成していると仮定しましょう。ゲームの状態がモデルになり、GUIがビューになります。この場合、コントローラーは正確に何ですか? これは、たとえばタイルをクリックしたときに呼び出されるすべての関数を備えた単なる別のクラスですか?ビュー自体でモデルのすべてのロジックを実行しないのはなぜですか?

9
オブジェクト指向コードを書くとき、私は常にデザインパターンに従うべきですか?
オブジェクト指向プログラムに考えられる設計パターンはありますか?これは、最近、のDoorクラスの実装を見たためですLock。これはテストの一部であり、答えは、コードがNull Objectパターンに従っていることです。 class Lock { public: virtual void close() = 0; virtual void open() = 0; virtual bool is_open() const = 0; virtual ~Lock() { } }; class DummyLock : public Lock { private: DummyLock(); DummyLock(const DummyLock&) = delete; DummyLock& operator=(const DummyLock&) = delete; private: void close() { } void …

11
コンストラクターのみのサブクラス:これはアンチパターンですか?
私は同僚と議論をしていましたが、最終的にはサブクラス化の目的に関して直感が矛盾することになりました。私の直感では、サブクラスの主な機能がその親の限られた範囲の値を表現することであれば、おそらくサブクラスであってはならないということです。彼は反対の直観を主張しました:サブクラス化はオブジェクトがより「特定的」であることを表し、したがってサブクラス関係がより適切であるということです。 私の直感をより具体的に言うと、親クラスを拡張するサブクラスがあるが、サブクラスがオーバーライドする唯一のコードがコンストラクターである場合(そう、コンストラクターは一般に「オーバーライド」しないことを知っています。本当に必要だったのは、ヘルパーメソッドです。 たとえば、このやや現実的なクラスを考えてみましょう。 public class DataHelperBuilder { public string DatabaseEngine { get; set; } public string ConnectionString { get; set; } public DataHelperBuilder(string databaseEngine, string connectionString) { DatabaseEngine = databaseEngine; ConnectionString = connectionString; } // Other optional "DataHelper" configuration settings omitted public DataHelper CreateDataHelper() { Type dataHelperType = DatabaseEngineTypeHelper.GetType(DatabaseEngine); DataHelper …

11
各クラスの責任が1つだけであることを確認してください、なぜですか?
Microsoftのドキュメント、WikipediaのSOLIDプリンシペ記事、またはほとんどのITアーキテクトによると、各クラスに1つの責任のみを持たせる必要があります。誰もがこの規則に同意するように見える場合、誰もこの規則の理由について同意するように思われないので、私はその理由を知りたいです。 メンテナンスの改善を挙げている人もいれば、簡単なテストを提供したり、クラスをより堅牢にしたり、セキュリティを強化したりする人もいます。何が正しいのか、実際にはどういう意味ですか?なぜメンテナンスが改善され、テストが簡単になり、コードがより堅牢になるのですか?


6
「マッパー」は有効な設計パターンですか、それとも「工場」パターンのバリエーションですか?
私が見ている一般的なパターンは、Mapperパターンと呼ばれるDataMapperものです(混同しないでください)。これは、ある種の「生の」データソース(ADO.NET DataReaderやなどDataSet)を引数として受け取り、フィールドをマップします。ビジネス/ドメインオブジェクトのプロパティ。例: class PersonMapper { public Person Map(DataSet ds) { Person p = new Person(); p.FirstName = ds.Tables[0].Rows[0]["FirstName"].ToString(); // other properties... return p; } } アイデアは、Gateway / DAO / Repository / etcになります。返される前にマッパーを呼び出すので、基になるデータコンテナに対してリッチビジネスオブジェクトを取得します。 ただし、これは同一ではないにしても、ドメインオブジェクトを構築して返すFactoryパターン(とにかくDDDの用語)に関連しているようです。ウィキペディアによると、これは次のとおりです:DDDファクトリー: ファクトリ:ドメインオブジェクトを作成するメソッドは、代替の実装を簡単に交換できるように、専用のファクトリオブジェクトに委任する必要があります。 その引用から私が考えることができる唯一の違いは、「マッパー」が特定のクラスにキー設定されている間に、必要に応じて特別なタイプのオブジェクトを返すことができるようにDDDスタイルのファクトリーをパラメーター化できることです(たとえば、BusinessCustomer対ResidentialCustomer)そして翻訳のみを行います。 それで、これらの2つのパターンに違いはありますか、それとも異なる名前で本質的に同じものですか?

9
コーディング時に解析によって麻痺を克服するにはどうすればよいですか?
新しいプロジェクトを始めるとき、私はしばしばすぐに実装の詳細について考え始めます。「DataBaseHandlerはどこに配置しますか。どのように使用する必要がありますか?それを使用するクラスはいくつかの抽象スーパークラスから拡張する必要があります..?インターフェイスを使用する必要がありますか?を含むクラスで使用する抽象化のレベルリクエストを送信してデータを解析する方法は?」 拡張性と再利用性のためにコーディングしたいので、私は長い間行き詰まってしまいます。しかし、完全に実装する方法について過去の考えを得るのはほとんど不可能だと感じています。 そして、「ネジを締めて、やるだけだ!」と言うと、コードが整理されていないため、抽象化のレベルが混在しているなどの理由で、レンガの壁にすばやくぶつかります。 新しいプロジェクトを立ち上げながら、拡張性の高い論理/モジュール構造をセットアップするためのテクニック/方法は何ですか? - - EDIT - - まあ、これはすでに答えを受け入れるのが難しいタイプの質問ですが、いくつかのコンセンサスがあるかどうかを確認して、より多くのフィードバックを取得したいです。TDDは本当にクールに聞こえますが、率直に言って、JUnitなどの使用方法をもっと理解することを意味してきました。同時に、TDDのファンは、TDDに関連する1つの正当な点が特定の問題は、TDDが実際に設計の問題に対処していないように見えることです。確かに、TDDは自分がやりたいことを定義するのに役立ち、徐々にその方法を進めることができますが、ユニットテストをすべて通過できるさまざまな全体的なデザインパターン/構造があります。それだけです:単一のUNITSをテストします。私は少し混乱していると思います...私は知らない。多分、私' ありがとう!

6
iOSで大きくて不器用なUITableViewControllerを避ける方法は?
iOSでMVCパターンを実装するときに問題があります。インターネットを検索しましたが、この問題の良い解決策を見つけられないようです。 多くのUITableViewController実装はかなり大きいようです。私が見てきた例のほとんどは、することができますUITableViewController実装<UITableViewDelegate>と<UITableViewDataSource>。これらの実装は、大きくなっている大きな理由UITableViewControllerです。一つの解決策は、その実装別々のクラスを作成することです<UITableViewDelegate>と<UITableViewDataSource>。もちろん、これらのクラスにはを参照する必要がありUITableViewControllerます。このソリューションを使用する上で欠点はありますか?一般に、デリゲートパターンを使用して、他の「ヘルパー」クラスなどに機能を委任する必要があると思います。この問題を解決する確立された方法はありますか? モデルに含まれる機能やビューが多すぎないようにします。これはMVCパターンの基礎の1つであるため、ロジックは実際にはコントローラークラスにあるべきだと思います。しかし、大きな問題は次のとおりです。 MVC実装のコントローラーを、どのように小さな管理可能な部分に分割する必要がありますか?(この場合、iOSのMVCに適用) これを解決するための一般的なパターンがあるかもしれませんが、iOSのソリューションを具体的に探しています。この問題を解決するための良いパターンの例を教えてください。ソリューションが優れている理由を説明してください。

8
OOPは簡単になりますか、難しくなりますか?[閉まっている]
オブジェクト指向プログラミングの概念が何年も前にプログラマーに紹介されたとき、それは興味深く見え、プログラミングはよりきれいになりました。OOPはこんな感じでした Stock stock = new Stock(); stock.addItem(item); stock.removeItem(item); わかりやすい名前を付けるとわかりやすくなりました。 しかし、データ転送オブジェクト、値オブジェクト、リポジトリ、依存性注入などのパターンを持つOOPは、より複雑になりました。上記を実現するには、いくつかのクラス(例:抽象、ファクトリ、DAOなど)を作成し、いくつかのインターフェイスを実装する必要があります。 注:コラボレーション、テスト、統合を容易にするベストプラクティスに反対するわけではありません

4
Javascriptを使用したデザインパターンの重要性、NodeJsなど
Javascriptは今後数年間でWebのユビキタスプログラミング言語であるように思われ、新しいフレームワークが5分ごとにポップアップし、イベント駆動型プログラミングがサーバー側とクライアント側の両方をリードしています。 Javascript開発者として、従来のデザインパターンを他の言語/環境よりも重要と考えていますか? Javascript開発者が定期的に使用している上位3つのデザインパターンに名前を付け、それらがJavascript開発にどのように役立ったかの例を示してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.