ソフトウェア工学

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


1
C ++でのPythonスタイルのキーワード引数-良い習慣か悪い考えか?
最近、関数へのオプションのパラメーターの最適な順序を見つけようとしているときに、このブログの投稿と、C ++のPythonのような機能のヘッダーを提供するGitHubリポジトリを偶然見つけましたkwargs。結局使ったわけではないのですが、強く型付けされた言語でこれがいいのか疑問に思っています。しばらくPythonで作業していkwargsて、プロジェクト内の-のような機能の概念が非常に魅力的であることがわかります。そのオブジェクト/関数の多くには多数のオプションパラメーター(残念ながら回避できない)があり、コンストラクターの長いリストが生成されるためです。 1つまたは2つのパラメータが異なり、はるかに簡潔/ DRY風にすることができます。 このようなことを他の人が経験したとしたら、どうですか。避けるべきですか?ガイドラインはありますか?潜在的な問題/落とし穴は何ですか?
8 c++  python 

1
本REST vs Too many Requests
偽のREST APIを非難する彼自身の記事に関するロイフィールディングのコメントから: 真にRESTfulなAPIはハイパーテキストのように見えます。すべてのアドレス可能な情報単位は、明示的に(たとえば、リンクとID属性)または暗黙的に(たとえば、メディアタイプの定義と表現構造から派生)のいずれかでアドレスを伝達します。クエリ結果は、オブジェクト表現の配列ではなく、要約情報を含むリンクのリストで表されます(クエリはリソースの識別の代わりにはなりません)。 これは、たとえば、最近ログインした100人のユーザーのリストをクエリして、その名前と電子メールを表示する必要がある場合、最初GETに結果のリストをクエリする必要があることを意味します。リンク要素のリストであり、各リンクオブジェクトにはユーザーリソースのURIが含まれます。結果を表示するために必要なデータを実際に取得する前に、さらに 100のGETリクエスト(ユーザーリソースごとに1つ)を行う必要があります。 それは信じられないほど非効率的です。1つまたは2つの要求で必要なデータを取得するための本当にRESTfulな方法は他にありませんか?
8 rest  api  api-design 

