ソフトウェア工学

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

6
プログラミングに特化したノートブックはありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 6年前休業。 エンジニアリングペーパーが存在することは知っていますが、ノート/疑似コード/デザイン用のプログラマー固有のノートブックを作成している会社はありますか? 紙は私が物事を概説するのに好ましい方法なので、ツールのリストに専用のパッドを追加することは非常に有益です。

6
メンバーを非表示にすることのみを目的として明示的なインターフェイス実装を使用する理由は何ですか?
C#の複雑さを研究しているときに、明示的なインターフェイスの実装に関する興味深い一節に出会いました。 While this syntax is quite helpful when you need to resolve name clashes, you can use explicit interface implementation simply to hide more "advanced" members from the object level. の使用を許可するobject.method()か、キャストを要求するかの違いは((Interface)object).method()、経験の浅い目には意地悪な難読化のようです。テキストでは、これによりオブジェクトレベルでIntellisenseからメソッドが非表示になることが示されていますが、名前の競合を回避する必要がないのに、なぜそうする必要があるのでしょうか。
11 c#  design  interfaces 

12
Macでネイティブに.NET 4.0アプリケーションを実行するためのサポートされている方法はありますか?
MacでネイティブにC#/。NET 4.0コードを実行するためにMicrosoftがサポートしているオプションがある場合はどうなりますか?はい、私はMonoについて知っていますが、とりわけMicrosoftよりも遅れています。また、SilverlightはWebブラウザーでのみ機能します。VMWareタイプのソリューションもそれを削減しません。 MicrosoftがMac自体で.NETをサポートしていない理由について、半権威的な答えはありますか?SilverlightやMonoを購入してすぐに利用できるように思えます。ネイティブのVisual Studioは必要ありません。クロスコンパイルとリモートデバッグは問題ありません。 その理由は、私が仕事をしていると、将来についての不確実性が高まり、C#ではなくC ++でより多くの開発が行われるようになるためです。まったく新しいプロジェクトがC ++の使用を選択しています。Mac(またはiPad)が必要になった場合、誰も今から18〜24か月後に "申し訳ありません"と経営陣に伝えたくありません。C ++は、(おそらく)今日の生産性の低下を意味するとしても、より安全なオプションと見なされています。
11 c#  .net  mac  mono 

4
名前空間のクラス数-コードのにおい?
複数の実行可能ファイルで使用されるC#ライブラリがあります。ライブラリには名前空間がいくつかありますが、名前空間の1つにかなりの数のクラスが含まれていることに気づきました。分類のため、そして無意識のうちに、名前空間のより深い階層を持つことは「きれい」に見えるため、単一の名前空間にあまり多くのクラスを含めることを常に避けてきました。 私の質問は、名前空間に多くのクラスがある場合、クラスが互いに関連している場合でも、他の誰かがそれを「コードのにおい」と見なしますか?サブカテゴリー化を可能にするクラスでニュアンスを見つけるために多くの努力をしますか?
11 c#  count  namespace 


1
REST APIのリンクrel =“ self”のポイントは何ですか?
HTMLドキュメントで以下をよく見ます <link rel="self" href="http://example.com/something"> またはJSONでこれのように link: { rel="self", href="http://example.com/something" } またはXMLで <atom:link rel="self" href="http://example.com/something" /> だから私はいくつかの質問がありました: なぜこのリンクを含めるのですか?それはどのような利点をもたらしますか?(それには理由があり、それは単なる「良い習慣」のお守りではないことを教えてください) このリンクをクライアントでどのように活用すればよいですか?このリンクの使用例は何ですか? このリンクを使用すべきでないのはいつですか?それを含めるのはいつ無意味ですか?
11 rest  web-api 

3
コマンドを使用して、ソースファイルのすべてのタブを自動的に解除する方法はありますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 その後、自動的に再インデントするには?ある端末画面から別の端末画面にコードをコピーしようとしましたが、表がすべてめちゃくちゃになりました。 私はこの機能を何と呼ぶべきかわからなかったので、グーグルで見つけるのが難しかった(これは一般的にタブサイズの設定方法に関連するものを返しましたが、残念ながら私が探していたものではありませんでした)。
11 vim 


