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

ソフトウェア設計による問題の解決とソリューションの計画に関する質問。

5
C ++での例外の慣用的な使用法
isocpp.org例外よくある質問の状態 関数の使用におけるコーディングエラーを示すために、throwを使用しないでください。assertまたはその他のメカニズムを使用して、プロセスをデバッガーに送信するか、プロセスをクラッシュさせて開発者がデバッグするためのクラッシュダンプを収集します。 一方、標準ライブラリはstd :: logic_errorとそのすべての派生物を定義します。これらは、他のことに加えてプログラミングエラーを処理することになっているように思えます。プログラミングエラーではなく、空の文字列をstd :: stof(invalid_argumentをスローします)に渡しますか?「1」/「0」以外の文字を含む文字列をプログラミングエラーではなくstd :: bitset(invalid_argumentをスローします)に渡しますか?プログラミングエラーではなく、無効なインデックス(out_of_rangeをスローします)でstd :: bitset :: setを呼び出していますか?そうでない場合、テストするプログラミングエラーは何ですか?std :: bitset文字列ベースのコンストラクタはC ++ 11以降にのみ存在するため、例外の慣用的な使用を念頭に置いて設計されている必要があります。一方、logic_errorは基本的にまったく使用すべきではないと言われました。 例外が頻繁に発生する別のルールは、「例外的な状況でのみ例外を使用する」です。しかし、ライブラリ関数はどのような状況が例外的であるかをどのように認識するのでしょうか?一部のプログラムでは、ファイルを開けないことは例外です。他の人にとっては、メモリを割り当てることができないことは例外ではないかもしれません。そして、その間に何百ものケースがあります。ソケットを作成できませんか?接続できない、またはソケットまたはファイルにデータを書き込むことができませんか?入力を解析できませんか?例外的かもしれませんが、そうでないかもしれません。関数自体は、一般的に間違いなく知ることができず、どの種類のコンテキストが呼び出されているのかわかりません。 だから、特定の機能に例外を使用するかどうかをどのように決定するのですか?実際には一貫性のある唯一の方法は、すべてのエラー処理に使用するか、または何もしないことです。標準ライブラリを使用している場合、その選択は私のために行われました。
16 design  c++  exceptions 

2
クリーンコードの原則を関数型言語に適用する
現在、Robert MartinのClean Codeを読んでいます。私はそれが素晴らしいと思うし、OOコードを書くとき、私は彼の教訓を心に抱いている。特に、意味のある名前の小さな関数を使用するという彼のアドバイスは、コードの流れをよりスムーズにするものだと思います。次の引用文で簡単に要約できます。 [W] eは、TO段落のセットであるかのようにプログラムを読むことができます。各段落は、現在の抽象化レベルを記述し、次のレベルで後続のTO段落を参照します。 (クリーンコード、37ページ:「TO段落」は、不定詞で表明された文で始まる段落です。「Xを実行するには、ステップYとZを実行します。」「Yを実行するには、...」など。 ) 例えば: RenderPageWithSetupsAndTeardownsでは、ページがテストページであるかどうかを確認し、テストページである場合は、セットアップとティアダウンを含めます。どちらの場合でも、ページをHTMLでレンダリングします 私は自分の仕事のために機能的なコードも書きます。この本のMartinの例は、まるで段落のセットであるかのように読んでおり、非常に明確です。 。 Haskell標準ライブラリから例を取り出します: maximumBy :: (a -> a -> Ordering) -> [a] -> a maximumBy _ [] = error "List.maximumBy: empty list" maximumBy cmp xs = foldl1 maxBy xs where maxBy x y = case cmp x y of GT -> …

6
オブジェクト指向設計における疎結合
私はGRASPを学ぼうとしていますが、これは低結合について説明されています(ここ3ページにあります)。 クラスのメソッドaddTrackについて考えてみましょうAlbum。2つの可能なメソッドは次のとおりです。 addTrack( Track t ) そして addTrack( int no, String title, double duration ) どの方法で結合が減少しますか?Albumクラスを使用するクラスはTrackクラスを知る必要がないので、2番目のものはそうします。一般に、メソッドへのパラメーターは、java。*パッケージの基本型(int、char ...)およびクラスを使用する必要があります。 私はこれに反対する傾向があります。私はさまざまな理由addTrack(Track t)よりも優れていると信じていますaddTrack(int no, String title, double duration): メソッドのパラメーターはできるだけ少ないほうが常に良いです(Uncle BobのClean Codeによれば、なしまたは1つ、できれば2、場合によっては3、特別な場合は3、3つ以上はリファクタリングが必要です-これらはもちろん推奨ルールではありません) 。 場合addTrackのインタフェースの方法であり、要件がいることを必要とするTrackより多くの情報(たとえば年またはジャンル)を持っている必要があり、インターフェイスを変更する必要があるので、この方法は、別のパラメータがサポートする必要があること。 カプセル化が壊れています。addTrackがインターフェイス内にある場合、の内部を知らないはずTrackです。 実際には、多くのパラメーターを使用して、2番目の方法でより結合されています。仮定noから変更するパラメータニーズをintへlong以上があるのでMAX_INT、トラック(または何らかの理由で)。Trackメソッドとメソッドの両方を変更する必要がありますが、メソッドaddTrack(Track track)のみTrackが変更される場合は変更します。 4つの引数はすべて実際には相互に関連しており、それらの一部は他からの結果です。 どのアプローチが良いですか?

