優れたデータティアDev&Design:データ層開発の一般的な悪い慣行は何ですか?
-
02-10-2019 - |
質問
私は現在、摩擦が最小限に抑えられる高度に保守可能なシステムのアプリケーション設計のためのベストプラクティス(合理的に高いレベルで)を調査しています。 「Data Tier」とは、データベース設計、オブジェクト関係マッパー(ORM)、および一般的なデータアクセステクノロジーを意味します。
あなたの経験から、データ層の開発に関しては、一般的な間違いと悪い慣行であることがわかりました。視点?
回答の例には、以下が含まれます。ゆっくりとしたスケーラブルで拡張可能なデータ層の最も一般的な原因は何ですか? +この問題を治すために(設計やリファクタリングであっても)、どのような対策を講じることができますか?
ここで戦争の物語と、公開されているガイダンス文書やサンプルに組み込むことができる現実世界のアドバイスを探しています。
解決
魔法。
利用した 冬眠, 、データベースからオブジェクトを自動的に保存およびフェッチします。また、怠zyなロードをサポートしているため、関連するオブジェクトはデータベースを要求するときにのみ取得されます。これは私が理解していないいくつかの魔法の方法で機能します。
これはすべて機能する限り正常に機能しますが、故障すると追跡することは不可能です。冬眠を組み合わせたときに問題があったと思います aop, 、どういうわけか、オブジェクトは、コードが実行されたときにHibernateによってまだ初期化されていませんでした。 Hibernateはそのような神秘的な方法で機能するため、この問題はデバッグするのが非常に困難でした。
他のヒント
オブジェクトリレーショナルマッピングは悪い練習です。これにより、「リレーショナル」としか説明できないデータスキーマを作成する傾向があるため、スケーリングが不十分で、データの整合性が低いことを意味します。
これは、適切にリレーショナルスキーマが正規化のプロセスを介して行われているのに対し、マッピングの結果は通常、データベーステーブルとして実装されるオブジェクトクラスであるためです。これらは通常正規化されていませんが、代わりにOO開発者の即時の利便性のために設計されています。
もちろん、永続的なデータ要件が最小限の場合、これは重要ではありません。
しかし、私はかつて他のいくつかの企業を引き継いで成長し、統合された運用システムの開発を(継承したさまざまな企業固有のシステムを置き換えるために)OO方法論を使用して会社に外部委託し、またはマッピングによって生成されるデータスキーマ。開発されているシステムのパフォーマンス特性は非常に貧弱で、データスキーマは非常に複雑であったため、海運会社は2年間の開発の後にそれを落としました - それが公開される前に!
これは、またはマッピングの直接的な結果でした。スキーマの最悪の複雑さ(およびその結果、パフォーマンスの低下)は、OO設計プロセスのアーティファクトとしてのみ作成されたテーブルの存在によって引き起こされました。これらは、データ関係ではなく、画面レイアウトを反映しています。