3
ビジネスロジックはマイクロサービスアーキテクチャのどこに配置する必要がありますか?
私はモノリシックなアプローチに慣れているので、マイクロサービスアーキテクチャに頭を抱えようとしています。 非常に簡素化された Uber予約システムを構築しようとしているとします。:物事を単純化するために、我々は、我々は3つのサービスとクライアントのゲートウェイAPIを持っているとしましょうBooking、Drivers、Notificationと私たちは、次のワークフローを持っています: 新しい予約を作成する場合: 既存のユーザーがすでに予約しているかどうかを確認する 利用可能なドライバーのリストを取得する ドライバーに通知を送信して予約を受け取ります 運転手が予約をピックアップ すべてのメッセージングがkafkaのようなメッセージングバスではなくhttp呼び出しを介して行われるとしましょう。 したがって、この場合、Bookingサービスは既存の予約の確認を行うことができると思いました。しかし、利用可能なドライバーと通知のリストを誰が取得する必要がありますか?ゲートウェイレベルで実行することを考えていますが、ロジックは次の2つの場所に分割されています。 Gateway -利用可能なドライバーのリストを取得+通知を送信 Booking -既存の予約を確認する そして、ゲートウェイはそれを行うのに適切な場所ではないと確信していますが、Bookingサービスでそれを行っている場合、緊密に結合されているように感じますか? さらに複雑にするために、予約システムを再利用したいが、独自のビジネスロジックを追加した別のプロジェクトがある場合はどうなるでしょうか。新しいプロジェクトゲートウェイが独自のビジネスロジックを既存のものから分離できるように、ゲートウェイレベルでそれを行うことを考えたのはそのためです。 それを行う別の方法は、各プロジェクトがコア予約サービスと通信する独自​​の予約サービスを持っていることですが、ここでの最善のアプローチは何なのかわかりません:-)

4
C ++イテレーター、すべてのイテレーターが継承するイテレーター基本クラスがないのはなぜですか
私は試験に向けて学習しており、質問と回答に苦労しています。 なぜ他のすべてのイテレータが継承するイテレータ基本クラスが存在しないのですか? 私の先生はcppリファレンス " http://prntscr.com/mgj542 " の階層構造を参照していると思います。なぜそれらを使用する必要があるのか​​、他の理由を提供する必要がありますか? イテレータの種類(種類)と、コンテナの操作に使用されることを知っています。たとえば、基盤となるデータ構造が異なる可能性があるため、配列にはランダムにアクセスできますが、リンクリストにはアクセスできないため、コンテナーごとに異なるイテレーターがあり、コンテナーごとに移動方法が異なります。 それらはおそらくコンテナに応じて特殊化されたテンプレートでしょう。
11 c++  iterator 

5
Entity Frameworkによるドメイン駆動設計の落とし穴
私が研究したDDDに関するチュートリアルの多くは、主に理論をカバーしています。それらはすべて基本的なコード例(Pluralsightなど)を持っています。 Webでは、EFを使用したDDDをカバーするチュートリアルを作成しようとする試みも数人います。それらをほんの少しだけ調べ始めると、それらは互いに大きく異なることにすぐに気づきます。一部の人々は、アプリを最小限に保ち、追加のレイヤー(EFの上にリポジトリなど)を導入することを避けることを推奨します。他の人々は、追加のレイヤーを決定的に生成し、多くの場合、DbContext集約ルートに注入することによってSRPに違反します。 私が意見に基づく質問をしている場合、私はひどくお詫びしますが... 実践に関しては、Entity Frameworkは最も強力で広く使用されているORMの1つです。残念ながら、DDDに関する包括的なコースは見つかりません。 重要な側面: Entity Frameworkは、UoW&リポジトリ(DbSet)をすぐに使用できるようにします EFでは、モデルにナビゲーションプロパティがあります EFでは、すべてのモデルが常にオフで使用できますDbContext(それらはとして表されますDbSet) 落とし穴: あなたがすることはできません、あなたのモデルは、ナビゲーションプロパティを持っており、それが彼らとのコールを変更することができます-あなたの子供のモデルのみ集約ルートを経由して影響を受けている保証しますdbContext.SaveChanges() でDbContext、あなたはこのように、あなたのすべてのモデルにアクセスすることができます回避集約ルートを あなたは、経由ルートオブジェクトの子へのアクセスを制限することができますModelBuilderでのOnModelCreating法分野としてそれらをマークすることにより、(私はまだそれがDDDについて移動する正しい方法だとは思わないそれに加えて、これは将来的ににつながる可能性の冒険の種類何を評価するのは難しい- 非常に懐疑的) 矛盾: Aggregateを返すリポジトリの別のレイヤーを実装しないと、上記の落とし穴を部分的に解決することさえできません リポジトリーの追加レイヤーを実装することにより、EFの組み込み機能(すべてDbSetがすでにレポです)を無視し、アプリを複雑にします。 私の結論: 私の無知を許してください、しかし上記の情報に基づいてください-それはエンティティフレームワークがドメイン駆動設計に適切でないか、ドメイン駆動設計が不完全で時代遅れのアプローチであるかのいずれかです。 それぞれのアプローチにはメリットがあると思いますが、私は今完全に道に迷っており、EFとDDDをどのように調整するかについて少し考えていません。 私が間違っている場合-EFでDDDを実行する方法の簡単な一連の手順を詳細に説明できますか(または適切なコード例を提供できますか)。