6
HTTPセッションまたはデータベースアプローチ
ショッピングカートの設計に取り組んでおり、セッションまたはデータベースのいずれかにショッピングカートを保存する必要がありますが、どちらのアプローチが最適かはわかりません。 ユーザーはログインしておらず、カートに商品を追加していません(匿名ユーザー) ユーザーがログインし、カートに製品を追加しています。 ユーザーがログインせずにWebショップにアクセスして製品を追加するだけでなく、チェックアウトプロセスに行かない可能性が高いため、最初のケースは私を混乱させます。 ただし、ショッピングカートを作成して保存するには、このユーザーのショッピングカートを作成する必要があります。2つのオプションがあります。 ユーザーが製品を追加するときに、データベースにカートを作成し、このカートをこのユーザーに関連付けます。ログインした瞬間に、このカートをログインしているユーザーに移動します。 ユーザーがログインしてデータベースにカートを作成し、ログインしたユーザーをこのカートにユーザーと関連付けた場合、カートを作成し、製品を追加してセッションに保存します。 データベースベースのカートシステムとセッションベースの両方に肯定的側面と否定的側面があることを知っていますが、次の点を考慮するためにどちらが最善のアプローチであるかはわかりません 拡張性 柔軟性 拡張性 アプリケーションは速度に注意する必要があります この側面に関する入力を探して、パスを決定します。

3
PHPとMySqlで金額を処理する方法は?
MySQLデータベースの上にPHPで記述されたレガシーコードの巨大な山を継承しました。私が気づいたのは、アプリケーションdoublesがデータの保存と操作に使用することです。 今、私doubleは丸め誤差のために金銭的操作に適していない方法について言及している多くの投稿に出会いました。しかし、PHPコードで金銭的な値を処理し、MySQLデータベースに保存する方法の完全なソリューションにまだ出会っていません。 PHPで具体的にお金を処理する場合のベストプラクティスはありますか? 私が探しているものは: データベースにどのようにデータを保存する必要がありますか?列タイプ?サイズ? データが通常の加算、減算でどのように処理されるべきか。乗算または除算? いつ値を丸めるべきですか?ある場合、どの程度の丸めが許容されますか? 大きな金額と低い金額の処理に違いはありますか? 注:日常生活で金銭的価値に遭遇する可能性 のある非常に単純化されたサンプルコード(単純化のためにさまざまなセキュリティ上の懸念は無視されました。もちろん、実際の生活ではこのようなコードは使用しません): $a= $_POST['price_in_dollars']; //-->(ex: 25.06) will be read as a string should it be cast to double? $b= $_POST['discount_rate'];//-->(ex: 0.35) value will always be less than 1 $valueToBeStored= $a * $b; //--> any hint here is welcomed $valueFromDatabase= $row['price']; //--> price …

9
コンストラクターまたはセッターメソッドを使用しますか?
私はActionクラスを持っているUIコードで作業しています、このようなもの- public class MyAction extends Action { public MyAction() { setText("My Action Text"); setToolTip("My Action Tool tip"); setImage("Some Image"); } } このActionクラスが作成されたとき、Actionクラスはカスタマイズできないと想定されていました(ある意味で、そのテキスト、ツールチップ、またはイメージはコードのどこでも変更されません)。現在、コード内の特定の場所でアクションテキストを変更する必要があります。そのため、ハードコーディングされたアクションテキストをコンストラクターから削除し、引数として受け入れるように同僚に提案しました。以下のこのコードのようなもの- public class MyAction extends Action { public MyAction(String actionText) { setText(actionText); setTooltip("My Action tool tip"); setImage("My Image"); } } ただし、setText()メソッドは基本クラスに属しているため、アクションインスタンスが作成された場所にアクションテキストを渡すために柔軟に使用できると考えています。そうすれば、既存のMyActionクラスを変更する必要はありません。したがって、彼のコードは次のようになります。 MyAction action = new MyAction(); //this creates action …

