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

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

7
初日から「未知の未知の」バグに備えて設計とコードを準備する最良の方法は何ですか?
私はただ疑問に思っています。「未知の未知の」バグ、特に最後の数分に頻繁に発生する厄介でランダムなバグを回避するための実用的な方法やテクニック、さらにはこれらのことを最小限のレベルに保つためのトリックはありますか。新しいプラットフォームで作業するとき、または特定の新しいテクノロジーを初めて使用するとき、設計とコードが十分に堅牢であることをどのように正当化するのですか?またはこれらのことは時間と間違いによってのみ学ぶことができますか? (ほとんどの作業時間にC ++を使用しています) ありがとう!

9
国際化:何について考えるべきか?
私は、を聞いていたジョンスキートの話最後のStackOverflowのDev日で、彼は国際化に関する私の好奇心をそそりました。 ワッフル作成プログラムが完了しているか、またはまだ進行中で、他の国に配布したいとします。国際化に関してどのようなことを心配する必要がありますか?自明ではないが簡単な落とし穴は何ですか?

2
インターフェイスのプロバイダーは、テスト用のモック実装も提供する必要がありますか?
単体テストで発見されたはずのバグについて、前回の統合テストで多くの時間を無駄にしました。問題は、呼び出したインターフェイス/サービスが予期したとおりに動作せず、ユニットテストがこの問題を見つけられなかったということでした。ユニットテストのためにそのインターフェイスをモックしたため、モックは当然、インターフェイスが何を間違って解釈するかに基づいていました。行う。インターフェイスの説明/仕様(簡潔なJavaDocコメント)があいまいであり、私たちの誤解の原因となったため、今では、インターフェイスを提供してくれた親愛なる同僚に少し怒る可能性があります。一方、同じ同僚がインターフェースのモック実装を提供してユニットテストで呼び出すことができれば、問題は回避できると思いました。 さて、共有インターフェースを提供して使用するチーム間でモックオブジェクトの作成を整理する上でのベストプラクティスは何でしょうか。あなたの経験は何ですか?

6
絵やアートのスキルを学んだことはありますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 6年前休業。 技術者以外の人が大きなアイデアを実行したい場合は、「コーディングを学ぶだけ」とアドバイスすることがよくあります。ただし、プログラマーとしては、バックエンドやCMSなどのWebサイトを作成することに長けている場合がありますが、見栄えを良くすることへの大きなニーズはまだあります。通常、クリップアートやテンプレートなどを活用し、いくつかの画像編集を行うことができます。でも、自分でオリジナルのアートを描くことができれば、大きなアドバンテージになると思います。 だから私の質問は、ここの誰かが彼らのプロジェクトのデザイン面を助けるために彼らのアートスキルをブラッシュアップしようとしたのですか?高校時代から「常に」アートが上手だったり、少なくとも絵が上手だったりする人もいると思いますが、絵を描くのが苦手だった人から、プロダクションに入ったオリジナルのアート作品を定期的に完成させる人まで、興味があります。サイトまたはアプリケーションのフロントエンド。

3
概念実証のシュートアウトを行うための最良の方法は何ですか?
私たちの会社が管理しているソフトウェアの新しいリリースに備えて、私はスケーラビリティの問題を解決するための本当に良いアプローチであると私が信じるものに取り組んできました。私は、紙面上のデザインが実際に私が望んでいることを検証するために、概念実証をまとめるつもりです。チームに説明すると、上司は反対の提案をしました。これは、問題のある領域を説明する方法に一部影響を受けています。上司はまた、代替案を評価するために2つの概念実証を行うという私の提案を受け入れました。 それでは、概念実証のシュートアウトを実行するための最良の方法は何ですか?ソリューションの評価に使用している客観的基準と主観的基準の両方があります。リンゴとこれらのかなり異なるアプローチのリンゴを比較していることを確認したいと思います。 スループットとサイズに関する要件があります。つまり、1秒あたり特定の数のオブジェクトを処理し、そのレートを1時間維持する必要があることがわかります。 スケーラビリティを評価する必要があります(コアを追加したり、オブジェクトの数を増やしたりして) 開発のしやすさ(主観的)を評価する必要がある アルゴリズムを理解するのがいかに簡単かを評価する必要があります(主観的) 私は物事がどのように傾くかについて私の理論を持っていますが、それが私の結果に影響を与えたくありません。このプロセスで客観性を維持する方法に関するあらゆる意見、および私が検討する必要があるかもしれないことは、大いに感謝されます。

4
ネストタイプは悪い習慣と見なされますか?
タイトルに示されているように、ネストタイプ(クラスの列挙型や構造体など)は悪い習慣と見なされていますか?Visual Studioでコード分析を実行すると、次のメッセージが返されます。 警告34 CA1034:Microsoft.Design:タイプ 'ClassName.StructueName'をネストしないでください。または、外部から見えないようにアクセシビリティを変更します。 ただし、コード分析の推奨事項に従うと、単一のクラスにのみ適用されるか、またはそのクラスでのみ使用される可能性のある構造体および列挙型がアプリケーション内に多数存在する傾向があることがわかりました。そのような場合、その場合はタイプsinをネストするのが適切でしょうか、それともより良い方法がありますか?

