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

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

8
上司が常に要件と全体的な設計に関する重要な決定を延期する場合はどうすればよいですか?
新しいプロジェクトを開始するとき、上司は常に決まった決定を下すことを避けています。彼は通常次のように言っています:わかりました、何かを書き始めて、できるだけ一般的になりなさい。終了したら、私たちがどのように続けるかを見ていきます。彼の議論は基本的に、あなたが決して知らない「アジャイル開発」だということです。 質問をできるだけ一般的にするために、上司が意思決定をしたくない場合はどうしますか? それに固執して、数週間後に重いリファクタリングと部分的な書き換えを受ける可能性のあるコードを書くだけですか?または、ボスが少なくともいくつかの決定をするまで議論を続けますか?これは多かれ少なかれ私の現在の戦略です。それは物理学の法則に似ているため、ある時点で何かを提供する必要があります。上司のボスが結果を見たいか、何かがばかげているからです。 また、上司がほぼすべてを批判していることも観察しています。彼自身に基づいた提案でさえ...

8
HTMLを知らなくても、エディターだけで質の高いWebサイトを構築することは可能でしょうか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 AppleからMicrosoft、Googleまで、多くの大企業が、誰もがWYSIWYGエディターを使用してWebサイトを作成できるツールを作成するために、ますます多くのお金をつぎ込んでいます。 たとえば、アドビから受け取ったばかりのこのメール: Adobe®InDesign®レイアウトと同じくらい迅速かつ簡単にWebサイトを構築します。 現在、ベータ形式のコード名「Muse」は、グラフィックデザイナーが使い慣れた自由形式のツールを使用して、HTMLおよびCSS Webサイトを設計および公開できるようにする新しいテクノロジです。この信じられないほどの無料プレビューに参加して、MuseがWeb用に作成する方法に革命をもたらす方法を体験してください。 Web開発者として、アドビや他の企業がHTML / CSS / JSの知識のないユーザーが以下の理由で有用なWebサイトのデザインを構築できるソリューションを作成する方法を予測することはできません。 生成されたコードはほぼ間違いなく混乱し、サイトのバックエンドを作成したいプログラマーがそれを操作するのが難しくなります。必要に応じて構造化するためにコード自体を変更する必要さえあります。 HTMLはピクセルベースではないため、テキストサイズなどを変更して流れるテンプレートを簡単に設計できるツールを開発することは非常に困難です。さらに、要素はランダムな順序ではなく、合理的な順序で互いに続く必要があります(例えば、要素がいつ追加されるかによって指示されるように)。 あるツールで生成されたコードは、他のツールに簡単に移植できない可能性が高く、元のツールにロックされます。 (このツールはWebサイトの完全な制御を可能にするものと想定しています。アドビが言ったように、「Adobe InDesignレイアウトと同じくらい簡単に」。プロがデザインしたテンプレートを使用できるプログラムは別の話です。) HTMLに不慣れな人でも、品質(舞台裏と外観の両方)のWebデザイン/サイトを作成することは可能だと思いますか?
12 design  html  wysiwyg 

8
オブジェクト指向クラスの設計
オブジェクト指向の優れたクラス設計について疑問に思っていました。特に、これらのオプションを決定するのに苦労しています。 静的対インスタンスメソッド パラメータまたは戻り値のないメソッド vs パラメータおよび戻り値のあるメソッド オーバーラップする対の異なる方法で機能 民間対公共方法 例1: この実装では、戻り値やパラメーターを持たず、機能が重複しないインスタンスメソッドを使用します。すべてのメソッドはpublic XmlReader reader = new XmlReader(url); reader.openUrl(); reader.readXml(); Document result = reader.getDocument(); 例2: この実装では、戻り値とパラメータを備えた静的メソッドを使用し、重複する機能とプライベートメソッドを使用します。 Document result = XmlReader.readXml(url); 例1では、すべてのメソッドがパブリックインスタンスであるため、ユニットテストが簡単になります。すべてのメソッドは異なりますが、readXml()はopenUrl()に依存しているため、openUrl()を最初に呼び出す必要があります。すべてのデータはインスタンスフィールドで宣言されるため、コンストラクターとアクセサーを除き、どのメソッドにも戻り値やパラメーターはありません。 例2では、​​1つのメソッドのみがパブリックであり、残りはプライベートスタティックであるため、ユニットテストが困難です。readXml()がopenUrl()を呼び出すという点で、メソッドは重複しています。フィールドはありません。すべてのデータはメソッドのパラメーターとして渡され、結果はすぐに返されます。 適切なオブジェクト指向プログラミングを行うには、どの原則に従うべきですか?