3
REST API承認戦略
ここでは、RESTful APIの認証と承認のメカニズムを扱う多くの質問がありますが、アプリケーションレベルで安全なサービスを実装する方法の詳細については触れていません。 たとえば、私のWebアプリケーション(Javaを念頭に置いていますが、これは実際にはすべてのバックエンドに当てはまります)に、APIのユーザーがユーザー名とパスワードでログインできる安全な認証システムがあるとします。ユーザーがリクエストを行うと、リクエスト処理パイプラインの任意の時点でgetAuthenticatedUser()、ユーザーがログインしていない場合はnullユーザー、またはログインしているユーザーを表すユーザードメインオブジェクトを返すメソッドを呼び出すことができます。 APIにより、認証されたユーザーはデータにアクセスできます。たとえば、GET /api/orders/はそのユーザーの注文リストを返します。同様に、GET to /api/tasks/{task_id}はその特定のタスクに関連するデータを返します。 ユーザーのアカウントに関連付けることができるいくつかの異なるドメインオブジェクトがあると仮定します(注文とタスクは2つの例であり、顧客、請求書などもある可能性があります)。認証されたユーザーだけが自分のオブジェクトに関するデータにアクセスできるようにしたいので、ユーザーがを呼び出すときは、ユーザーが/api/invoices/{invoice_id}そのリソースにアクセスすることを許可されていることを確認してから、サービスを提供します。 私の質問は、この承認の問題に対処するためのパターンや戦略は存在するのでしょうか。私が検討しているオプションの1つは、ヘルパーインターフェイス(つまりSecurityUtils.isUserAuthorized(user, object))を作成することです。これは、リクエストの処理中に呼び出して、ユーザーがオブジェクトをフェッチすることを許可されていることを確認できます。これは、これらの呼び出しの多くでアプリケーションのエンドポイントコードを汚染するため、理想的ではありません。 Object someEndpoint(int objectId) { if (!SecurityUtils.isUserAuthorized(loggedInUser, objectDAO.get(objectId)) { throw new UnauthorizedException(); } ... } ...そして、少し面倒かもしれませんが、すべてのドメインタイプにこのメソッドを実装するという問題があります。これが唯一のオプションかもしれませんが、私はあなたの提案を聞いて興味があります!

2
他の人のオープンソースプロジェクトをフォークするためのネチケットは何ですかII?
これは(他の人のオープンソースプロジェクトをフォークするためのネチケットとは何ですか?)の直接の複製ですが、そこに自分の答えが見つからず、コメントできません(まだ十分な評判がないため)。 これが私のシナリオです。 私はGitHubプロジェクト(https://github.com/fengyuanchen/cropper)の公開フォークを持っています。オリジンにいくつかの修正を加えました(低メモリデバイスでのキャンバスレンダリングの制限の回避など)が、ソフトウェアに必要な次のような機能も追加しました。 viewMode: 4:画像が回転すると、画像全体が常にコンテナ内に表示されるように拡大縮小されます。また、cropBoxは、キャンバスだけでなく、常に画像内に制約されます。 getCroppedCanvas タイリング:切り抜かれた画像をキャンバスにタイリング(たとえば、マトリックススタイルを複製)する機能。 ただし、元の作成者は、元のプラグインをできるだけ単純にしたいと考えているため、この新しい機能にマージしたくありません。 私は交渉と交渉を試みましたが、ちょうど無視されています。 それで、私はこの公開フォークを維持し続けるという事実に自分を辞任しました。理想的ではありませんが、他の機能が本当に必要です。だから私たちはあります。 元のライセンスはMITライセンスであり、次のように宣言されています。 The MIT License (MIT) Copyright (c) 2014-2016 Fengyuan Chen and contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without …

3
java.timeに、コンストラクタだけでなくオブジェクトを作成するためのメソッドがあるのはなぜですか?
新しいjava.timeパッケージでは、コアクラスはofパブリックコンストラクターの代わりにファクトリメソッドを使用しています。ofメソッドの外観は好きですが、コンストラクターを使用しない理由はわかりません。私が見つけたドキュメンテーションは、これが事実であることを説明しているだけであり、それがなぜそうであるのかについては本当に入りません。 チュートリアルからの引用: Date-Time APIのほとんどのクラスは、不変のオブジェクトを作成します。つまり、オブジェクトの作成後は変更できません。不変オブジェクトの値を変更するには、元のオブジェクトの変更されたコピーとして新しいオブジェクトを構築する必要があります。これは、Date-Time APIが定義によりスレッドセーフであることも意味します。これはAPIに影響し、日付または時刻オブジェクトの作成に使用されるほとんどのメソッドには、コンストラクターではなく、of、from、またはwithがプレフィックスとして付けられ、setメソッドはありません。
8 java  java8 

2
.NETでモノリシックアーキテクチャからマイクロサービスアーキテクチャに切り替える際の重要な考慮事項は何ですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 3年前休業。 モノリシックモンスターをマイクロサービスベースのアーキテクチャに徐々に分解することを検討しています。私たちには5つのチームがあり、各チームには2〜3人のC#開発者、少なくとも1人のデータベース開発者、および2人のQAエンジニアが含まれています。モノリシックアーキテクチャからマイクロサービスへの大きな文化とパラダイムシフトに加えて、技術的な課題もあります。同じ間違いをしないように、コミュニティに知恵とアドバイスをお願いしたいと思います。 .NETベースのマイクロサービスが実稼働システムでうまく利用されている良い業界の例はありますか?次の戦略は何でしたか? 組織:.NETソリューション/プロジェクトをどのように編成しましたか? 開発計画:開発計画に関して、チーム間でどのように作業を分割しましたか?マイクロサービス全体で契約のコンプライアンスを確保するための全体的な戦略は、チーム間で交渉されましたか? 負荷分散/ルーティング/ APIゲートウェイ:負荷分散、冗長性、スケーリングの戦略は何でしたか?完全な非同期アーキテクチャを使用して、マイクロサービス通信にキューを使用しましたか、それともロードバランサー/ APIゲートウェイを介してピアツーピアで実行しましたか?なぜ? テスト自動化:テスト自動化をどのように処理しましたか。マイクロサービスアーキテクチャでは、これと継続的な統合が絶対に必要であるようです。どうやってそれをやりましたか? 展開:どのように展開していますか?1つのVM /マイクロサービス、1つのコンテナー/マイクロサービス、またはその他の何か?各マイクロサービスがデータストアを持つことを考慮しなければ、数十のデータベースがあるという事実をどのように処理しましたか?それはインフラストラクチャに何を行い、DBAはそれをどのように処理しましたか? インフラストラクチャ:このアーキテクチャでインフラストラクチャはどのように拡張されましたか。それはとてもおしゃべりで、あなたはそれを微調整する必要がありましたか、それともネットワークが問題なくそれを処理しましたか?セルフホストですか、それともクラウド内ですか? モニタリング:あなたのモニタリング戦略は何ですか?数百のマイクロサービスではないにしても、数十のタブをどのように維持していますか?それは主にロギングと集中監視によるものですか?

9
別の言語を使用してdbに間接的にアクセスしているだけで、SQL内のデータ構造とオブジェクトの種類を学習する必要はありませんか?
データベースへのアクセスにjavaまたはpythonを使用しているとします。それでは、時間の浪費と見なされ、SQL内で使用されているデータ構造とオブジェクトの種類を学習する必要はありませんか? ソフトウェア業界についてお答えください。どのような場合にそのようなことを知っておくとよいかを教えてください。 私はそのようなことを学ぶ必要はないと言っている誰かとの議論があります。
8 database  sql 

4
並列処理できないタスクをスクラムおよびスウォーミングする
私の現在のスクラムマスターは、公式のスクラムに屈することをいとわない真の信者です。私はこれが不確かに聞こえるようにしたくありません、私は過去に公式の用語で物事を再キャストすることによって彼と一緒に問題を解決することに成功しているので、この問題の正統な解決策について本当に尋ねています。 現在発生している問題の現在の例は、一部のストーリーの間に順序付けの依存関係があることです。(特に、開発の一部では、シングルシートライセンスしか持っていないサードパーティプログラムを使用しています。)これに関連するいくつかの必要なセットアップタスクがあり、「セットアップストーリー」にまとめられています。任意の順序で実行できるタスク。 問題は、現在のスプリントについて、セットアップストーリーと後続ストーリーの1つをプルしたことです。その時点で、スプリントが半分以下であっても、このグループでこれ以上のストーリーをとることはできないと述べました。このグループよりも優先度が低いバックログには無関係なストーリーがあり、スプリントに取り入れることをお勧めします。ただし、これらはすべて、このグループのストーリーの下で優先されました。この時点で、スクラムマスターは、「セットアップタスク」に群がってそれをより速く実行する必要があると述べました。これは、以前に発生した競合であり、彼は問題を抱えています。 したがって、このスプリントの前半では、2人の開発者と1つのテストリソースが、外部ベンダーの構成Webサイトでの作業、リソースのダウンロード、および証明書のシャッフルを監視しています。3つのスプリントでリリースされる予定で、POが希望するバックログのほぼ全体を取得できることはわかっていますが、誰もが座っている間はこれらのタスクで作業が行われていないので(er、群れ)最も優先度の高いストーリーのセットアップタスク。 私のスクラムマスターは、私たちの唯一の懸念は、スプリントに受け入れたストーリーを完成させることだと言っています。私は理解していますが、私たちは、製品の所有者から受け取った優先順位付けが引き起こしている「不良箱の梱包」を伝えないことによって、より大きな組織を失敗させているように感じます。 それでは、ストーリーと本質的に連続するストーリーとの間の依存関係の問題は、方法論によってどのように公式に処理されますか?

3
ループ内にネストされている場合、try-catchステートメントのネストは依然としてコードの匂いですか?
try-catchステートメントをネストするとコードの臭いになることがよくあると聞いたので、この状況が例外かどうか疑問に思います。そうでない場合、リファクタリングするためのいくつかの良い方法は何でしょうか? 私のコードは次のようになります: try{ X x = blah; otherStuff; for (int i = 0; i < N; i++){ try{ String y = Integer.toString(i); f(x); } catch(Exceptions1 e1){ System.err.println(... + y + ...); System.exit(0); } } catch(Exceptions2 e2){ ... } Exceptionsここではマルチキャッチを示すために使用しています。 e2初期化xおよび実行によってスローされた例外をキャッチするために使用されますotherStuff。理想的には、2つの行だけをtry-catchで囲んでいたはずですがx、ループ内で使用し、try-catchの外側でnullに初期化することによって引き起こされる「未使用の割り当て」警告を回避したいと考えました。 e1e2反復の詳細に関する情報をユーザーに提供したいため、ループ内にキャッチブロックが必要だったため、マルチキャッチされませんでした。

6
ビジネス要件を技術仕様に凝縮[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 3年前休業。 私は大手小売業者のIT部門で働いており、ウェブサイトの主要なシステムを再設計するためのプロジェクトを開始しました。 ビジネスユーザーは、システムを更新して改善したいと考えています。彼らはそれがどのように機能するかについて非常に高レベルの原則をいくつか持っていますが、それはそれについてです。 経営陣は、利用可能なリソースがあるため、開発チームが「何かを行う」ことを開始することを望んでいます。 開発チームとしての時間を過ごすための最良の方法を考えるのに苦労しています。ビジネスユーザーと一緒に座っても、非常に高レベルの原則や、ユーザーが望まないことは何も実現していませんが、要件への取り組みを検討することはありません。 機能の具体的な実装を漠然としたビジネス要件に関連付け、技術的な専門知識の欠如とビジネスからの賛同を得て、ビジネスが結果に満足できるようにするにはどうすればよいですか?

1
SQLiteデータベースファイルはどこに保存しますか?
現在は効果のないデザインの、1つの言語(現時点では英語)の外国語を学習するためのアプリケーションを作成しています。 単語の保存にはJavaとSQLite-jdbcを使用しています。起動後、アプリケーションはコンマ区切りのワードリストをダウンロードし、各値のペアをデータベースに挿入します。余分なgithubリポジトリでワードリストをホストしました。これは、データベースファイルを開発gitリポジトリ内に保存するべきではないと考えていたためです。そのバイナリなので、データベースでsthを実行するたびに、データベースファイルのハッシュが変化します。読みにくいコミットメッセージを作成する必要があり、データベースに対する実際の変更を理解するのが難しいため、私はそれが好きではありません。 したがって、私の実際の質問: gitリポジトリ内に保存するよりもDBファイルを保存するよりエレガントなソリューションはありますか?現在のデータベースファイルを別のファイルホストに保存するだけですか?そのような状況のベストプラクティスは何ですか?
8 design  sqlite 

1
DDDのレイヤー間の通信
DDDの文献を読んで、次のレイヤーを思いつきました。 Application アウトサイダーワールド(コントローラ、クローンなど) Application Services(またはUseCases)-複数のドメインサービスまたはインフラストラクチャサービスを調整します。それらはから呼び出されOutside Worldます。彼らは何をしなければならないか知っています Domain Services -物事がどのように行われるかが含まれています(リポジトリインターフェイスに依存) 質問:レイヤー間で通信するためのベストプラクティスはありますか? 私が知っていること:- Application services公開する「必要なデータ」とトランザクションの「成功」の一部(警告、エラー、情報)をApplication Service返す必要があります- 返すデータは、そこから収集しDomain ServicesたりInfrastructure Services、収集したりする必要があります。 Controller <-> Application Service <-> Domain Service <-> Infrastructure Service これらは私の曖昧な考えの一部です: すべてのメソッドにApplication Serviceは、「リクエスト」をパラメータとして含む特定のDTOが必要ですか?同様にAddItemToCardCommandDto(必要なすべてのデータをカプセル化していること)。and やorのResultObjectようなメソッドが2つしかないジェネリックはどうですか?getResulthasErrorrsgetMessages DomainServiceデータとエラーをどのように返す必要がありますか?例外でエラーを返す必要がありますか?Bussines Validation DomainServicesはビジネスルールの一部であるため、呼び出す必要があるため、これは奇妙に思われます。

2
すべてのメソッドが仮想ではないのか、各クラスに少なくとも1つのインターフェイスがないのはなぜですか?
これは.NETプラットフォームに関するより哲学的な質問ですが、他の言語でも役立つかもしれません。私は多くの単体テストを行っていますが、特に私がしばしば苦労しているサードパーティのコンポーネントを使用している場合はそうです。.NETでは、コンポーネントの設計者に、どのメソッドを仮想化するかどうかを選択するという大きな主張があります。1つはコンポーネントの使用方法(仮想化する意味がある)、もう1つはコンポーネントのモック機能です。Shimsを使用してサードパーティのコンポーネントをモックアップできますが、これは多くの場合、設計や複雑さを悪化させます。.NETでのすべてのメソッドの仮想化(JAVAには最初からあります)についての議論は、パフォーマンスに関するものでした。しかし、それはまだ問題ですか?なぜすべてのメソッドが.NET virtualではないのか、または各クラスに少なくとも1つのインターフェイスがないのはなぜですか?

7
一般的なタスクを実行し、アプリケーション全体から呼び出されるメソッドに静的クラスを使用する必要がありますか?
私は最後の数時間を費やして、staticクラスの使用について読み、それらを使用する必要があるかどうかを理解しようとしましたが、それでも何らかの結論には至っていません。議論はどちらにでも行くことができるようです。私のアプリケーションでは、「ヘルパークラス」と呼ばれるものを作成しました。これには、非常に一般的なタスクを実行し、アプリケーション全体(ASP.Net MVCWebアプリを使用C#)から呼び出されるメソッドが含まれています。簡単な質問は、それらが本当に静的かどうかです。 ? これが私のヘルパーの例です。 public static class ActiveDirectoryHelper { public static PrincipalContext GetPrincipalContext(string ouName) { var fullOUName = string.Concat("OU=", ouName,",DC="); return new PrincipalContext(ContextType.Domain, "", fullOUName, ConfigurationManager.AppSettings["ServiceAccountUser"], ConfigurationManager.AppSettings["ServiceAccountPassword"]); } public static PrincipalSearcher GetAllUsersInOU(string ouName) { var principalContext = GetPrincipalContext(ouName); var userPrincipal = new UserPrincipal(principalContext); return new PrincipalSearcher(userPrincipal); } public static UserPrincipal …

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