8
GUIデザイナーを使用するか、デスクトップ用に自分で作成しますか?
プログラムのGUIを作成することは、常に困難で憂鬱でイライラする作業でした。どの言語でもかまいません。欲しいものを手に入れるのは非常に難しいです。特に、Javaのようなコンパイルされた言語では、変更のビルドに1〜2分かかります。 その結果、一部のプロジェクトでGUIデザイナーを使用することが増えています。確かにいくつかのスパゲッティコードがありますが、設定と「これはXで設計されました」というメモを残している限り、これを行うことに抵抗はありません。 これはGUIを設計するための大丈夫な方法ですか?さらに重要なことに、これはほとんどの人がすることですか?それとも、ただ座ってそれを書き出す一般的な方法ですか?

1
最良のラッピング戦略は何ですか?
私は外部ツールを統合するつもりです(私の特定のケースではffmpegですが、実際には、そのタスクが実行時間の長いものである限り、何でもかまいません)。このツールには、多くのコマンドラインパラメータがあります。 今のところ、私はそれを使って簡単なことをしましたが、それが私に返すことができるすべての情報を埋め込むために、クラスの大量の書き込みをすでに必要としています。 私は今、それをパラメータの束を送信することであっても、より複雑なタスクに直面し、可能性のあるエラーを処理するために。 それで、そのための最良の方法は何ですか? 可能なすべてのオプションを含むクラスを作成します commons-cli / CliBuilder / OptionParserの逆の同等物に依存 ユーザー入力からすべてのオプションを直接書き込む オビワンケノービパワー(または私が知らないことすべて) 私はそれを一般的ではない言語で行うことに注意してください(私のために、それはCoffeeScriptとluaの間の絶望的で無菌の結合のように見えるので、それが何であるかを私に尋ねないでください)、結果として、フレームワークで行うことはできません私が使用する言語で欲しいもの。
8 design 

5
エラーをキャッチするためにコンパイラーに依存するよりも良い戦略はありますか?
私はしばらくCとC ++でプログラミングをしてきましたが、私は専門家とは程遠いです。しばらくの間、単体テスト、テスト駆動設計、コードレビューなど、さまざまな戦略を使用してコードを開発してきました。 私がBASICで最初のプログラムを書いたとき、実行できないことを見つける前に長いブロックを入力しましたが、デバッグするのは悪夢でした。だから私は少し書き、それをテストすることを学びました。 最近では、小さなコードを繰り返し記述してから、コンパイラーを使用してすべての間違いを見つけることがよくあります。タイプミスを拾えば問題ありませんが、コンパイルするためにパラメータタイプなどの調整を開始すると、デザインを台無しにすることができます。また、構文のチェックにのみ使用する必要がある場合に、コンパイラーが設計プロセスに侵入しているようです。 私のプログラムをより良くするために、コンパイラーに過度に依存する危険があります。これより良い戦略はありますか? 少し前に、追加のヘッダーファイルでもプロトタイプを指定したCコンパイラのタイプを開発している会社に関する記事を漠然と覚えています。異なる方法で2回定義する必要がある場合は、API定義の不整合を見つけやすくなるという考えでした。
8 design  tools  builds 

5
ライブラリに求められる基本原則は何ですか?
プログラミング言語で好きな構文と機能について話します。ここで、お気に入りの(または任意の)言語のライブラリで、コアとなる原則または機能についてお尋ねしますか? 例として、リスト+ =リストエレメントのみを許可するのではなく、リスト+ = anotherListを追加することが有効です(ただし、これは悪い考えと見なされる場合もあります)。

5
ユーザーが作成したドキュメントをバージョン管理する方法
本質的にXML文字列としてデータベースに保存されるオンラインドキュメントがあります。 ユーザーのためにドキュメントのバージョン管理を実装する方法を考えています。そのユーザーはドキュメントの以前のバージョンに戻ることができます。 更新私の場合、何十万ものユーザーがいるWebアプリケーションです。ユーザーは無制限のドキュメントを保存できます。ドキュメントのXMLは、MySQLのBlobフィールドに格納されるため、小さくはありません。結局、私はどういうわけか限界を制限する必要がありますが、それはすべて一緒に異なるトピックです。 これにアプローチする標準的な方法はありますか?バージョン間の違いのみを保存する必要がありますか?他に考慮すべきことは何ですか?

