問題タブ [architecture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database-design - 大規模なシステム変更の実施
「捨てるために作る」というフレーズに慣れているなら、まあ、私たちはそれをやったようです。オンライン アプリのバージョン 1 の制限に達しています。次の方法で物事をクリーンアップする時が来ました。
- コードと UI の再編成
- UI プロセスの統一
- より多くの機能を追加する
- 未来のための建物
- 上記のすべてを処理するためにデータベース構造を変更する
この移行を実現する最善の方法は何ですか?
すべてのユーザーを (システムが完成したら) 新しいシステムに引き渡すことは避けたいと考えています。私たちのユーザーは、技術的に熟練した使い慣れたソフトウェア タイプから、HTML が何であるかを知らないタイプまで、あらゆる範囲を実行します。
システムの新しい「インストール」を開始し、この新しい設計がバージョン 1 の問題を十分に解決したことを確認した後、ユーザーを徐々に移行する必要がありますか?
システムの各モジュールを(どういうわけか)段階的に変更し、段階的に変更する必要がありますか?データベースのレイアウトが変更され、「コア コード」といくつかの周囲のモジュールのコードを微調整する必要があるため、これは難しい場合があります。
アプリの最新バージョンを使用する、信頼できる忍耐強い「ベータ テスター」クライアントのセットを持つことは一般的ですか? (ここでの目標は、フィードバックを得て、新しいシステムのバグをテストすることです)
他にアドバイスはありますか?初体験?
architecture - アジャイルに忠実でありながら、技術的負債を回避するにはどうすればよいですか?つまり、YAGNI の違反を回避し、BDUF を回避しますか?
Martin Fowler による技術的負債、Steve McConnellによる
YAGNI (You Ain't Gonna Need It)ウィキペディアより
ウィキペディアによるBDUF (Big Design Up Front)
更新:質問を明確にするために、このように述べて、私の意味を維持することもできると思います:
「あなたは、アジャイルの実践者として、各イテレーション内で、「クイック アンド ダーティ」(YAGNI に準拠しようとして意図せずに技術的負債を負う危険を冒すこと) とオーバーエンジニアリング (BDUF) の間の適切なバランスをどのように見つけますか?
sql - 動的データベーススキーマ
動的論理データベーススキーマにストレージを提供するために推奨されるアーキテクチャは何ですか?
明確にするために:システムが、本番環境でユーザーによってスキーマが拡張または変更される可能性のあるモデルにストレージを提供する必要がある場合、これを可能にする優れたテクノロジー、データベースモデル、またはストレージエンジンは何ですか?
説明するためのいくつかの可能性:
- 動的に生成されたDMLを介したデータベースオブジェクトの作成/変更
- 多数のスパース物理列を含むテーブルを作成し、「オーバーレイされた」論理スキーマに必要な列のみを使用する
- 動的な列の値を行として格納する「長くて狭い」テーブルを作成します。このテーブルは、特定のエンティティのすべての値を含む「短くて広い」行セットを作成するためにピボットする必要があります。
- BigTable /SimpleDBPropertyBagタイプのシステムを使用する
実社会での経験に基づく回答をいただければ幸いです。
nhibernate - Fluent NHibernate アーキテクチャに関する質問
この時点で考えすぎかもしれないという質問がありますが、ここに行きます...
ユーザーとグループの2つのクラスがあります。ユーザーとグループには多対多の関係があり、結合テーブル group_users に IsAuthorized プロパティが必要だと考えていました (一部のグループはプライベートであるため、ユーザーは承認が必要になるため)。
結合テーブルとユーザーおよびグループ テーブルのクラスを作成することをお勧めしますか? 現在、私のクラスは次のようになっています。
私のマッピングは、両方のクラスで次のようになっています (ユーザー マッピングの 1 つだけを表示していますが、非常に似ています)。
このような結合テーブルのクラスを作成する必要がありますか?
グループ メンバーシップのステータスを調整できるようにしたいのですが、これについて最善の方法を考えようとしていると思います。
database-design - SaaSデータベースの設計-複数のデータベース?スプリット?
SaaSアプリケーションがさまざまな方法でホストされているのを見てきました。機能とモジュールを複数のデータベースに分割することをお勧めしますか?たとえば、あるDBにUserテーブル、別のDBに機能/アプリ固有のテーブル、別のDBに他の一般的に共有されているテーブルなどを配置しますか?
architecture - Web アプリケーションのエンティティと値オブジェクト
Contact、TelephoneNumber、および ContactRepository という単純なドメイン モデルがあります。連絡先はエンティティであり、ID フィールドがあります。TelephoneNumber は典型的な値オブジェクトです。ID がなく、Contact インスタンスとは別に読み込むことができませんでした。
反対側からは、連絡先を操作するための Web アプリケーションがあります。最初のページは「ContactList」、次のページは「Contact/C0001」で、連絡先の詳細と電話番号のリストが表示されます。
電話番号編集フォームを実装する必要があります。最初に考えられる近似は、「ThelephoneNumber/T0001」のようにナビゲートできるページを追加することです。
しかし、ThelephoneNumber は Value Object クラスであり、そのインスタンスはこの方法では識別できませんでした。
この問題を解決するためのベスト プラクティスは何ですか? ステートレス アプリケーションで識別不可能なオブジェクトを識別するにはどうすればよいでしょうか?
language-agnostic - コード ジェネレーター vs. ORM vs. ストアド プロシージャ
これらのソフトウェア アーキテクチャのそれぞれが、どの分野で優れているか、または失敗するか?
どちらかを選択するよう促す重要な要件はどれですか?
優れたオブジェクト指向コードと優れたデータベース開発を行える開発者がいると仮定してください。
また、聖戦は避けてください :) 3 つのテクノロジにはすべて長所と短所があります。
c# - リアルタイムシステムのアーキテクチャ?
リアルタイム システムを構築するためのアーキテクチャまたはテクノロジからのアドバイスまたは経験をお聞きしたいと思います。「キューイング管理システム」の開発経験を積む前に、オペレーターがキュー番号を変更したときに、すべてのオペレーターに TcpServer および TcpClient メッセージを送信することで完了しました。しかし、この戦略は非常に複雑で問題があると思います。
アイデアやフレームワークを教えてくれる人はいますか?
architecture - テスト駆動開発は設計から焦点を当てていますか?
私はTDDについて複雑な気持ちを持っています。私はテストを信じていますが、テストが私の開発努力を促進するという考えには問題があります。
現在の要件を満たすインターフェイス用に記述されたいくつかのテストを満たすようにコーディングする場合、保守可能なコードの構築、クリーンな設計、および健全なアーキテクチャから焦点を移す可能性があります。
テストではなく、駆動に問題があります。何かご意見は?
.net - Entity Framework と Application Architecture (疎結合など)
OR/M-API とストレージ/概念モデルのマッピング機能 (もちろん Linq と Entity SQL) が気に入ったので、Entity Framework を新しいプロジェクトに適用することを検討しています。
しかし、UI レイヤーとビジネス レイヤーの両方で EF エンティティがデータホルダーとして使用されている場合、UI レイヤーとビジネス レイヤーの間で疎結合を実現するにはどうすればよいでしょうか。エンティティが UI にあるときに ObjectContext にアタッチしたままにしておくと、UI がビジネス レイヤーをバイパスして、データベースに直接接続する可能性があります。エンティティを UI に渡す前に ObjectContext からデタッチすると、変更の追跡が行われないため、ビジネス レイヤーですべての変更を「再生」して、データベースに永続化する必要があります (特に達成が困難です)。親子関係)。ビジネス レイヤーが「オブジェクト ツリーの永続化エンジン」に劣化することは望ましくありませんが、この機能が役立つシナリオもあります。
これは確かに他の OR マッパーにも当てはまりますが、いくつかの代替製品は、より優れたデタッチ/アタッチ メカニズムを備えているようです。