ソフトウェア工学

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

2
ASP.Net Core:ViewComponent vs EditorTemplate / DisplayTemplate vs @inject
そのため、ASP.Net Coreでビューにレンダリングする「コントロール」を作成するための良い方法を探していました。これまでのところ、3つのオプションがあることがわかりました。 ViewComponents:これらはミニコントローラーのようなもので、かみそりのページ(ビュー)からレンダリングするアクションのようなメソッドを使用します。私はそれらが自己完結型ロジックを持つことができるので、どの親ビューモデルにも依存しません。 EditorTemplate / DisplayTemplateフォルダー:これらは「Views / Shared /」の下に存在し、モデルプロパティをそれらに(DisplayFor()またはを使用してEditorFor())渡すことでビューにプルできます。 ASP.Net Coreの@inject:ビューに型を挿入できます(部分的なビューを関連付けることができるかどうかわかりません)。 部分的なビューを直接含める機能は、移植する制御システムの意図ではないため、省略します。 タグヘルパー-現在のビューコンテキストを挿入して、これらからコントロールを構築することもできます。 古いASP.NET MVCアプリでは、テンプレートからレンダリングされるいくつかのコントロールがありました(#2)。ただし、.Net Coreの場合、関連するかみそりビュー(コントロールは基本的にかみそりビューをラップするだけ)をレンダリングするために、代わりにViewComponents(より強力に見える)を使用することを考えています。とりあえず、ViewComponentsへの変換を試すつもりですが、この件についてのアドバイスがありがたいです。ありがとう。

4
bashプロファイルをバージョン管理するにはどうすればよいですか?
だから私はバージョン管理にとても慣れていて、私のbashプロファイルのバージョンの追跡を開始しようと考え~/.bash_profileました。GitHubでさまざまなエイリアスなどを共有できるという追加の利点があります。 私の.bash_profileファイルをホームディレクトリに残す必要があると仮定すると(通常のファイルのように単独で追跡するためにディレクトリにラップすることはできません)、これを行うための最良の方法は何ですか?ホームディレクトリでgit repoを初期化したくないので、存在する他のすべてのファイルを無視する必要があります。 では、何が良い解決策となるのでしょうか? 別のディレクトリにコピーを作成し、時々それを更新/コミットできると思いますが、実装されたディレクトリ内の単一のファイルをバージョン管理するための良い方法があるかどうか知りたいですか?

3
「ファクトリーメソッドはテンプレートメソッドの特殊化」です。どうやって?
2つの間の類似点と相違点: テンプレートメソッド 継承に依存します。 アルゴリズムのステップを定義し、それらを実装するタスクをサブクラスに任せます。 ファクトリーメソッド 継承に依存します。 スーパークラスは、オブジェクトを作成するためのインターフェースを定義します。サブクラスは、インスタンス化する具象クラスを決定します。 2つ並べて: 「ファクトリーメソッドはテンプレートメソッドの特殊化」というフレーズの意味がわかりません(Head First Design Patternsブックにあります)。ではBeverage、私たちの方法持ってprepareいるfinalと一連の手順を定義します。にPizzaStoreあるメソッドがありabstract、サブクラスがそれを再定義します。後者は前者を特化したものですか?

2
単体テストユーティリティクラス
私たち全員が、さまざまなソースからの使用のために、静的メソッドのみを含むいくつかのユーティリティクラスを持っています。ここで、このコードのテストに向けて実行できる2つの方法があります。 アプローチ1: ユーティリティクラス用に個別の単体テストを用意します。それらが呼び出されているところはどこでも、PowerMockなどのプロビジョニングが用意されているテストフレームワークを使用して相互作用を模擬します。これは基本的に、ユーティリティクラスをシステムの個別のコンポーネントとして扱い、個別にテストして保守する必要があります。 アプローチ2: ユーティリティクラスの単体テストを記述しないでください。ただし、このユーティリティクラスと対話する他のコアクラス用に記述されたテストでは、その相互作用が発生します。これにより、このユーティリティクラスで記述されたコードがさまざまなユースケースに対して適切にテストされることが本質的に保証されます。何かが壊れた場合、他のコンポーネントのテストはそれをキャッチできるはずです。 どちらのアプローチが望ましいか、または他の方法でこれに取り組む方法があるかどうかについて、あなたの考えを共有してください。

1
クライアントは集約ルート以外のエンティティのメソッドを呼び出すことができますか?
エバンスは、彼の本「ドメイン駆動設計」の第6章「集合体」で、集合体の概念を紹介しています。彼はさらに、その概念を実装に変換するためのルールを定義しています(Evans 2009、pp。128-129): ルートENTITYは内部ENTITIESへの参照を他のオブジェクトに渡すことができますが、それらのオブジェクトは一時的にしか使用できず、参照を保持できない場合があります。 他のルールについて詳しく説明した後、彼はそれらをこの段落に要約します。 エンティティと値オブジェクトを集合体にクラスター化し、それぞれの周りに境界を定義します。各Aggregateのルートになるエンティティを1つ選択し、ルートを介して境界内のオブジェクトへのすべてのアクセスを制御します。外部オブジェクトがルートへの参照のみを保持できるようにします。内部メンバーへの一時的な参照は、単一の操作内でのみ使用するために渡すことができます。ルートはアクセスを制御するため、内部構造の変更によって盲目的に対処することはできません。この配置により、Aggregate内のオブジェクトおよびすべての状態変化におけるAggregate全体に対してすべての不変式を適用することが現実的になります。 では、一時的な使用とは正確にはどういう意味ですか? 私の同僚は、集約ルートのみがクライアントのパブリックインターフェイスを公開していることを理解しています。クライアントは、集約ルート以外のエンティティで操作を呼び出す機会がありません。 引用された文に対する私の理解は異なります。実際、クライアントが内部エンティティの操作を呼び出すことを明示的に許可していることを理解しています。しかし、それらをルートから取得した後にのみ。 具体的な例を見てみましょう: Cart多くので構成されているとしましょうItems。それぞれにItemがありQuantityます。モデルはユースケース「1つの特定のアイテムの数量を増やす」をサポートする必要があります。アイテムの外部に影響を与える不変式に違反することはできません。 クライアントが呼び出しによってこれを実行できる場合、cart.item(itemId).increaseQuantity()またはクライアントに呼び出しのみを許可する必要がある場合、モデルは上記のルールに違反していcart.increaseItemQuantity(itemId)ますか?後者の利点は何でしょうか?

2
複数のアイテムを返すための規則はありますか?
特にPythonでは(これが一般化するかどうかはわかりません)、関数から複数のアイテムを返す「最良の」方法はありますか? def func1(): return a,b #equivalent to (a,b) def func2(): return[a,b] def func3(): return{"valueA":a,"valueB":b} 最初は私が最も一般的に見るものですが、最後のものがあなたが出力に名前を付けたのでより読みやすいコードを作成するように感じますが、私はこの方法によって作成されたある種のオーバーヘッドを見逃しているかもしれませんか?
10 python  variables 

1
異なるスコープからのi18nオブジェクトへのアクセス
私はMVCパターンを学ぶ方法として始まった私の個人的なフレームワークを構築していて、今ではほとんどのフレームワークよりも好きなものに進んでいます(これはおそらく私が好きなものを追加して、私がしないものを変更したためです)好きではありませんが、それにもかかわらず)良いか悪いかにかかわらず、私はいくつかのプロジェクトでそれを使用しています。 私が現在抱えている問題は、i18n機能にアクセスするための適切な方法を思い付かないことです(これは実際にはi18nではなく、単なる翻訳であり、完全なi18nサポートは含まれていません)。 それが機能する方法は、構成ファイルを言語ファイルとして使用することです。Configフレームワークでは構成ファイルが動的にロードされるため、クラスを使用してそれらをロードするのが非常に便利だと考えたため、必要でない限りここで一目で把握できます。 class Config { private static $settings = array(); private function __construct() { } public static function load($file) { $path = PROJECT_PATH . '/config/' . $file . '.php'; if (is_file($path)) { $settings = require($path); } else { throw new Exception('Configuration file [' . $file . '] doesn\'t exist', …

3
CQRS / ESでは、コマンドは別のコマンドを作成できますか?
CQRS / ESでは、コマンドはクライアントからサーバーに送信され、適切なコマンドハンドラーにルーティングされます。そのコマンドハンドラーは、リポジトリーからアグリゲートをロードし、その上のいくつかのメソッドを呼び出して、それをリポジトリーに保存します。イベントが生成されます。イベントハンドラー/佐賀/プロセスマネージャーは、コマンドを発行するためにこれらのイベントをリッスンできます。 そのため、コマンド(入力)はイベント(出力)を生成し、それがシステムにさらにコマンド(入力)をフィードバックできます。さて、コマンドがイベントを発行せず、別のコマンドをエンキューするのが一般的な方法でしょうか?このようなアプローチは、外部プロセスでの実行を強制するために使用できます。 編集: 私が考えている特定のユースケースは、支払いの詳細の処理です。クライアントはPayInvoiceコマンドを送信します。そのペイロードにはユーザーのクレジットカードの詳細が含まれます。PayInvoiceHandler通過MakeInvoicePayment支払いゲートウェイとの相互作用の原因である別のプロセスにコマンドを。支払いが成功すると、InvoicePaidイベントが生成されます。PayInvoiceコマンドが保持された後、コマンドが保持される前に何らかの理由でシステムがクラッシュした場合MakeInvoicePaymentは、これを手動で追跡できます(支払いは行われません)。MakeInvoicePaymentコマンドが持続した後、システムがクラッシュする前にInvoicePaidイベントが持続する場合、ユーザーのクレジットカードに請求が行われているのに、請求書に支払い済みのフラグが付けられていない可能性があります。その場合、状況を手動で調査し、請求書に手動で支払い済みのマークを付ける必要があります。

1
GitHubとTFS / Visual Studio Team Servicesの組み合わせ
Visual Studio Team ServicesやTFSをGitHubリポジトリと組み合わせることができるかどうか疑問に思います。どちらの製品にも独自の利点があると考えており、社内の1つのリポジトリで作業したいと考えています。 VSTS / TFSを使用する理由は、Visual Studio for Work Itemsの統合です。

3
モバイルアプリの複数のバージョンをサポート
現在サーバーへのWebインターフェースのみをサポートしている既存のアプリケーションを補足するために、ネイティブモバイルアプリケーションのスイートを構築しています。アプリケーションは、クライアントが独自のインフラストラクチャにインストールしてホストすることも、それを利用したいクライアントのために自分でホストすることもできます。大企業のお客様は通常、セルフホスティングを選択しましたが、小規模のお客様はホスティングオプションを選択しました。 アプリケーションの複数のバージョンをサポートする必要があります。すべてのお客様が同時にアップグレードを希望するわけではありません。Webインターフェイスでは、サーバーのインストールに関連付けられたサーバーバージョンがWebインターフェイスで自動的に使用されるため、複数のバージョンのサポートは難しくありません。通常、App Storeで利用できるアプリが1つしかないモバイルアプリケーションでは、モバイルアプリでのさまざまなレベルのサーバーAPIと機能のサポートが課題になります。他の人が問題をどのように解決しているか知りたいです。私の心には、次のようなオプションがあります。 アプリストアでアプリの複数のバージョンをサポートします。 モバイルアプリケーションにサポートを組み込み、通信しているサーバーのAPIバージョンを自動的に決定し、関連するサーバーAPIエンドポイントに呼び出しをルーティングします。また、サーバーのさまざまなバージョンで利用できる機能に基づいて、モバイルアプリケーションの機能を有効/無効にするために、ある種の機能切り替えメカニズムを使用することも紹介します。 アプリのデプロイにアプリストアを使用しないでください。アプリのダウンロードとインストールに使用できるバージョン固有のURLをユーザーに示します。 オプション1 -IMOはアプリのユーザーを混乱させます。また、実際には2つの独立したアプリケーションであるため、あるバージョンのアプリから次のバージョンへの移行パスは適切ではありません。 オプション2-一方、UIビジュアルは、基本的に、通信しているサーバーAPIのバージョンで利用可能な機能に適応する必要があることを考慮すると、すぐに非常に複雑になる可能性があります。また、必要なサーバーAPI呼び出しのさまざまなバージョンをサポートする必要があります。 オプション3-アプリのサイドローディングを行う場合、Androidの世界で可能ですが、私の知る限り、iOSではサポートされておらず、今後のWindows 10モバイルアプリの画像はどのようになるかわかりません。 この問題に取り組むために他にどのようなアプローチがありますか?私たちがネイティブアプリを作成しているという事実について議論しないでください。それは私が求めていることではありません。サーバーAPIの異なるバージョンと通信する同じネイティブモバイルアプリの複数のバージョンをサポートする問題に他の人々がどのように取り組んでいるのかについてのガイダンスを探しています。

2
LINQ selectのBig O等価
代わりにLINQ選択を使用すると、ネストされたループのBig O等価に変更があるかどうかを確認しようとしています。 public void myFunc(List<Foo> fooList, List<Bar> barList) { foreach(Foo foo in fooList) { foreach(Bar bar in barList) { if(foo.PropA == bar.PropA && bar.PropZ.HasValue) foo.PropC = foo.PropB * bar.PropZ; } } } このネストされたループの例は、複雑さのためにO(n ^ 2)であると思います。 ネストされたループを次のようなLINQ選択に置き換えました。 public void myFunc(List<Foo> fooList, List<Bar> barList) { foreach(Foo foo in fooList) { Bar bar …
10 c#  big-o 

1
クラスへのデータ処理ロジックの注入
よりエレガントで、プロセッサをCommandProcessorDispatcherクラスに注入する方法を見つけたいです。または、別のソリューションにすることもできます(目標は、各コマンド処理ロジックを独立したクラスに分離することです)。たぶん、ここでいくつかのデザインパターンが役立ちます。 public interface ICommand { } public class StartCommand : ICommand { } public class StopCommand : ICommand { } public interface ICommandProcessor<in T> where T : ICommand { void Process(T command); } public class StartCommandProcessor : ICommandProcessor<StartCommand> { public void Process(StartCommand command) { } } public class StopCommandProcessor : …

2
リポジトリパターンとDAO管理エンティティ
DAO、DAL、ドメイン駆動設計などのコンセプトは初めてです。最後に、パーシスタンスレイヤー(mysqlデータベース)を、Webアプリケーションのビジネスオブジェクトおよびロジックから切り離したいと考えています。DAOのコンセプトは気に入りましたが、他のエンティティが関連付けられているデータベースからビジネスオブジェクトを作成しようとすると、DAOの実装に行き詰まりました(dbテーブルの外部キーで表されます)。 これらの参照(集計)はDAOパターンを使用してどのように処理されますか?すべてのオンラインDAOの例は単純で、(他のエンティティや値オブジェクトを参照せずに)値オブジェクトのようなビジネスオブジェクトのみの作成を示しています。依存性注入を使用して行われますか?そうであれば、依存関係はどこに作成されますか? さらに読むことで、DDDからのリポジトリパターンは、バックグラウンドでDAOを使用し、オブジェクトの集約を処理する可能性を与えると思います。私が理解しているように、それはいわゆるルート(すべての参照がロードされたエンティティまたはレイジーロードされたエンティティ)を外界に提供するだけです。DAOの使用時にリポジトリは推奨されますか、それともDAO自体がビジネスオブジェクトに対する永続性の無知を維持することによってこの機能を提供できますか? 私はORMツールを使用しておらず、これらの基本的なパターンを直接探求したくはありません。
10 repository  entity  dao 

2
ライブラリでのEINTRの適切な処理方法
EINTR図書館で推奨されるエチケットは何ですか? 現在、POSIX APIでいくつかのファイルシステムタスクを実行する関数を書いていますが、使用する多くの呼び出しはを返す可能性がありEINTRます。さらに、この関数は状況によってはブロックされる場合があります。(興味のある人のために、それはロック機構を実装しています。) これをできるだけ一般的にするために、中断されたシステムコールを処理する適切な方法を知りたいと思います。 私が読んだほとんどの情報源から、人々は通常、電話を再試行し、ビジネスを続けます。ただし、かなりの時間がかかる場合があるため、機能を中断する正当な理由がある場合があるため、ここでそれを行うのが正しいかどうかはわかりません。さらに、それはEINTR単にが関数に飲み込まれることを意味し、呼び出し元はそれが発生したことを示しません。 私の現在の戦略はEINTR、発信者に受信して通知した場合、すぐに操作を中止することです。このようにして、呼び出し元は私の機能を再試行するかどうかを決定できますよね?(または、おそらく私の信号の理解に欠陥がありますか?)
10 c  libraries  signals  posix 

2
オプションのモジュールをインポートしようとするときにImportErrorをキャッチしても安全ですか?
通常、このパターンは、作業中のすべてのPythonプロジェクトで少なくとも1回は見られます。たとえば、Djangoプロジェクトでは、これは多くの場合、基本設定ファイルの最後に追加されます。 try: from .local_settings import * except ImportError: pass また: try: import simplejson as json except ImportError: import json これはいつも私を少しでも悩ませてきました。モジュールが正常にインポートされた後、ImportErrorそれ自体がトリガーされるとどうなりますか?たとえば、最初の例では、local_settingsモジュールは存在しますが、local_settings存在しないモジュールをインポートしようとします。 これはオプションのモジュールをインポートする最も安全な方法ですか、この機能を実現するためのより良い方法はありますか?それはコンテキスト/使用法に依存しますか(そうであれば、このアプローチをいつ使用するかを決定するガイドラインは何ですか?)

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