3
前提条件の確認
私は、クライアントが設計上の契約の最後に留まっていることを保証する目的で、入力を検証するためのランタイムチェックを行うかどうかという質問に対する確かな答えを見つけたいと思っていました。たとえば、単純なクラスコンストラクターを考えます。 class Foo { public: Foo( BarHandle bar ) { FooHandle handle = GetFooHandle( bar ); if( handle == NULL ) { throw std::exception( "invalid FooHandle" ); } } }; この場合、ユーザーはFoo有効ななしでを作成しようとするべきではないと主張しますBarHandle。がコンストラクタのbar内部で有効であることを確認するのは適切ではないようですFoo。そのFooコンストラクタに有効な が必要なことを単純に文書化した場合BarHandle、それで十分ではありませんか?これは、契約による設計の前提条件を強制する適切な方法ですか? これまでのところ、私が読んだことはすべて、これについてさまざまな意見があります。50%の人がそれbarが有効であることを確認すると言うようですが、他の50%は私がそれをすべきではないと言っています。たとえば、ユーザーBarHandleが正しいことを確認したが、2番目の(そして不要な)チェックを行う場合を考えてください。もFooコンストラクタの内部で行われています。

7
エントリポイントが1つもないコードを詳しく調べるにはどうすればよいですか?
実行フローを追跡できる単一のエントリー・ポイントがないエンタープライズJavaプロジェクトで作業しています。一部のプロジェクトには数百のクラスがあり、プロジェクトに機能を追加するように求められたとき、コードのどこから始めればよいか迷うことがよくあります。 時間を無駄にすることなく機能をすばやく実装できるように、そのようなプロジェクトに飛び込むための最良の方法は何ですか。

2
ネストされたコレクションをよりエレガントに処理する方法はありますか?
私の質問はむしろデザインの質問です。私のプログラムでは、次のようなデータ構造に到達しました。 private ConcurrentHashMap<A, ConcurrentHashMap<B, ConcurrentHashMap<Integer, C>>> services = new ConcurrentHashMap<A, ConcurrentHashMap<B, ConcurrentHashMap<Integer, C>>>(); そのようなデータ構造をよりエレガントに処理する方法はありますか?ありがとう! edit:A、B、Cはビジネスクラスです。Aインスタンスは(関連付けとして)多くのBを「持つ」ことができ、Bは多数のマッピングを「持つ」ことができますInteger-C。

1
ASP.NET MVC-MVCのM、V、Cはドメインエンティティを明示的に認識する必要がありますか?
この質問はかなり主観的なようですので、ここに投稿します。 あなたはASP.NET MVCを使用してStackOverflowの独自のバージョンを書いているとしましょう、そうのようなクラスがありQuestion、Answer、User、などあなたがしている怠惰な、あなたはエンティティフレームワークを使用することにしましたのでは。したがって、上記のすべてのクラスにはナビゲーションプロパティがあります。QuestionそのAnswersをAnswer知っている、User投稿者を知っているなどです。 Martin Fowlerの本をたくさん読んだことがあるので、すべてのビジネスロジックを実装するためのサービスレイヤーが必ずあるはずです。ASP.NET MVCは、UIおよびアプリケーションロジック関連の機能にのみ使用します。 2つの質問があります。 あなたは直接のオブジェクト公開しますQuestion、Answerコントローラーにして他の人を? ビューに対しても同じことをしますか? 私は基本的に自分のアプリケーションにREST APIを提供するつもりもありませんし、「ちょっと、MY VIEWはそれが何であるQuestionかを知っているので、それが悪いかどうかわかりません。気に入らない!」 Questionクラスに次のようなフィールドがTimePostedあり、PostNewQuestionビューをそのクラスにバインドする場合に特に興味があります。そのフィールドをページ上のどのコントロールにもバインドしない場合は、投稿されないのでnull、コントローラー側でオブジェクトを取得したときにそのフィールドを設定します。それは大丈夫ですか、それとも悪い考えですか?私が考えている2つの反対のアプローチは、「どこでもDTO / ViewModelを使用すること」と「wtf、クラスが少ないほど常に良いことです!」です。 正しいアプローチは何だと思いますか?(私は直接的な答えがないことを知っているので、問題は「DTO / ViewModels /その他のアプリのアーキテクチャに適しているかどうかを判断するために何を検討すべきか」です。) また、Stackoverflowの非常に簡略化されたクローンを検討していることにも注意してください。 これはWebのみのプロジェクトです(REST APIなどは公開しません)。 ユーザー、質問、回答、タグ、検索機能があります(優れたビジネスロジックはありません) 1日あたり100人ほどのアクティブユーザーがいます(特別なパフォーマンス要件はありません) 新しいメンバーが開発チームに加わった場合でも、コードは読みやすく、驚きや特別な関心のある場所があってはなりません。 最初の3つのポイントが変更された場合の考えを表明することもできます-「顧客は、10000人の同時ユーザーを許可するために私たちのサービスを望んでいる」または「すべてのユーザーが15分に1回だけ投稿できるようにする必要がある」など。 ありがとう!

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