9
継承が間違っている
良い継承モデルが下り坂になっているコードがいくつかあり、それを修正する理由と方法を理解しようとしています。基本的に、次のようなZoo階層があるとします。 class Animal class Parrot : Animal class Elephant : Animal class Cow : Animal 等 eat()、run()などのメソッドがあり、すべてが適切です。それからある日誰かがやって来て言う-私たちのCageBuilderクラスはうまく機能し、animal.weight()とanimal.height()を使用しますが、新しいアフリカバイソンは強すぎて壁を砕くことができるので、追加しますAnimalクラスのもう1つのプロパティ-isAfricanBizon()で、マテリアルを選択するときにそれを使用し、AfricanBizonクラスに対してのみオーバーライドします。次の人が来て、似たようなことをします。次に、基本クラスへの階層のサブセットに固有のこれらすべてのプロパティがあることを知っています。 そのようなコードを改善/リファクタリングする良い方法は何ですか?ここでの1つの代替方法は、dynamic_castsを使用して型をチェックすることですが、呼び出し元を混乱させ、あらゆる場所にif-then-elseを追加します。ここでは、より具体的なインターフェイスを使用できますが、基本クラス参照のみを使用している場合は、あまり役に立ちません。他の提案はありますか?例? ありがとう!

8
どのようにしてマネージャーにアジャイルを理解させるのですか?
反復的な開発を理解していないシニアディレクターに問題があります(アジャイルの方がずっと少ないです)。彼は、コードの行が書かれる前に、ソフトウェア設計仕様(SDS)が完全であることを主張します。彼にとって完了とは、すべての機能の詳細がそこにあることを意味します。また、元Cobolプログラマーである彼は、「モジュール」とフローチャートを見たいと考えています。これは大声で叫ぶためのJava Webアプリです! とにかく、コーディングを開始する前にSDSを100%完全にする必要はないことを示すために、彼を優しく指す簡単な場所を見つけようとしています。助言がありますか? ありがとう!

