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

ソフトウェアシステムの高レベルの設計と説明。アーキテクチャ設計では、実装、アルゴリズム、およびデータ表現の詳細を抽出して、「ブラックボックス」コンポーネントの相互作用に集中します。

4
「通知センター」パターンは、プログラム設計の良し悪しを促進しますか?
Cocoa NSNotificationCenterなど、これらのメッセージハブスタイルのAPIに出くわすことがあります。http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html 通常、これらのAPIは、メッセージ/イベントをサブスクライブまたはブロードキャストするグローバルアクセスポイントを提供します。これは、依存関係がAPIで明示されていないがソースコードに隠されているフラットで非構造化のプログラムアーキテクチャを促進するため、これが問題だと考えています。オブジェクトの所有権と階層について考える必要はありませんが、プログラム内の任意のオブジェクトを呼び出すことで、任意のコードを呼び出すことができます。しかし、これは良いことでしょうか? このパターンは一般に、プログラム設計の良し悪しを助長しますか?コードをテストするのが難しくなりますか、それとも簡単になりますか? この質問が曖昧すぎるか広すぎる場合はご容赦ください。私は、このようなAPIの広範な使用の潜在的な結果と、それを使用できるさまざまな方法について頭をかき回しています。 編集:このパターンの最大の問題は、APIが依存関係とオブジェクトカップリングについて「嘘をつく」ことであり、この例で説明できることです。 myObj = new Foo(); myOtherObj = new Bar(); print myOtherObj.someValue; // prints 0 myObj.doSomething(); print myOtherObj.someValue; // prints 1, unexpectedly, because I never indicated that these objects had anything to do with each other

4
チームのかんばんの品質属性を追跡するにはどうすればよいですか?
私のチームは、日々の進行状況を追跡するためにかんばんシステムを使用しており、機能(ユーザーストーリーとしてキャプチャ)の進行状況を理解するために非常にうまく機能しています。最近までうまく機能していた機能を開発するにつれて、システム設計の出現をほぼ許可しました。過去2週間で、パフォーマンスと変更可能性の品質属性に特に関連するアーキテクチャのトレードオフについていくつかの議論がありました。 私が思うに、機能を実装してシステムを設計するときに、アーキテクチャについて暗黙的に決定を下しますが、既知の品質属性要件に関してはそれらの決定を考慮していません。これらの重要な設計上の決定がどのように行われているのかを追跡/キャプチャ/視覚的に表現できれば、チームメンバーが実装中にシステムのアーキテクチャにさらなる緊張を生じさせないようになります。そしてもちろん、より複雑なものに、私たちのボード上の機能はありません、排他的、機能的で、時には建築の複雑さを隠します! チームのかんばんの品質属性(またはその他のアーキテクチャに関連する決定)の進捗を視覚的に追跡するにはどうすればよいですか?

