エンタープライズ開発 (.NET 2.0 以降) にデータセットを使用しないよう同僚を説得する方法

StackOverflow https://stackoverflow.com/questions/37378

  •  09-06-2019
  •  | 
  •  

質問

私が一緒に働いている人は皆、エンタープライズ開発に対するデータ中心のアプローチに執着しており、カスタム コレクション/オブジェクトを使用するという考えを嫌います。彼らにそうでないと説得する最善の方法は何でしょうか?

役に立ちましたか?

解決

レガシー コード (.NET 1.x から 2.0 または 3.5 に移植されたアプリなど) に取り組んでいる場合、データセットから離れるのは得策ではありません。すでに機能しているものをなぜ変更するのでしょうか?

ただし、新しいアプリを作成する場合は、いくつか挙げることができます。

  • 体験へのアピール 痛み DataSet に依存するアプリの保守において
  • 新しいアプローチによるパフォーマンス上の利点を挙げる
  • 良い中間点で彼らを誘います。.NET 3.5 に移行し、LINQ to SQL を推進します。たとえば、次のようになります。データ駆動型アーキテクチャに固執しながらも、文字列インデックス付きデータセットとは大きく大きく異なり、...出来上がり!カスタム コレクション -- 隠された方法で。

重要なのは、どのようなアプローチを使用しても一貫性を保ち、自分のアプローチの長所と短所について完全に正直であることです。

他のすべてが失敗した場合 (たとえば、古い慣行からの脱却をまったく拒否し、新しいことを学ぶことに懐疑的な開発チームがいる場合)、これは問題です。 非常に、非常に明確な兆候 チームの規模が大きくなったので、会社を辞める時期が来ています。

他のヒント

模範を示し、慎重に行動してください。それより強いものは、チームの他のメンバーから疎外されるだけです。

彼らがあなたが見逃していた何かを見つけている可能性を考慮することを忘れないでください。チームの一員になるということは、交代で学び、教えることを意味します。

すべての答えを持っている人は一人もいません。

彼らがあなたが見逃していた何かを見つけている可能性を考慮することを忘れないでください。チームの一員になるということは、交代で学び、教えることを意味します。

出向。「エンタープライズ開発」が通常の開発とは何らかの形で区別される (そして通常、その意味は「より重要である」という意味です) という全体的な考えが、私を本当にイライラさせます。

何らかのテクノロジーを使用することに本当にメリットがある場合は、切り替えた場合に生じるすべてのメリットとデメリットを考慮したリストを作成する必要があります。
このリストを、それぞれの説明と例とともに同僚に提示します。

このリストを作成するときは現実的になる必要があります。「時間を大幅に節約できました!!!」とだけ言うことはできません。勝つ!!」と、場合によってはさらに時間がかかる、新しい技術に慣れるまでに X か月かかる、などの事実に言及しません。どこでどのように時間を節約できるのか、具体的な例を示す必要があります。

同様に、同僚たちも、短所をまるで関係ないかのように無視することはできません。 意思 それで電話してください。
これらのことをしなかったり、単に自分の好きなものを押しているだけだと思われたりすると、誰もあなたのことを真剣に受け止めてくれなくなり、熱意とエネルギーに満ち溢れているが何も考えていない男という評判を受けるだけです。何でもについて。

ところで。この特定の詐欺に注意してください。あなたが持っていない限り、それはすべてに優先します。 多く 他のすべてのものについての強力なケース:

  • 既存のコードを移植するには 12 か月以上の作業が必要です。あなたは負けます。

もちろん「状況次第」です。実際に非常に軽いビジネス ロジック、エンティティ/レコードのフラットな階層、またはいくつかのバージョン管理機能を備えている場合など、DataSet または DataTable の方が適している場合があります。

カスタム オブジェクト コレクションは、 深い階層/グラフ フラットな 2D テーブルでは効率的に表現できないオブジェクトの数。デモできるのは、オブジェクトの大規模なグラフと、他のブランチで不適切なオブジェクトを呼び出すことなく、特定のイベントを正しいブランチに伝播させることです。そうすれば、子レコードを取得するためだけに、すべての DataTable をループしたり選択したりする必要がなくなります。