10
チームを率いて、私は圧倒されていますか?
私は非常に奇妙な位置にいるように見えます。私は特定のプロジェクトの役職で「チームリード」を務めています。役職はソフトウェアエンジニアです。私のチームには4人の開発者がいて、そのうちの1人は別のプロジェクトで同様の役割を果たしていますが、現在は私のものが優先されているので、彼は私のものに取り組んでいます。また、2人のテスターがいます。そのうちの1人はマネージャーです。チームの別のメンバーは、完全に無関係な部門の一部である「顧客担当者」です。また、私は私のすぐ上にいるマネージャーを持っています。私のチームの一部であるテストのマネージャーの上にもいると思います。 私は自分の役割が正確に数回ある理由を明確にしようとしました。権限がある場合でも、どこから始めてどこで終わるかを把握するのは困難でした。私が現在取り組んでいる答えは、私がチームの「技術的なリーダー」であるということです。これは、製品コード自体に関係するアーキテクチャ、設計、およびプロセス/コーディング標準に関する技術的な決定について、私の権限を持っていることを意味するようです。 今日、何かが起こり、私がチームのメンバーの1人に委任したコードの結果が、Scrum Show-It-All-Offミーティングで会社の他のメンバーに示されました。顧客の代表者が披露します。今日私は本当に異議を唱えたことを披露し、何が起こったかについて発言したいかどうか誰も私に尋ねたことがありませんでした。要するに、ユーザーが次の方法でレポートに値を表示する機能を提供するために(「doc」単位、設計単位、丸めではなく丸め)、各順列のアクセスフィールドを提供しました。したがって、値は、丸められたドキュメント単位、丸められたデザイン単位、丸められていないドキュメント単位、丸められていないデザイン単位になります。ユーザーが処理したい各レコードには多くの値があり、各レコードはこの方法で並べ替えられます。 本当に嫌いです。 これを示した人々は、レポートに使用するAPIがExcelへのデータのエクスポートなどの処理と同じであることを確認したいと考えています。残念ながら、今、私たちは本当に、本当に悪いと思う方向にこの勢いを獲得しています。 次回の会議で少し動揺しましたが、これを行った2人に「なぜこの決定に関与しなかったのですか?」と尋ねました。これは今後も発生し続ける問題であり、私が率いるチームに参加して、私が参加したいかどうかを尋ねるのは難しいようです。時々私はしないで、彼らが思いついたものは何でもいいと思う。他の回は。人々が私に尋ねない限り、私の意見を必要とする何かが起こっていることを知ることさえ難しく、彼らは私にその機会を与えません。 残念なことに、私の権限は、「次回、私と話をせずに外出して自分でこのようなことをするとき、あなたは懲らしめられます」と人々に伝えることにまでは及びません。それは「PR」の問題であり、私の権限の範囲内ではないことは明らかです。私は他の誰かが喜んでいる場合、私はその種のがらくたに対処する必要はありませんので、実際には私で結構です。 しかし、今日、私のマネージャーは皆の前で(そういうことをするのも部分的には私のせいだと思う)、私はすべての決定に関与することはできず、委任する必要があると言った。 もちろん私は正しいと思う....私はいつもそうだ。私がBSだと思うことは言いません。この問題についてアプローチして、もっと良いアイデアがあるかどうかを尋ねるべきだったと思う。これは、実際には新しい機能の最初の段階であるため、現在提供する1つの値を決定することであり、必要に応じて将来さらにアクセスを提供するためのオプションについて議論することです。現在の実装を承認したり推奨したりすることは一度もなかったし、それが日の目を見るとは思わなかった。 問題は、私は不合理な人ですか? 私たち二人はそれについて話し、私たち二人とも「ボールを落とした」ことに同意し、私たちは同じページにいるようです。月曜日の朝...チームで私の役割が明確になるようにしようとしています。そうすれば、デザインやタスクの変更が必要になる時期を判断することができます。私は提案を受け、同意するか、もっと深く見る必要があると判断します。それから、彼らが私に来ることができることを彼らが知っていることを確認するために私が取り組むことができるいくつかの他のビットがあります。

5
バックエンドは良いが、フロントエンドは悪い
Web開発を開始したいのですが、PHPを学んでいます。 Java、Python、およびC ++の 経験があります。この経験により、Web開発のバックエンド側が得意になりました。 しかし、私はデザインとグラフィックスがひどいです。 ウェブサイトを始めたいです。 あなたは私が何を提案するのですか? あなたの提案がグラフィックスをより良くすることである場合、何が良い方法でしょうか? また、デザインやグラフィックスに使用しているものを知りたいのですが、そのための良い学習スポットは何ですか?

4
初期化メソッドを避ける
この既存のコードには、クラスとそのクラスの初期化メソッドがあります。クラスのオブジェクトが作成されたら、そのオブジェクトでinitializeを呼び出す必要があります。 初期化メソッドが存在する理由 オブジェクトは、グローバルスコープを持つように早期に作成され、その後、依存するDLLを読み込んだ後に初期化メソッドが呼び出されます。 初期化 の問題クラスには現在、このbool isInitializedがあります。初期化されていない場合、処理を続行してエラーを返す前にすべてのメソッドでチェックする必要があります。簡単に言えば、それは大きな痛みです。 考えられる解決策の1つ は、コンストラクターで初期化することです。グローバルスコープ内のオブジェクトへのポインターのみがあります。dllがロードされた後、実際のオブジェクトを作成します。 上記のソリューションの問題 このクラスのオブジェクトを作成する人は誰でも、dllがロードされた後にのみ作成される必要があることを知る必要があります。さもないと、失敗します。 これは受け入れられますか?