5
並行性とマルチスレッドアプリケーションについて学ぶための最良のリソースは何ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 4年前に閉鎖されました。 ロックされています。この質問は現在、新しい回答やインタラクションを受け入れていません。詳細をご覧ください。 マルチスレッドアプリケーションと同時プログラミングに関しては、知識のギャップが大きいことに気付きました。私は過去にいくつかの基本をカバーしましたが、そのほとんどは私の心から消えてしまったようです。そして、それは間違いなく私がもっと知りたいと思っている分野です。 並行アプリケーションの構築について学ぶための最良のリソースは何ですか?私は非常に実用的な志向の人間なので、もし本に具体的な例が含まれている方が良いのですが、私は提案を受け入れます。私は個人的には擬似コードまたはC ++で作業することを好み、ゲーム開発への傾斜が最適ですが、必須ではありません。

3
C#とF#を一緒に使用すべきか
同じプロジェクトでC#とF#を一緒に使用できることは知っていますが、それが良いアイデアかどうかはわかりません。 2つの非常に異なるコーディングスタイル(機能的とOOP)を混在させると、デザインの凝集性が失われる可能性があります。これは正しいです?
16 design  f# 

8
機能と機能[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 多くの場合、PM(プロジェクトマネージャー)が機能について話すと聞きます。そして、私はそれらを区別するためにとても困惑しています。機能がユーザーストーリーに相当すると考えることもあります。「ユーザーとして、ボブは自分の支払いのリストを見ることができるはずです」などのように、彼らはそれを機能と呼びます。「Webアプリケーション経由でSMSを送信する機能」など、サブシステムと同じくらい大きくなる場合があります。一方、関数は「数字入力用の数字のグループ化を実装する」タスクと同じくらい小さくなりますが、CRUD操作全体と同じくらい大きくなる場合があります。 私の質問は、どのように機能と機能を区別することができますか?

5
MVC:コントローラーは単一責任原則を破りますか?
単一責任原則は、「クラスには変更の理由が1つあるべきだ」と述べています。 MVCパターンでは、コントローラーの仕事は、ビューとモデルの間を仲介することです。GUIでユーザーが行ったアクションをレポートするためのビューのインターフェースを提供し(ビューの呼び出しを許可するcontroller.specificButtonPressed()など)、データを操作したり操作を呼び出すためにモデルの適切なメソッドを呼び出すことができます(例model.doSomething()) 。 この意味は: ビューにユーザーアクションを報告するための適切なインターフェイスを提供するために、コントローラーはGUIについて知る必要があります。 また、モデルの適切なメソッドを呼び出すことができるように、モデルのロジックについて知る必要があります。 つまり、GUIの変更とビジネスロジックの変更という2つの理由があります。 GUIが変更された場合(新しいボタンが追加された場合など)、コントローラーは、ユーザーがこのボタンを押したことをビューが報告できるように新しいメソッドを追加する必要がある場合があります。 また、モデルのビジネスロジックが変更された場合、モデルの正しいメソッドを呼び出すためにコントローラーを変更する必要があります。 そのため、Controllerには2つの変更可能な理由があります。SRPを壊しますか?

22
どの時点でパフォーマンスについて考える必要がありますか?
アプリケーションを構築しているとき、これが特定の機能を実行または実装する最良の方法であるかどうかを常に問いかけています。多くの場合、パフォーマンスに関する「馬の前にカートを置く」べきではないというコメントを受け取るために、stackoverflowまたはフィードバックを希望する別のフォーラムに質問を投稿します。ほとんどのプログラマーは、アプリケーションが終了するまでパフォーマンスについて本当に考えないのでしょうか、それともパフォーマンスがまったく許容できないのでしょうか?? つまり、開発環境は本番環境とは異なり、開発用ラップトップからの結果に完全に依存するべきではないことを理解しています...しかし、他のものよりも優れたパフォーマンスをもたらすプラクティスとテクニックがあります。 開発プロセス全体でパフォーマンスを考慮することは悪い習慣ですか?パフォーマンスが実際に低下するまで、これらの考慮事項をオフにする必要がありますか?? 更新 明確にするために、機能の一部を検討している、または作業しようとしている状況について説明しています。実装にはいくつかの方法がありますが、各実装がどの程度拡張できるかはよくわかりません。また、よく知らないテクニックもいくつかあります。小規模ではいずれのアプローチでもおそらく適切ですが、大規模では一部のアプローチが維持され、一部は維持されません。多くの場合、私が意見やガイダンスを求めるとき、応答は次のとおりです。後で心配する...

4
取り組むべき設計演習はどこにありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または詳細な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私は問題解決スキルを練習し続けることが重要だと感じています。私自身のミニプロジェクトを書くことは一つの方法ですが、別の方法はオンラインに投稿された問題を解決しようとすることです。巧妙なアルゴリズムを適用して解決する必要のある興味深いプログラミングクイズをオンラインで簡単に見つけることができます-Project Eulerはよく知られた例の1つです。 ただし、多くの実際のプロジェクトでは、ソフトウェアの設計(特に初期段階)に大きな影響があり、後の段階では単純なアルゴリズムほど簡単には調整できません。これらのスキルを向上させるために、設計上の問題のコレクションを探しています。 「設計」と言うとき、ソフトウェアソリューションの抽象的な設計を意味します。たとえば、どのモジュールが存在し、それらの間に依存関係があるのか​​、プログラム内でデータがどのように流れるのか、データベースなど。設計上の問題は、プロジェクトの初期段階で解決することが重要な問題ですが、その解決策は、コードが1行もないホワイトボード図です。 もちろん、この種の問題には単一の正しい解決策はありませんが、問題にアプローチするために使用される可能性のある典型的な解決策の長所と短所も表示する場所には特に満足しています。

6
「コード」をデザイナーから遠ざけますか?
私は友人とかなりの数のプロジェクトを構築していますが、私たちは常に同じ落とし穴に何度も訪れます。PHP、Javascript、その他すべて(CSSとHTMLも知っている)の書き方を知っているので、実際の機能を構築する際にほとんどの作業を行うことができます。しかし、彼はできませんが、私がやっとできること、つまりサイトを設計することはできます。 しかし、毎回、私たちは問題に出くわします。彼はコードの書き方を知らないので、一般に開発がかなり遅くなります。現時点ではこれが私たちのワークフローです: 機能を考え出す 彼は、フロントエンドのデザインを構築します(配置する場所、外観など)。 彼は私に完全なテンプレートを送信します(PinegrowからのHTMLエクスポート) 彼が行った変更を探し、実際のサイトに実装します(数週間前からCakePHPを使用しています)。 何かが意図したとおりに動作しない場合(たとえば、何らかの理由で計画どおりに動作しなかった場合など)、問題を自分の側で修正し、テンプレートを送り返します すすぎ繰り返し 想像できるように、このプロセスは骨の折れるほど遅く、非効率的です。私の質問は、このプロセスをよりスムーズに進めるにはどうすればよいですか?Reactを使用し、RESTfulを使用する必要があること、およびそうでないことについて多くのことを見てきましたが、CakePHPを使用したいと考えています。いくつかの人々はそれについていくつかの有用なリソースに私を導くことができますか?私はこれをしばらく探していましたが、これに対するまともな解決策には至りませんでした。 基本的に、私のパートナーができることは、サイトの設計だけです。彼はDocker(私は常にDockerを使用しています)、PHP、Javascript、その他ほとんど何も使用できません(彼はCSSを知っていますが、ほとんどWYSIWYGエディターで動作します)興味がない(だから私はそれを尊重している)。私はそれが非常に重要なことだと思うので、ここの誰かが私を助けてくれることを願っています(そしておそらく他の人はこの質問で後で来ます)。
15 design  cakephp 

6
戦略パターンの利点
if / thenの場合にコードを書くことができるのに、なぜ戦略パターンを使用するのが有益なのですか? 例:TaxPayerクラスがあり、そのメソッドの1つが異なるアルゴリズムを使用して税金を計算します。では、なぜif / thenケースを持ち、戦略パターンを使用する代わりに、そのメソッドで使用するアルゴリズムを見つけられないのでしょうか?また、なぜTaxPayerクラスの各アルゴリズムに個別のメソッドを実装できないのですか? また、実行時にアルゴリズムが変更されるとはどういう意味ですか?

5
If Else-繰り返されるコードロジック
私の上司は、特定のロジックを持つプロジェクトをくれました。ナビゲーターが製品に到着するまで多くの場合をナビゲートする必要があるWebページを開発する必要があります。 これは、サイト内のナビゲーションのパススキームです。 重要! 製品ページで、ナビゲーターは必要なフィルターを選択できます。 Aの場合、彼/彼女はB(そしてもちろんC)またはCを通過して製品に到達しなければなりません。 Bの場合、彼/彼女はCを通過して製品に到達しなければなりません。 Cの場合、彼/彼女は直接製品に到達します。 もちろん、AIから開始する場合、最長パスをたどり、製品に到達すると3つのアクティブなフィルターがあります。 これまで、私は次のコードを開発しましたが、これは正常に機能します。 if filter_A if filter_B filter_C() .. else .. else filter_C .. else .. else if filter_B filter_C() .. else .. else filter_C() .. else .. この状況で、より専門的なプログラマが何をしたかを尋ねるためにここにいます。私はDRYの原則を尊重しませんでした。私はそれが気に入らず、この種のロジックを開発する別の方法を知りたいです。 関数のコードのすべてのセクションを分割することを考えましたが、この場合は良いアイデアですか?

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