2
配列要素に角括弧を使用する習慣はどのように発展しましたか?
多くのプログラミング言語は、構文a[i]を使用してi配列、シーケンス、またはベクトルのi番目の要素を参照します。a具体的には、CおよびPascal(1960年代後半から1970年代初頭)はこれを行います。一方、Fortran(1950年代のもの)などの一部の初期の言語では、この規則を使用していません。また、私は少し数学を研究し、数学者は間隔に角括弧、配列と行列の添え字(または配列が負でない整数の関数と考えられる場合は通常の括弧)に添え字を使用します。 だから、私の質問です:配列の添え字用のこの角かっこは、どこで、どのように、どのようなコンテキストで開発されましたか? 注:Cでの中括弧の使用に関するこの質問の真似はまったくありません。
11 history  array  syntax 

1
OOP ECSとPure ECS
まず、この質問はゲーム開発のトピックに関連していることを認識していますが、実際にはより一般的なソフトウェア生成問題に帰着するので、ここで質問することにしました。 過去1か月間に、Entity-Component-Systemsについてたくさん読んだので、今はその概念にとても慣れています。ただし、明確な「定義」が欠落しているように見える側面が1つあり、記事によって根本的に異なる解決策が提案されています。 これは、ECSがカプセル化を解除する必要があるかどうかの問題です。つまり、そのOOPスタイルのECS(コンポーネントは、それらに固有のデータをカプセル化する状態と動作の両方を持つオブジェクト)と純粋なECS(コンポーネントは、パブリックデータのみを持ち、システムが機能を提供するcスタイルの構造体)です。 フレームワーク/ API /エンジンを開発していることに注意してください。したがって、目標は、それを使用している人なら誰でも簡単に拡張できることです。これには、新しいタイプのレンダリングまたは衝突コンポーネントの追加などが含まれます。 OOPアプローチの問題 コンポーネントは他のコンポーネントのデータにアクセスする必要があります。たとえば、renderコンポーネントのdrawメソッドは、transformコンポーネントの位置にアクセスする必要があります。これにより、コードに依存関係が作成されます。 コンポーネントはポリモーフィックになる可能性があり、さらに複雑さをもたらします。たとえば、レンダーコンポーネントの仮想描画メソッドをオーバーライドするスプライトレンダーコンポーネントがある場合があります。 純粋なアプローチの問題 ポリモーフィックな動作(レンダリングなど)はどこかに実装する必要があるため、システムに外部委託するだけです。(たとえば、スプライトレンダーシステムは、レンダーノードを継承するスプライトレンダーノードを作成し、それをレンダーエンジンに追加します) システム間の通信は避けるのが難しい場合があります。たとえば、衝突システムには、そこにある具体的なレンダリングコンポーネントから計算される境界ボックスが必要な場合があります。これは、データを介して通信させることで解決できます。ただし、レンダリングシステムがバウンディングボックスコンポーネントを更新し、衝突システムがそれを使用するため、これによりインスタント更新が削除されます。システムの更新関数を呼び出す順序が定義されていないと、問題が発生する可能性があります。他のシステムがハンドラーをサブスクライブできるイベントをシステムが発生できるようにするイベントシステムがあります。ただし、これはシステムに何をすべきか、つまりvoid関数を伝える場合にのみ機能します。 追加のフラグが必要です。たとえば、タイルマップコンポーネントを見てみましょう。サイズ、タイルサイズ、インデックスリストフィールドがあります。タイルマップシステムは、それぞれの頂点配列を処理し、コンポーネントのデータに基づいてテクスチャ座標を割り当てます。ただし、フレームごとにタイルマップ全体を再計算するにはコストがかかります。したがって、システムでそれらを更新するために行われたすべての変更を追跡するために、リストが必要になります。OOPの方法では、これはタイルマップコンポーネントによってカプセル化できます。たとえば、SetTile()メソッドは、呼び出されるたびに頂点配列を更新します。 純粋なアプローチの美しさはわかりますが、従来のOOPよりも具体的にどのようなメリットがあるのか​​はよくわかりません。コンポーネント間の依存関係は、システムに隠されていますが、依然として存在しています。また、同じ目標を達成するには、さらに多くのクラスが必要になります。これは私には、決して良いことではない、やややりすぎたソリューションのように思えます。 さらに、私はパフォーマンスにそれほど関心がないので、データ指向の設計とキャッシュミスのこの全体的な考えは、私にはそれほど重要ではありません。素敵な建築物が欲しいだけです^^ それでも、私が読んだ記事や議論のほとんどは、2番目のアプローチを提案しています。どうして? アニメーション 最後に、純粋なECSでアニメーションをどのように処理するかについて質問したいと思います。現在、私はアニメーションを、0と1の間の進行状況に基づいてエンティティを操作するファンクタとして定義しています。アニメーションコンポーネントには、アニメーションのリストを持つアニメーターのリストがあります。次に、更新機能で、現在アクティブなアニメーションをエンティティに適用します。 注意: 私はこの投稿を読んだばかりですが、エンティティコンポーネントシステムアーキテクチャオブジェクトは定義によって指向されていますか?これは私よりも少し問題を説明します。基本的に同じトピックを扱っていますが、純粋なデータアプローチの方が優れている理由についてはまだ答えがありません。