たとえば、私が 2 年半前に参加したプロジェクトには、単一の WinForms DataGrid (より具体的には、Infragistics の UltraGrid) 内に質問と回答のコントロールを表示することになっている UI モジュールがありました。さらに難しい要件

  • 質問に対する回答コントロールは次のとおりです。 何でも - テキスト ボックス、チェック ボックス オプション、ラジオ ボタン オプション、ドロップダウン リスト、または Web サービスからさらに多くのデータを取得するカスタム ダイアログ ボックスをポップアップすることもできます。
  • ユーザーの回答に応じて、さらに多くのサブ質問が親の質問の直下に表示されるようになります。後で別の回答が与えられた場合は、その回答に関連する別のサブ質問セット (存在する場合) が公開されるはずです。

元の実装は完全に DataSet、DataTable、配列で書かれていました。複数のテーブルの数百行をループする量は、まったく気が遠くなるようなものでした。C++ のバックグラウンドを持つプログラマーが次のことを試みるのには役に立ちませんでした。 参照 すべて (こんにちは、ヒープ内に存在するオブジェクトは使用します) 参照変数, 、ポインターのようなものです!)。元々のプログラマーでさえも、コードがなぜそのような動作をするのかを説明できる人は誰もいませんでした。私がこの現場に来たのはそれから半年以上経ちましたが、現場はまだ虫であふれていました。私が引き継いだ二代目の開発者が辞める決意をしたのも不思議ではありません。

混沌とした混乱を解決するために 2 か月間取り組んだ後、私は自らモジュール全体を再設計して、 この問題を解決するオブジェクト指向グラフ. 。はい、抽象クラス (質問の種類に応じてグリッド セルに異なる回答コントロールをレンダリングするため)、デリゲート、イベントを備えています。最終結果は、親子の配置に従って自然に並べ替えられた、質問の深い階層にバインドされた 2D dataGrid でした。親の質問の回答が変更されると、子の質問に対してイベントが発生し、親の回答に従ってグリッド内の行が自動的に表示/非表示になります。そのパスにある質問オブジェクトのみが影響を受けました。古い方法と比較した場合、このソリューションの UI の応答性は桁違いでした。

皮肉なことに、私はこれとは正反対の質問を投稿したかったのです。私が一緒に仕事をしたプログラマーのほとんどは、カスタム データ オブジェクト/コレクションのアプローチを採用していました。SQL Server テーブル定義を 1 つのモニターで開いている人が、別のモニターの Visual Studio で一致する行ラッパー クラス (各列のプライベート プロパティとゲッター セッターを備えたもの) をゆっくりと入力しているのを見ると、心が張り裂けそうです。60 列のテーブルを作成する傾向がある場合、これは特に問題です。これらのクラスを自動的に構築できる ORM システムがあることは知っていますが、手動によるアプローチがより頻繁に使用されているのを見てきました。

エンジニアリングの選択には、利用可能なオプションの長所と短所の間のトレードオフが常に含まれます。DataSet 中心のアプローチには、カスタム データ オブジェクトと同様に利点があります (実際の DB データの DB テーブルのようなメモリ内表現、何をしているのかを知っている人々によって作成されたクラス、大規模な開発者に馴染みのあるクラスなど)。 (コンパイルタイプのチェック、ユーザーは SQL などを学ぶ必要はありません)。会社の他の全員が DataSet の道を進んでいる場合、少なくとも技術的には、彼らが行っていることに DataSet が最適な選択である可能性があります。

データセット/テーブルはそれほど悪くありませんね?

私ができる最善のアドバイスは、自分のコードでできる限りこれを使用することです。ピアレビューやバグ修正を通じて、他の開発者がコードがどのように読みやすくなるかを理解してくれることを願っています。(このようなことが起こったときは、必ずポイントを押してください)。

最終的にコードが機能すれば、あとはセマンティクスの問題になるというのが私の見解です。

O/Rマッピングとマッパーツールのアイデアを販売してみてはいかがでしょうか。行をオブジェクトとして扱うことの利点は非常に強力です。

パフォーマンスに集中したほうがいいと思います。DataSet とカスタム エンティティを使用した場合のパフォーマンスの違いを示すアプリケーションを作成できれば。また、ドメイン駆動設計の原則と、それがエンティティ フレームワークとどのように適合するかを示すようにしてください。

宗教や信仰の議論にしないでください。それらに勝つのは難しいです(そして、とにかくあなたが望んでいることではありません)