8
コンストラクターは通常、メソッドを呼び出さないでください
メソッドを呼び出すコンストラクターがアンチパターンになり得る理由を同僚に説明しました。 例(さびたC ++で) class C { public : C(int foo); void setFoo(int foo); private: int foo; } C::C(int foo) { setFoo(foo); } void C::setFoo(int foo) { this->foo = foo } あなたの追加の貢献を通じて、この事実をより良く動機付けたいと思います。例、本の参照、ブログのページ、または原則の名前があれば、大歓迎です。 編集:私は一般的に話しているが、私たちはPythonでコーディングしています。
12 design 

5
参照によって渡されたオブジェクトの変更は悪い習慣ですか?
過去には、通常、作成/更新されるプライマリメソッド内でオブジェクトのほとんどの操作を行ってきましたが、最近は別のアプローチを取っていることがわかりました。 以下に例を示します。Userエンティティを受け入れるリポジトリがあるとしますが、エンティティを挿入する前に、いくつかのメソッドを呼び出して、すべてのフィールドが必要なものに設定されていることを確認します。ここで、メソッドを呼び出してInsertメソッド内からフィールド値を設定するのではなく、挿入前にオブジェクトを整形する一連の準備メソッドを呼び出します。 古い方法: public void InsertUser(User user) { user.Username = GenerateUsername(user); user.Password = GeneratePassword(user); context.Users.Add(user); } 新しいメソッド: public void InsertUser(User user) { SetUsername(user); SetPassword(user); context.Users.Add(user); } private void SetUsername(User user) { var username = "random business logic"; user.Username = username; } private void SetPassword(User user) { var password = "more …

4
大量の入力データが必要な場合にマイクロサービスアーキテクチャにルールエンジンを組み込む方法
現在の状況 私たちは、マイクロサービスアーキテクチャでオンラインショッピングWebアプリケーションを実装しています(そして現在保守しています)。 要件の1つは、エクスペリエンスと最終的な注文をカスタマイズするために、顧客がカートに追加するものにルールを適用できる必要があることです。明らかに、ビジネスルールエンジンを導入する必要があり、このために特定の「マイクロサービス」を実装しました(まだそう呼べる場合)。 1年の間に、このルールエンジンはますます複雑になり、より多くのデータ(カートのコンテンツだけでなく、ユーザー情報、役割、既存のサービス、請求情報など)が必要になりました。それらのルールを計算します。 現時点では、shopping-cartマイクロサービスは他のマイクロサービスからこのデータをすべて収集しています。このデータの一部はで使用されますがshopping-cart、ほとんどの場合、主にルールエンジンのフィードに使用されます。 新しい要件 これで、同様の要件にルールエンジンを再利用する他のアプリケーション/マイクロサービスが必要になりました。したがって、現在の状況では、ルールエンジンを呼び出すことができるように、同じ種類のデータを送信し、同じマイクロサービスを呼び出し、(ほぼ)同じリソースを構築する必要があります。 そのまま続行すると、いくつかの問題に直面します。 誰もが(ルールエンジンを呼び出して)データのフェッチを再実装する必要があります(自分でデータを必要としない場合でも)。 ルールエンジンへの要求は複雑です。 この方向で続けると、多くの要求のためにこのデータをネットワーク全体に転送する必要があります(μsAがルールエンジンを呼び出すμsBを考えますが、Aはルールエンジンが必要とするデータの一部を既に持っています)。 shopping-cart すべてのデータ取得により巨大になりました。 おそらく多くのことを忘れてしまいます… これらのトラブルを回避するために何ができますか? 理想的には、ルールエンジンの複雑さを増やさないようにします。また、ボトルネックにならないように確認する必要があります。たとえば、一部のデータはフェッチに時間がかかります(10秒以上)ためshopping-cart、ルールを呼び出す前にデータが存在する可能性が高くなるようにプリフェッチを実装しましたエンジン、および許容できるユーザーエクスペリエンスを維持します。 いくつかのアイデア ルールエンジンに必要なデータをフェッチさせます。これにより、さらに複雑さが増し、単一の責任原則に違反します(さらに…)。 ルールエンジンがデータを取得する前にプロキシμsを実装します。 ルールエンジンが必要なすべてのデータを一度にフェッチするために呼び出す「データフェッチャー」μsを実装します(複合照会)。

3
依存関係反転の原理と「実装ではなく、インターフェイスへのプログラム」
Dependency Inversion Principleが「実装ではなくインターフェイスへのプログラム」原則とどのように異なるかを理解しようとしています。 「実装ではなく、インターフェイスへのプログラム」の意味を理解しています。また、より柔軟で保守可能な設計を可能にする方法も理解しています。 しかし、依存関係反転の原則が「実装ではなくインターフェイスへのプログラム」の原則とどのように異なるかはわかりません。 Web上のいくつかの場所でDIPについて読みましたが、混乱は解消されませんでした。2つの原則がどのように異なるかはまだわかりません。ご協力いただきありがとうございます。

3
OOPのクラス設計にどのように取り組みますか?
オブジェクト指向ソリューションを設計しようとすると、通常、CRCモデリングを使用して、クラス名(名詞)、それらが行うこと(動詞)、および他のクラスとのコラボレーション方法をリストします。 このブログには、この名詞動詞のアプローチについて以下のことを述べています ...This approach, which I will call “noun and verb,” is so limited I’ll dare to call it brain damaged.... 私の質問は、オブジェクト指向アプローチを使用するためのより良いモデリング手法が存在するかどうかです。

2
「ゲーミフィケーション」についてのあなたの意見は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 あなたがしていることのゲーミフィケーションについて、興味深いGoogleトークビデオ(1時間程度の警告)を見ました。 StackExchangeのサイトセットでは、これらの原則の多くが採用されていることは明らかです。仕事を楽しくすることには魅力的なものがありますが、これらのアイデアを組み込むことができる問題領域はいくつあるでしょうか。彼らは間違いなくソーシャルアプリケーションに適用されますが、それだけですか?仮想ロイヤルティプログラムの概念も非常に魅力的です。 ゲーミフィケーションの簡単な説明: 採点と報酬のシステムがあります。たとえば、StackExchangeのレピュテーションはスコアリングの一種です。バッジは報酬の一種です。評判が上がるにつれて得られる追加の特権も一種の報酬です。 実際の償還を伴わないロイヤルティプログラムの例としては、コンビニエンスストアで製品を購入し、FarmVilleクレジットを取得するまでさかのぼったプロモーションがあります。実際の金銭や商品の交換は行われず、小売業者への費用はせいぜい最小限です。しかし、これらの仮想的な見返りに実際のお金をもたらします。 JohnLのリンクの恥知らずな使用:http : //en.wikipedia.org/wiki/Gamification 注: スピーカーは、アーキタイプになったと思われる4つのクラスのユーザーを指します。彼らは達成者、社交者、探検家、殺人者です。達成者はおそらく私たちすべてのプログラマーに当てはまるでしょう。どうやら80%の人々が社交家であり、軽く、対立しない対話のようです。エクスプローラーは、ゲーム/アプリケーションの隅々まで行き、イースターエッグや隠れた機能を発見します。キラーは勝ちたいだけでなく、負けてあなたを打ち負かしたことで賞賛/ステータスを得てほしいです。

17
SQLを記述する必要はまだありますか?
最新のほとんどの言語用の非常に多くのORMツールがありますが、それらをサポートする言語/環境で、プログラムでSQLを記述および実行するためのユースケースはまだありますか?もしそうなら、なぜですか? わかりやすくするために、プログラマがSQLを知る必要があるかどうか、またはデスクトップにSQLツールを用意する必要があるかどうかについては質問していません。ORMではなく、コード(または構成など)に含める理由を具体的に尋ねています。
12 design  sql 

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