4
ブラックボックスユニットテストとは何ですか?
最近、修士プログラムのソフトウェアエンジニアリングコースの最終試験を受けましたが、試験の質問の1つは次のとおりです。 Unit Testing is considered: a. White-box Testing b. Black-box Testing c. Either 7年間のソフトウェア開発経験の中で、ユニットテストは常にホワイトボックスアプローチを採用してきました。テスターは、テストを作成する間、常にユニットの実装について完全な知識を持っています。ブラックボックステストは、統合、システム、および受け入れテストという形で常に後になります。 ただし、(教授によると)試験に対する正解は、単体テストはホワイトボックステストまたはブラックボックステストのいずれかであるということです。 私はいくつかの調査を行いましたが、多くの場合、「ブラックボックスユニットテスト」は、コードが作成される前にユニットテストが記述されるテストファーストアプローチを記述するために使用されているようです。しかし、私の意見では、これはまだホワイトボックステストです。実装はまだ存在していませんが、テストを書いている人は一般に、ソースコードの実装方法についてかなり良い考えを持っています。 ブラックボックスユニットテストのしくみ(本当にそうである場合)とホワイトボックスユニットテストとの違いを誰かに説明してもらえますか?

3
DDD-貧血ドメインモデルはアンチパターンですか?リッチドメインモデルを使用しているのでしょうか。[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 貧血ドメインモデルは、明らかにオブジェクト指向の原則などに反するため、EvansとFowlerによって以前から批判されていました。DDDコミュニティは、この発言と明確に一致しています。 しかし、近年、これはアンチパターンではなく、SOLIDの原則に従う例であると主張する意見の相違があります。 私は長年、Spring Frameworkを使用して作業してきました。すべての会社のすべてのプロジェクトには、貧血モデル(JPAエンティティ)で動作するリポジトリを使用して、ビジネスロジックを含むサービスレイヤーが常にあります。さらに、ほとんどのサンプルは、Springの公式のサンプルでさえ、この作業方法を示しています。 私の質問は次のとおりです。貧血ドメインモデルは依然としてアンチパターンと見なされていますか?私たち全員が(DDDに関して)間違ったことをしたことがありますか?リッチドメインモデルを持つことはSOLIDの原則に違反すると思いませんか?

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