あなたの質問で行ったような枠組みにしないでください。問題は、この方法またはあの方法が一般的な仕事のやり方であることに同意してもらうことができないことです。いつでも正しい選択をするために、各人がどのように考える必要があるかについて話し合う必要があります。dataSet を使用する場合と使用しない場合の例を示します。

開発者に dataTable を使用してデータベースから取得したデータを保存させ、その dataTable を使用してビジネス ロジック コードを作成させました。そして、(Web サーバー上で) CPU を 100% 使用して 7 秒かかっていたページの読み込み時間を、CPU ラインの動きがまったく見えなくなるまで短縮した方法を説明しました。メモリ オブジェクトを dataTable から Hash table に変更します。

したがって、別の方法で実装した方がよいという例や事例を取り上げて、その戦いに勝ちましょう。ハイレベルな戦争はしないでください...

相互運用性が将来的に懸念される場合、または将来的に懸念される場合、DataSet は間違いなく正しい方向ではありません。DataSet/DataTable をサービス上で公開することはできますが、すべきかどうかは議論の余地があります。.NET->.NET について話している場合はおそらく大丈夫です。そうでない場合は、フェンスの向こう側から非常に不幸なクライアント開発者があなたのサービスを消費することになります。

そうでなければ彼らを説得することはできません。より小さな課題を選択するか、別の組織に移動してください。マネージャーが尊敬するなら、一種のテクノロジートライアルとしてドメイン駆動スタイルでプロジェクトを実行できるかどうかを確認してください。

プロファイルできる場合は、それを実行してプロファイルしてください。データセットは単純なものより重い Collection<T>

DataReader は、アダプターを使用するよりも高速です...

オブジェクトの動作を変更することは、データセットをマッサージするよりもはるかに簡単です

ともかく:ただ実行してください、許可を求めるのではなく許しを求めてください。

ほとんどのプログラマは、自分の快適ゾーンから逸脱することを好みません (「ほとんどのプログラマ」セットと「スタック オーバーフロー」セットの交差部分がおそらく空のセットであることに注意してください)。「以前にうまくいったなら(あるいは、うまくいったばかりでも)、それを続けてください。」私が現在取り組んでいるプロジェクトでは、古いプログラマに CSV ファイルだけではなく XML/スキーマ/データ セットを使用させるために多くの議論が必要でした (ソフトウェアの以前のバージョンでは CSV が使用されていました)。これは完璧ではなく、スキーマはデータの検証において十分に堅牢ではありません。しかし、それは正しい方向への一歩です。私が開発するコードでは、データ セット オブジェクトを渡すのではなく、データ セットに対して OO 抽象化を使用します。一般に、一度に 1 つずつ小さなステップを例を挙げて教えるのが最善です。

ここにはすでに非常に優れたアドバイスがいくつかありますが、スタックオーバーフローでいくつかの支持的なコメントをバックアップするだけであれば、同僚を説得するのに苦労するでしょう。そして、彼らが言うほど懐疑的であれば、より多くの弾薬が必要になります。まず、さまざまなデータ アクセス手法の詳細な分析が記載されている Martin Fowler の『Patterns of Enterprise Architecture』を入手します。それを読んで。次に、全員にそれを強制的に読んでもらいます。

仕事は終わりました。

データ中心であるということは、コードの複雑さが少ないことを意味します。

カスタム オブジェクトとは、整理、保守、および一般的に共存する必要がある数百の追加オブジェクトを意味します。また、少し速くなります。

これは実際にはコードの複雑さとパフォーマンスの問題であり、アプリのニーズによって答えられると思います。

小さなことから始めましょう。自分の主張を説明するために使用できるユーティリティ アプリはありますか?

たとえば、私が働いていた場所では、メイン アプリケーションには構成ファイルの変更やサービスのインストールなどを含む複雑なビルド プロセスがありました。

そこで、ビルドプロセスを自動化するアプリを作成しました。初歩的な WinForms UI を備えていました。しかし、WPF に移行していたため、Model-View-Presenter のおかげで WinForms UI も維持しながら、WPF UI に変更しました。Model-View-Presenter に慣れていない人にとっても、参考になるわかりやすい例でした。

同様に、大規模な開発投資を行わずに、DataSet 以外のアプリがどのようなものかを示すことができる小さなものを見つけてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top