ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

2
通常、ビデオゲームプログラミングは物理学に関連していますか?
これは、一部のゲーム、掃海艇、カードゲームなどでは明らかに当てはまらないことを知っています。しかし、実世界の環境をシミュレートするゲームはどうでしょうか。明らかに、これらのゲームには、グラフィックスを動かす物理エンジニアの何らかの形があります。 個人的に物理学は好きではないがビデオゲームが好きな私のような人にとって、物理学を嫌いながらこのようなビデオゲームの開発サイクルに関与する機会はありますか?

6
すべてのHTMLおよびCSS標準に厳密に従う必要がありますか?
数年前、私は自分がWeb開発者であり、基本的な3言語(HTML、CSS、JS)と多くのPHPを知っていると考えていました。単純なテキストから実際のWebサイトに移行することは、いわゆる「標準」が存在するために苦痛でしたが、当時はそれが途方もなく複雑でした。それはほとんどこれに要約されました(IE関連のものを除いて): 標準は、より簡単な方法で物事を行う古い方法を置き換えるためにあります。ただし、実際にいくつかのもの(たとえば、CSSベースのレイアウト全体)を実際に実装しようとすると、よりシンプルでまだ機能するソリューションを実行した場合、実際に実行するのに10倍時間がかかりました。同じようにレンダリングされる場合、ブラウザを変更すると10倍長くかかり、壊れるより複雑な例を使用する必要があるのはなぜですか?これにより、Freenode IRCの## php、## css、および## jsで多くの宗教的な議論が巻き起こり、実際に## cssから禁止されました。 私の質問:10倍長くかかっても、単純なものと同じ結果が得られる場合でも、すべての標準とコーディング規則に従う必要がありますか? ポーリングタグの場合、任意のサイズ(巨大または小)のウェブサイトを持っているあなたの人々は、ないあなたはすべての基準に従いますか?


4
毎時またはプロジェクトごとの請求ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 プログラミングプロジェクトにどのように請求しますか?あなたは1時間ごとにそれをしますか?仕事ごと? 回答には、どのようなプロジェクトを行っているのかを含めてください。(モバイル、Web、デスクトップなど。必要に応じて、より具体的にすることができます。) ボーナス: 回答に特定の金額を記入したい場合は、できます。;-)

5
管理者ユーザーが他のユーザーとしてログインできるようにする
管理者ユーザーがパスワードをバイパスして別のユーザーとしてログインできるようにする可能性を実装することは良い習慣だと思いますか?これは、マスターパスワードまたはユーザー管理内の機能「このユーザーとしてログイン」によって実装できます。 管理者は、報告された問題の再現を試行したり、許可が許可されているかどうかを確認したりするために、そのような機能を要求しています。


4
レート制限*非*認証済みリクエスト
レート制限も行うロードバランサーがあるとします。レート制限は、ログインしているユーザーにとっては非常に簡単に思えます。JWTを確認し、メモリ内のデータストアを使用して、そのユーザーの過去10秒間のリクエスト数を確認してください。 ただし、ログインしていない(認証されていない)ユーザーについてはどうですか?誰から、またはどこからリクエストが送信されているのか正確にはわからないため、これらのリクエストを簡単にレート制限することはできません。 AWSや他のホスティングプラットフォームにこれに対する組み込みのソリューションはありますか?ログインしたユーザーのレート制限ロジックを手動で処理する必要があるようですが、ログインしていないユーザーはどうですか? 私の推測/希望は、ホスティングプラットフォームで認証されていないリクエストをレート制限するための組み込みメカニズムがある可能性があることです。すべてお知らせください。

2
DDDの例外
私はDDDを学んでいて、特定の状況で例外をスローすることを考えています。私はオブジェクトが悪い状態に入ることができないことを理解しているので、ここで例外は問題ありませんが、多くの例では、たとえば、データベースに電子メールが存在する新しいユーザーを追加しようとした場合にも例外がスローされます。 public function doIt(UserData $userData) { $user = $this->userRepository->byEmail($userData->email()); if ($user) { throw new UserAlreadyExistsException(); } $this->userRepository->add( new User( $userData->email(), $userData->password() ) ); } したがって、この電子メールを持つユーザーが存在する場合、アプリケーションサービスで例外をキャッチできますが、try-catchブロックを使用してアプリケーションの操作を制御するべきではありません。 これに最適な方法は何ですか?