2
クリーンアーキテクチャ:ビューモデルとは
彼の本「Clean Architecture」で、叔父ボブは、プレゼンターが受け取ったデータを「表示モデル」と呼ぶものに入れるべきだと言っています。 これは、Model-View-ViewModel(MVVM)設計パターンの「ViewModel」と同じものですか、それとも単純なデータ転送オブジェクト(DTO)ですか? 単純なDTO ではない場合、ビューにどのように関連しますか?ビューは、オブザーバー関係を通じて更新されますか? 私の推測では、彼の本の第23章でロバート・マーティンは次のように述べているため、MVVMのViewModelに似ていると思います。 [The Presenter's]ジョブは、アプリケーションからデータを受け取り、プレゼンテーション用にフォーマットして、Viewがデータを画面に簡単に移動できるようにすることです。たとえば、アプリケーションでフィールドに日付を表​​示する場合、プレゼンターにDateオブジェクトを渡します。プレゼンターは、そのデータを適切な文字列にフォーマットし、Viewモデルと呼ばれる単純なデータ構造に配置します。Viewモデルでは、データを見つけることができます。 これは、たとえばDTOの場合のように、単に関数引数として受け取るのではなく、Viewが何らかの方法でViewModelに接続されていることを意味します。 あなたは、画像を見れば、プレゼンターはビューモデルを使用しますが、ので、私はこれを考えるもう一つの理由はありませんビューを。一方、プレゼンターは出力境界と出力データDTOの両方を使用します。 DTOでもMVVMのViewModelでもない場合は、それが何であるかを詳しく説明してください。

4
データ値をプログラムにハードコーディングする利点はありますか?
私は独学で初心者っぽいコーダーなので、プログラマーの専門用語に釘付けにならなければ謝罪します。 私は、データのクエリからレポートを生成するツールを本質的に作成する開発者に継続的に更新されるデータを提供するプロジェクトに取り組んでいます。 関係者全員が、データ値(スキーマではなく、ドメイン/値自体)をレポート生成プログラムにハードコーディングする必要があると考えているようです。 たとえば、人員について報告しているとします。レポートは各部門の見出しを持つカテゴリに分割され、各部門の見出しの下に役職の小見出しが表示され、各小見出しの下に従業員のリストが表示されます。開発者は、部門と役職をハードコーディングしたいと考えています。一方、実行時にそれらをクエリし、レコードでソートし、そこにある値に基づいてレポートヘッダーを動的に生成できると思います。 潜在的な値のリストは時間とともに変化するため(たとえば、部門の作成/名前の変更、新しい役職の追加など)、コードを継続的に更新する必要があります。私は、コードのメンテナンス手順をスキップして、レポートを動的に整理できるように思えます。 私は開発者ではないので、何が欠けているのだろうと思っています。このようなツールに値をハードコーディングするとどのような利点がありますか?これは通常、プログラムの設計方法ですか?

3
MVVMとサービスパターン
MVVMパターンを使用してWPFアプリケーションを構築しています。現在、私のビューモデルは、サービスレイヤーを呼び出してモデルを取得し(ビューモデルとは無関係です)、モデルをビューモデルに変換します。コンストラクター注入を使用して、必要なサービスをビューモデルに渡します。 簡単にテストでき、依存関係の少ないビューモデルでうまく機能しますが、複雑なモデルのviewModelを作成しようとするとすぐに、多くのサービスが挿入されたコンストラクターがあります(各依存関係と使用可能なすべての値のリストを取得するためのもの)たとえば、itemsSourceにバインドします)。そのような複数のサービスをどのように処理し、簡単にユニットテストできるビューモデルがまだあるのか疑問に思っています。 私はいくつかの解決策を考えています: 使用可能なすべてのサービスをインターフェイスとして含むサービスシングルトン(IServices)を作成します。例:Services.Current.XXXService.Retrieve()、Services.Current.YYYService.Retrieve()。そうすれば、大量のサービスパラメータを含む巨大なコンストラクタはありません。 viewModelによって使用されるサービスのファサードを作成し、このオブジェクトを私のviewmodelのctorに渡します。しかし、その後、複雑なビューモデルごとにファサードを作成する必要があります。 この種のアーキテクチャを実装する「正しい」方法は何だと思いますか?

2
マルチテナントアプリケーションとは正確には何ですか?
オンラインで利用可能な定義によると、「マルチテナンシーは、ソフトウェアアプリケーションの単一のインスタンスが複数の顧客にサービスを提供するアーキテクチャです」です。つまり、私はレストランまたは学校のWebサイトを所有しており、学校の管理製品を購入したときに提供する資格情報を使用して、自分のデータでアプリケーションを使用するために別のレストランまたは学校へのアクセスを提供します。私のウェブサイトと同様のようですschoolmanagement.comと私のような別の学校のクライアントに異なるサブドメインを提供school1.schoolmanagement.com&school2.schoolmanagement.comが、コードは、これらのサブドメインの両方の背後に同じです。両方の学校の機能やテーマは異なり、それぞれのデータベースに依存しています。だから私は提供する必要がありますschoolmanagement.comそれぞれのURLなどへのログイン資格情報Iリダイレクトに基づいてログインのために、私のクライアントのログイン一度school1.schoolmanagement.com。 これは、マルチテナントアプリケーションについての私の理解です。私の理解は正しいですか?私が通過できるオンラインマルチテナントアプリケーションはありますか?

4
階層化ソフトウェアアーキテクチャの同じ層のオブジェクト間に依存関係があることは問題ですか?
n層アーキテクチャと依存性注入を備えた中規模のソフトウェアを考えると、ある層に属するオブジェクトは下位層のオブジェクトに依存することができますが、上位層のオブジェクトには決して依存しないと言えます。 しかし、同じレイヤーの他のオブジェクトに依存するオブジェクトについてどう考えるべきかわかりません。 例として、3つのレイヤーと画像内のオブジェクトのような複数のオブジェクトを持つアプリケーションを想定してみましょう。明らかに、トップダウンの依存関係(緑の矢印)は問題ありませんが、ボトムアップ(赤い矢印)は問題ありませんが、同じレイヤー内の依存関係(黄色の矢印)はどうでしょうか。 循環依存関係を除き、発生する可能性のある他の問題と、この場合に階層化アーキテクチャがどれだけ違反されているかについて興味があります。