4
サービスをラップして簡単にする方法
私たちは、3つのメソッドのように必要なだけの巨大なインターフェースを公開するサードパーティのサービスに依存しています。さらに、インターフェースは頻繁に変更されます... プロジェクトのクラスにインターフェイスをラップし、必要なメソッドのみを公開することにしました。 しかし、私は戻り値をどのように処理するべきかわかりません...インターフェイスは型のオブジェクトを返しますStorage。内部StorageModelには、の内部表現であるタイプがありますStorage。 マッパーで何を返しますか:StorageまたはStorageModel?StorageService挿入されたラッパーの依存関係を取得するDataServiceがあります。 現在、私は基本的に次のようにしています: public class StorageService { private readonly IExternalStorageWrapper externalStorageWrapper; public StorageService(IExternalStorageWrapper externalStorageWrapper) { this.externalStorageWrapper = externalStorageWrapper; } public StorageModel GetStorage(int storageId) { return this.externalStorageWrapper.GetStorage(storageId).ConvertToStorageModel(); } } public class ExternalStorageWrapper : IExternalStorageWrapper { public Storage GetStorage(int storageId) { using(var ext = new ExternalStorage()) { return ext.GetStorage(storageId); } …

2
テスト-インメモリDBとモッキング
テストを書くとき、誰かがデータをモックするだけでなくインメモリデータベースを使用したいのはなぜですか? インメモリデータベースは、自分のリポジトリをテストするのに役立つことがわかりました。ただし、フレームワーク(Spring Dataなど)を利用する場合、リポジトリのテストはフレームワークのテストであり、実際にはアプリケーションロジックではありません。 ただし、モッキングはより高速に見え、単体テストやTDDを作成するときに一般的に採用されているのと同じパターンに従っています。 それで私は何が欠けていますか?インメモリデータベースが役立つのはいつ/なぜですか?

6
エンティティメソッドコールでのDDDインジェクションサービス
質問の短い形式 エンティティメソッドの呼び出しにサービスを注入することは、DDDおよびOOPのベストプラクティスの範囲内ですか? 長い形式の例 DDDに従来のOrder-LineItemsケースがあるとします。ここでは、Orderと呼ばれるドメインエンティティがあり、これは集約ルートとしても機能し、そのエンティティは値オブジェクトだけでなく、ラインアイテムのコレクションからも構成されます。エンティティ。 アプリケーションで流暢な構文を使用して、次のようなことができると仮定します(getLineItemsメソッドを呼び出す2行目の構文に注目してください)。 $order = $orderService->getOrderByID($orderID); foreach($order->getLineItems($orderService) as $lineItem) { ... } OrderEntityにLineItemRepositoryを挿入したくないのは、それが考えられるいくつかの原則に違反しているためです。しかし、構文の流暢さは私たちが本当に望んでいるものです。それは、テストだけでなく、読みやすく、保守しやすいからです。 のメソッドgetLineItemsに注意して、次のコードを検討してくださいOrderEntity。 interface IOrderService { public function getOrderByID($orderID) : OrderEntity; public function getLineItems(OrderEntity $orderEntity) : LineItemCollection; } class OrderService implements IOrderService { private $orderRepository; private $lineItemRepository; public function __construct(IOrderRepository $orderRepository, ILineItemRepository $lineItemRepository) { $this->orderRepository = $orderRepository; …

2
子オブジェクトを投稿し、すべての親のすべての子を取得するためのAPIエンドポイントを設計するにはどうすればよいですか?
たとえば、クライアント、レポートなどのエンティティがあります。クライアントには多くのレポートがある可能性があり、単一のレポート管理のエンドポイントは次のようにネストする必要があると思います。 /clients/{client_id}/reports/{report_id} 1つのクライアントのすべてのレポートに関しては、エンドポイントが期待されます。 /clients/{client_id}/reports しかし、すべてのクライアントのすべてのレポートを取得して、APIの一貫性と適切な設計を維持するためのエンドポイントをどのように見ればよいか 私のアプローチ: (私はそれをいくつかのgoogle apiで見ました)それの代わりに「-」を使用し、それを「すべて」として解析します: /clients/-/reports これはエンドポイントのフォーマットを同じに保ちますが、少し変わって見え、この方法を示唆するrfcを見つけることができません。 すべてのレポートのためだけに別のエンドポイントを作成します。 /reports ただし、クライアントのレポートを取得するには、次のようにします。 /clients/{client_id}/reports エンドポイントをリファクタリングして、「クライアント」を親ではなく、単なるフィルタパラメータにします。 /reports?client={client_id} -1つのクライアントのレポート /reports -すべてのクライアントのレポート 特定のクライアントのレポートを投稿するための新しいエンドポイントを追加する場合、URLにパラメーターを持つPOSTリクエストになるため、見栄えが悪くなる可能性があります。 他にアイデアの提案はありますか?
11 rest  api  api-design 

3
Python 3.4以降では、dictを使用しないときにSimpleNamespaceでnamedtupleを使用する必要があるのはなぜですか?
ある時点で、多くの引数を持つ関数を見つけるかもしれません。いくつかの引数を組み合わせてスーパー引数にすることが理にかなっている場合があります。私はこれを口述筆記で頻繁に行ってきましたが、今はよりよい方法を検討しています。 回したい... def do_something(ax, ay, az, bu, bv, c): # Do something ...に... def do_something(a, b, c): # Do something ...場所aとbそのサブバリエーションを含みます。 これを行う1つの方法は、次のことです。 A = namedtuple('A', 'x, y, z') a = A(ax, ay, az) B = namedtuple('B', 'u, v') b = B(bu, bv) ただし、これはより簡単に見えます。 a = SimpleNamespace(x=ax, y=ay, z=az) b = …

4
リフレクションを介して呼び出されるメソッドをマークするためのベストプラクティス?
私たちのソフトウェアには、リフレクションを介して動的に検出されるいくつかのクラスがあります。すべてのクラスには、リフレクションコードがオブジェクトをインスタンス化する特定のシグネチャを持つコンストラクターがあります。 ただし、誰かがメソッドが参照されているかどうか(Visual Studio Code Lensなどを介して)を確認すると、リフレクションを介した参照はカウントされません。人々はそれらの参照を見逃し、明らかに未使用のメソッドを削除(または変更)することができます。 リフレクションを介して呼び出されるメソッドをマーク/ドキュメント化するにはどうすればよいですか? 理想的には、メソッドは、同僚とVisual Studio / Roslynおよび他の自動化ツールの両方が、メソッドがリフレクションを介して呼び出されることが意図されていることを「確認」するような方法でマークする必要があります。 使用できる2つのオプションを知っていますが、どちらも十分に満足できるものではありません。Visual Studioは参照を見つけることができないので: カスタム属性を使用して、この属性でコンストラクタをマークします。 問題は、Attributeプロパティをメソッド参照にすることはできないため、コンストラクターは参照が0と表示されることです。 カスタム属性に慣れていない同僚はおそらくそれを無視するでしょう。 私の現在のアプローチの利点は、リフレクションパーツが属性を使用して、呼び出すコンストラクターを見つけることができることです。 コメントを使用して、メソッド/コンストラクターがリフレクションを介して呼び出されることを意図していることを文書化します。 自動化ツールはコメントを無視します(同僚もそうするかもしれません)。 XMLドキュメントコメントは、 Visual Studioがメソッド/コンストラクタへの追加の参照をカウント持つように使用することができます させるMyPluginそのコンストラクタ反射を経由して起動するためのクラスです。呼び出しリフレクションコードが、intパラメーターを受け取るコンストラクターを検索するとします。次のドキュメントでは、そのコードlensに、1つの参照を持つコンストラクターを示しています。 /// <see cref="MyPlugin.MyPlugin(int)"/> is invoked via reflection より良いオプションはどれですか? リフレクションを介して呼び出されることを意図したメソッド/コンストラクターをマークするためのベストプラクティスは何ですか?

1
適切な問題ステートメントの作成
<裏話> 先日、古本屋でコードコンプリートという本を買ってきて、すごい本だと聞いて読み始めました。約10ページ後、私が取り組んでいる最近のプロジェクトについて、私はちょっと愚かであることに気付きました。ここで少し説明しておきますが、私は仕事に就いていません。これは学校向けではありません。それは可能な限り非公式です(たまにSOで質問したことがありますが、私もそれに取り組んでいる唯一の人です)。私は中学生で、ソフトウェアを作成しようとしています。 簡単に言えば、私はすぐにコーディングに飛びつきました(そして今、彼がそのコードがどのように機能するかについてその場で行ったいくつかの決定に疑問を投げかけています)。だから私は正しい方法からやり直そうとしている。 </バックストーリー> わかりました、それで私は問題文を作成しようとしています、そして私は私に良いものがあるかどうかを知るためにいくつかの良いヒントが何であるかを知りたいと思いました。コードコンプリートは、それは技術的ではなく、ユーザーの観点からすべきだと述べましたが、私は試みました。それを改善する上でのアドバイスはありがたいです。 私の知る限り、現在、デコヒーレンス、エラー訂正、エンタングルメント、古典的なコンピューターのアルゴリズムなどの機能を含む、大規模で複雑な量子コンピューティング回路をシミュレートする良い方法はありません。既知で簡単にアクセスできます。 本当にひどい場合は申し訳ありませんが、これはこれが初めてです。 編集-下書き2: コメントと回答の提案を使って書き直しました。 量子コンピューティングの分野の理論家、研究者、学生が、アプリケーション自体のコードを作成せずに、複雑で大きな量子回路を直感的かつ効率的な方法でシミュレーションおよびテストする方法はありません。量子アルゴリズム、エラー修正コード、エンタングルメント、デコヒーレンス、および理想的で現実的なインターフェースのその他の側面の結果に関する結果を正確に生成できるシンプルなインターフェースを備えた一般的なブラウザーで機能するWebアプリケーションは、専門家と学生の両方が彼らのアイデアをテストし、量子コンピューティングの分野をよりよく理解してください。

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