2
オブジェクト指向設計で何をする必要があるかを実際に調べる方法は?
最初の免責事項:この質問がこのウェブサイトに適合するかどうかはわかりませんが、私だけでなく、初心者である他の人にとっても関連する質問であることに変わりはありません。ここに収まるように質問を改善できる場合は、intコメントを指摘してください。それが合わない場合は、私にも知らせてください。可能であれば、これに関する良いフォーラムが見つからなかったので、これについて議論できる場所を教えてください。 私はPHPを勉強した2009年にプログラミングを学びました。2012年の後半に、C#と.NETに移行しました。とにかく、コーディングは問題ではなく、アルゴリズムを書き留めることは私の問題ではありません。私の実際の問題は、要件を達成するために何をコーディングする必要があるか、どこでコーディングする必要があるかを知ることです。 Web上で利用できるそこにほとんどのコースは対処方法ここでは私のポイントではないなど、いくつかのAPIセットを使用する方法、特定の言語でコードを書く方法を- 。 ここ数年、オブジェクト指向の分析と設計、設計パターン、ドメイン駆動設計など、たくさんのことを読みました。たとえば、SOLIDの原則、ドメインエキスパートの関与の必要性、ユビキタス言語の開発など、DDDの主要なアイデアのいくつかを理解しています。少なくとも理にかなった理論的背景があると思います。 しかし、それが練習になると、私は災害だと感じます。しばらく前に、私はすでに他の誰かによって開発されていた金融システムの開発を続ける必要がありました。それは、C#とWinFormsで開発されたそのような「古いシステム」です。実際のドメインの複雑さ、多くのビジネスルールなどを含むプロジェクトを選んだのは初めてでした。 ほとんどの場合、要件を受け取ったとき、「一体どうやってこれを行うことができるのか」と思います。-どうすればよいのかを理解するために、要件の作業を開始する方法すらわからない。私が信じている主な混乱は、私がコーディングしなければならないもの、クラス、インターフェース、そして各ロジックがどこに行くのか、各クラスがどのクラスにあるべきなのかです。問題は、どこから始めればいいかわからないことです。 ほとんどの場合、非常に多くの考えでいくつかのアイデアになりますが、私のアイデアが正しいかどうかを判断する方法がわかりません。 推奨されたソフトウェアアーキテクチャとオブジェクト指向に関する多くのことを読んだと言ったので、これは理論の欠如ではないと思いますが、実際には何をしなければならないかを特定するのにはあまり役立ちませんでした。 それでは、どうすればオブジェクト指向設計を実際に 行うことができますか?私が学びたいのは、与えられた要件は、何をすべきか、各コードがどこに属しているかを見つけるプロセスでそれらに取り組む方法を知っていることです。自分の考えが正しいかどうかを判断する方法を学ぶにはどうすればよいですか? ここで答えとしてこれを完全に説明することは不可能だと思います。しかし、私が探しているのは、サイトのスタイルに応じて、単に概要を示し、アイデアを拡大し、これらのことを実際に学習するために使用できる参照(書籍、オンラインコースなど)を示す回答です。

3
フラックスパターンを理解する
私は実際にフラックスのパターンを研究していますが、ストアに関して理解できないことがあります。 彼らは正確に何ですか? 私は多くの記事を読みましたが、それはドメインに関係しているようです。 これは、API呼び出しまたはバックエンド呼び出しに関連する「抽象的な」部分であることを意味しますか? 私にはあまりはっきりしていません。 編集:それは角度の工場と同じものでしたか?リモートデータの取得、ビジネスタスクの作成、アプリの状態の保存(現在のユーザーの接続など)

2
堅牢性とフォールトトレランスの違いは何ですか?
システム/プログラム/分散アルゴリズム/ ...は、多くの場合、述語堅牢またはフォールトトレラントで記述されています。 違いはなんですか? 詳細: + robust + "fault-tolerant"でGoogleを検索すると、2回しかヒットしませんが、どちらも役に立ちません。 Googleで学者の用語を検索すると、タイトルに両方の用語が含まれている多くの論文が見つかります。残念ながら、彼らは用語を正確に定義していません:(しかし、彼らは両方の用語を使用しているので、どちらも他方を意味しないようです。

1
機能的リアクティブ/リレーショナルプログラミング–違いはありますか?
私が使用してきた反応ココア(GitHubによる)、機能性反応性今しばらくの間、ココアライブラリで使用するためのプログラミングAPIを、ちょうど読みました「タールピットのアウト」、おそらくその背後にある概念を提示することを紙、私は少し混乱しています。 この論文は(私が理解しているように)関数関係プログラミングを提示します。データ間の関係は、必要な「偶発的な」ロジックと状態の量を減らすためにFRPシステムによって強制される条件で作成されます。 私の質問は、これらの2つの概念-FR(eactive)PとFR(elational)Pは本質的に同じものですか(前者は後者の実装にすぎません)、または2つのコアの違いはありますか?残念ながら、現時点では、この分野に関する私の知識は、それらを十分に差別化するのに十分ではありません。 違いがある場合は、名前が示すように、データの変更に反応しているように見えます。確かに、Reactive Cocoa(およびC#のRx)には、データの変更でトリガーされるシグナルを作成するという概念があり、時間をかけて継続的に値を変更するために使用できます。 これは違いですか?そうでない場合、何ですか? (不適切なタグ付けはご容赦ください。関連するタグが見つからず、まだ作成できません。可能な場合は、タグをより適切なものに更新してください。)

3
自動UIテストを介してどの機能をテストする必要がありますか?
最近、コンサルタントに、機能が自動化されたUIテスト(Selenium、コード化されたUIなど)でしかテストできない場合、根本的なアーキテクチャの問題があると言われました。このステートメントは少し極端かもしれませんが、UIテストが自動化されたテストスイート全体のごく一部を構成するという点で、テストピラミッドと同じラインに沿っています。 それでは、どのような機能に自動UIテストが必要ですか?優れたアーキテクチャを備えたシステムには、UIテストでしか検証できない機能が残っていますか、それともこれらのテストは単体テストとサービステストの「バックアップ」としてのみ機能しますか?

3
IValidatableObjectと単一の責任
ビューモデルでIValidatableObjectを実装し、カスタム検証を追加できるようにするMVCの拡張ポイントが気に入っています。 このコードを唯一の検証ロジックにして、コントローラーを無駄のないものにしようとしています。 if (!ModelState.IsValid) return View(loginViewModel); たとえば、ログインビューモデルはIValidatableObjectを実装し、コンストラクターインジェクションを介してILoginValidatorオブジェクトを取得します。 public interface ILoginValidator { bool UserExists(string email); bool IsLoginValid(string userName, string password); } ビューモデルにインスタンスを注入するNinjectは、実際には一般的な慣行ではないようです。 これは良いアプローチですか?より良いものはありますか?

2
この設計を適切なDDDに近づける方法は?
私は数日間DDDについて読みましたが、このサンプルデザインの支援が必要です。ドメインオブジェクトがアプリケーション層にメソッドを表示することを許可されていない場合、DDDのすべてのルールにより、どのように構築するかについて非常に混乱しています。行動を調整する他の場所は?リポジトリーをエンティティーに注入することは許可されていないため、エンティティー自体が状態で動作する必要があります。次に、エンティティはドメインから何か他のものを知る必要がありますが、他のエンティティオブジェクトも注入することはできませんか?これらのことのいくつかは私には理にかなっていますが、いくつかはそうではありません。すべての例は注文と製品に関するものであり、他の例を繰り返し繰り返しているため、機能全体を構築する方法の良い例をまだ見つけていません。私は例を読むことで最もよく学び、これまでにDDDについて得た情報を使用して機能を構築しようとしました。 私が間違っていることとそれを修正する方法を指摘するためにあなたの助けが必要です。エンティティを別のエンティティに注入できない場合、適切に実行する方法を簡単に確認できます。 私の例では、ユーザーとモデレーターがいます。モデレーターはユーザーを禁止できますが、ビジネスルールがあります:1日あたり3人のみです。関係を示すためにクラス図を設定しようとしました(以下のコード): interface iUser { public function getUserId(); public function getUsername(); } class User implements iUser { protected $_id; protected $_username; public function __construct(UserId $user_id, Username $username) { $this->_id = $user_id; $this->_username = $username; } public function getUserId() { return $this->_id; } public function getUsername() { return $this->_username; } …

6
「単一ページWebアプリ」のアーキテクチャガイドライン
「シングルページ」Webアプリケーションを構築するためのサイドプロジェクトを開始します。アプリケーションはリアルタイムである必要があり、変更が発生するとクライアントに更新を送信します。 これらの種類のアプリケーションのアーキテクチャに関するベストプラクティスアプローチに役立つリソースはありますか。私がこれまでに見つけた最高のリソースは、ここではtrelloアーキテクチャの記事です:http://blog.fogcreek.com/the-trello-tech-stack/ 私にとって、このアーキテクチャは非常にセクシーですが、おそらく私の特定のニーズのために過剰に設計されています-私は同様の要件を持っていますが。サーバー側でサブ/パブに煩わされる必要があるかどうか、私は何かが起こったときにサーバーから更新をプッシュするだけではいけないのかと思っていますクライアントに更新を送信します)。 技術的には、おそらくNode.JSまたはRubyでこれを構築しようと考えていますが、アーキテクチャのガイドラインは、基礎となるサーバーテクノロジーにある程度適用されるはずです。

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