私が仕事をしている人は誰も、エンタープライズ開発に対するデータ中心のアプローチに夢中であり、カスタムコレクション/オブジェクトを使用する考えが嫌いです。そうでなければ彼らを説得する最良の方法は何ですか?私の同僚にエンタープライズ開発用のデータセットを使用しないようにする方法(.NET 2.0+)
答えて
従来のコードで作業している場合(例:、アプリケーションを.NET 1.xから2.0または3.5に移植した場合)、データセットから離れるのは悪い考えです。なぜすでに動作するものを変更するのですか?あなたが引用することができ、しかし、新しいアプリケーションを作成し、そこにいくつかある場合は
:
- アピールデータセットに固執するアプリケーションを維持する上で痛みを経験するが、
- はのためのパフォーマンス上の利点を引用しますあなたの新しいアプローチ
- 彼らは良い中間地面でそれらを餌付けます。 .NET 3.5に移行し、LINQ to SQLを宣伝する:例えば、データ駆動型アーキテクチャに固執しながら、文字列インデックス付きデータセットへの巨大な出発点であり、強制力を発揮する。カスタムコレクション - それらから隠された方法で。
重要なことは、使用するアプローチが一貫しており、あなたのアプローチの長所と短所に完全に正直であることです。
他のすべてが失敗した場合(たとえば、古いプラクティスから完全に逸脱し、新しいことを懐疑的に思う開発チームがある場合)、あなたのチームを上回った非常に明確な記号それはあなたの会社を離れる時です!
データセット/テーブルはそれほど悪くないですか?
あなた自身のコードでできるだけ多くを使用することをお勧めします。また、ピアレビューやバグ修正のために、他の開発者がコードをどのように読みやすくするかを見てください。 (これらの事態が発生した時点で、必ずポイントを押してください)。
最終的にコードが機能する場合、残りはセマンティクスです。私の見解です。
例で行い、軽く踏んでください。より強いものはチームの残りの部分からあなたを遠ざけるでしょう。
あなたが見逃してしまった可能性を考えてください。チームに参加するということは、指導教授&を順番に学ぶことを意味します。
すべての回答が一人もありません。
O/Rマッピングとマッパーツールのアイデアを売ろうと思うかもしれません。行をオブジェクトとして扱うことの利点はかなり強力です。
あなたは、行をデータの行として扱うのではなく、実際の行為の人為的な用語にすることをお勧めします。 – gbjbaanb
あなたが逃した可能性があることを忘れないでください。チームに参加するということは、指導教授&を順番に学ぶことを意味します。
秒。 「企業の発展」は何とか(そして通常はそれが「より重要」である)とはまったく異なるという考え方は、通常の開発は本当に私を悩ませる。
実際に技術を使用する利点がある場合は、切り替えた場合に発生するすべての長所と短所を考慮する必要があります。
それぞれの説明と例とともに、このリストをあなたの同僚に紹介してください。
このリストを作成するときは、現実的でなければなりません。あなたは単に「私たちに多くの時間を救ってください!!」と言うことはできません!時にはもっと時間がかかることになるという事実に対処することなく、新技術の速度を上げるためにXヶ月が必要になります。時間が節約される具体的な例を示す必要があります。
同様に、あなたはちょうど彼らが問題ではないかのように、同僚はそれであなたを呼び出す短所をオーバースカートはできません。
もしあなたがこれらのことをやっていない、あるいはあなたが個人的に好きなものを押すだけで出くわしたら、誰もあなたを真剣に受け止めません。熱意とエネルギーでいっぱいの人であるという評判を得るでしょう。何の考えもない。
BTW。この特定の詐欺を見てください。あなたが他のすべてのもののための強力な例たくさんを持っていない限り、それは意志切り札はすべて、:
- は、当社の既存のコードを移植12+ヶ月の作業が必要です。あなたは失う。
もちろん、それは状況によって異なります。データセットやデータテーブルは、実際にはかなり軽いビジネスロジック、エンティティ/レコードのフラットな階層、またはいくつかのバージョニング機能を備えているように、より適していることがあります。
深い階層/グラフのオブジェクトをフラットな2Dテーブルで効率的に表現できない場合に、カスタムオブジェクトコレクションが輝きます。あなたが実証できるのは、オブジェクトの大きなグラフで、特定のイベントが他のブランチで不適切なオブジェクトを呼び出さずに正しいブランチに伝播するようにすることです。この方法では、子レコードを取得するために各DataTableをループまたは選択する必要はありません。
たとえば、私は2年半前にプロジェクトに携わっていました.1つのWinForms DataGridに質問と回答コントロールを表示するはずのUIモジュールがありました(具体的には、InfragisticsのUltraGrid )。いくつかのよりトリッキーな要件
- 質問に対する答え制御が何することができます - プルもカスタムダイアログボックスをポップアップ表示するためにも、ボックスのオプション、ラジオボタンのオプション、ドロップダウンリスト、またはをチェックし、テキストボックスWebサービスからのより多くのデータ。
- ユーザーが回答した内容に応じて、親質問の直下に表示されるサブ質問の数を増やすことができます。後で別の回答が与えられた場合は、その回答に関連する別のサブ質問(ある場合)を公開する必要があります。
元の実装は、完全にDataSets、DataTables、および配列で記述されていました。複数のテーブルのための何百もの行をループする量は純粋に心を曲げるものでした。プログラマーがrefすべて(こんにちは、オブジェクトヒープに住んでいる参照変数、ポインタのような使用!)にしようとCの背景から来た助けていない。もともとのプログラマであっても、コードが何をしているのか説明することはできません。私はこの後6ヶ月以上経っていたが、虫が溜まり、私が引き継いだ第二世代の開発者が、決断を下したことは間違いありません。
カオス的な混乱を修正するために2ヶ月間手をつないで、モジュール全体をobject-oriented graph to solve this problemに再設計しました。 (質問型に応じてグリッドセル上で異なる回答コントロールを描画するために)抽象クラスを使用し、デリゲートとイベントを行います。最終的な結果は、2Dデータグリッドが深い階層の質問にバインドされ、親子配置に従って自然にソートされました。親の質問の回答が変更されると、子供の質問にイベントが発生し、親の回答に応じてグリッドの行が自動的に表示/非表示になります。そのパスの下の質問オブジェクトのみが影響を受けました。この方法のUI応答性は、従来の方法と比較して桁違いに大きかった。
そうでない場合は、それらを納得させることはできません。より小さなチャレンジを選ぶか、別の組織に移動します。あなたのマネージャーが尊敬している場合、あなたは技術裁判の一種としてドメイン主導のスタイルでプロジェクトを行うことができるかどうかを見てください。
私はパフォーマンスに焦点を当てるべきだと思います。 DataSetsとカスタムエンティティの使用時にパフォーマンスの差異を示すアプリケーションを作成できる場合。また、ドメイン駆動型設計の原則と、それがエンティティフレームワークにどのように適合するかを示すようにしてください。
あなたがプロファイルできる場合は、それを行うだけです。シンプルCollection<T>
のDataReadersが速くアダプタを使用して、その後、次いでデータセットが重いです...オブジェクトで動作を変更
はとにかくデータセット
をマッサージよりもはるかに簡単です:ちょうどそれを行う、許しのためではない頼みます許可。
宗教や信仰の討論にしないでください。それらは勝つのが難しいです(とにかくあなたが望むものではありません)
あなたの質問にちょうどしたようにフレーム化しないでください。問題は、誰もこのやり方が彼らが働くべき一般的な方法であることに同意するようにはなっていない。あなたはいつでも正しい選択をするためにそれぞれがどのように考えなければならないかについて話すべきです。 dataSetを使用する場合とそうでない場合の例を挙げてください。
デベロッパーは、データテーブルを使用してデータベースからフェッチしたデータを格納し、そのデータテーブルを使用してビジネスロジックコードを作成していました...そして、ページをロードする時間を100%CPU (Webサーバー上で)CPU行がまったく動かないことを知りません。メモリオブジェクトをdataTableからHashテーブルに変更します。
あなたは物事が異なる方法で実装されている方が良いか、その戦いに勝つのかを例としてみてください。高レベルの戦争と戦わないでください。
ほとんどのプログラマーは快適ゾーンから逸脱したくありません(ほとんどのプログラマーのセットと「スタックオーバーフロー」セットの交差点は、おそらく空のセット)。 "それが以前に働いていた(または、ちょうど働いていた)なら、それをやり続ける"。私が現在行っているプロジェクトでは、CSVファイル(CSVを使用していたソフトウェアの以前のバージョン)ではなく、古いプログラマにXML /スキーマ/データセットを使用させるための多くの議論が必要でした。完璧ではない、スキーマはデータを検証するのに十分なほど堅牢ではない。しかしそれは正しい方向への一歩です。私が開発したコードでは、データセットオブジェクトを渡すのではなく、データセットのOO抽象化を使用しています。一般的に、一度に1つの小さなステップで例を挙げて教えることが最善です。
皮肉なことに、これとは正反対の質問を投稿したかったのです。私が作業したプログラマーのほとんどは、カスタムデータオブジェクト/コレクションのアプローチを行っています。あるモニタでSQL Serverのテーブル定義を開いたまま誰かを見て、別のモニタ(各列のプライベートプロパティとgetters-setterを持つ)でVisual Studioで一致する行ラッパークラスをゆっくり入力しています。また、60列のテーブルを作成する傾向がある場合は特に苦しいです。私はこれらのクラスを自動的に構築できるORMシステムがあることを知っていますが、私は手動アプローチをもっと頻繁に使用することを見てきました。
エンジニアリングの選択肢には、常に利用可能なオプションの賛否両論の間にトレードオフがあります。 DataSetを中心としたアプローチには、カスタムデータオブジェクトと同様に、実際のdbデータのメモリ内表現(dbテーブルのような、自分のやっていることを知っている人が書いたクラス、大規模な開発者のプールなど) (コンパイル・タイプ・チェック、ユーザーはSQLなどを学ぶ必要はありません)。あなたの会社の全員がDataSetルートを使用している場合、少なくとも技術的には、DataSetsが自分が行っていることに対して最良の選択である可能性があります。
私は上記のような両方のオプションについて賛否両論を見ることができますが、他の開発者が.NETプラットフォームと密接に結びついているため、DataSetルートから離れるようにしたかったのです。たとえば、Javaに切り替えると、純粋なOOPの概念についてもっと多くの時間を費やさなければならなくなるかもしれません。 –
私はあなたのことを聞いています。新しい方法を考えるのは難しいのです。あなたのコメントを読んだ後の私の最初の考えは、「JavaにDataSetsとDataTablesのようなものがあるかどうか疑問に思っていた」という私の考え方では十分に迷っています。 – MusiGenesis
私はかつて同僚を別の方向(DataTablesへのデータオブジェクト)にすることを騙しましたが、このストーリーは私にここで投票されました。私はそのトリックが可逆的ではないと思います。 :) – MusiGenesis
ここでは非常に良いアドバイスがありますが、スタックオーバーフローに関するいくつかの支持的なコメントがあれば、皆さんがバックアップしなければならない場合は、同僚に納得させる仕事があります。 そして、彼らが懐疑的であるとすれば、より多くの弾薬が必要になるでしょう。 最初に、Martin Fowlerの "Patterns of Enterprise Architecture"のコピーを入手します。このパターンには、さまざまなデータアクセス手法の詳細な分析が含まれています。 読んでください。 それからすべての人に読ませてください。
ジョブが完了しました。
インターオペラビリティが懸念される場合、DataSetは正しい方向ではありません。DataSet/DataTablesをサービスに公開することはできますが、必ずしも議論の余地があるのか議論の余地がありますか。あなたが.NET - >。NETを話しているなら、あなたはおそらくOKです。そうでなければ、あなたのサービスを消費するフェンスの反対側から非常に不幸なクライアント開発者を持つことになります。
データ中心はデータの複雑さが少ないことを意味します。
カスタムオブジェクトとは、構成、保守、一般的に生活するための潜在的に何百もの追加オブジェクトを意味します。それはまた少し速くなるだろう。
私はそれが実際にコードの複雑さとパフォーマンスの問題だと思いますが、これはアプリのニーズによって解決できます。
小さく開始します。あなたのポイントを説明するために使用できるユーティリティアプリはありますか?例えば、私が働いていた場所で、メインアプリケーションが設定ファイルを変更含む、複雑なビルドプロセスを持っていた
、サービスをインストールする、など
だから私は、ビルドプロセスを自動化するアプリを書きました。これには初歩的なWinForms UIがありました。しかし、私たちはWPFに移行していたので、WPF UIに変更しましたが、Model-View-PresenterのおかげでWinForms UIも維持しました。 Model-View-Presenterに慣れていない人にとっては、わかりやすい例でした。
同様に、大規模な開発投資をせずに、DataSet以外のアプリケーションの外観を示すことができます。
それはすべて、Toran、私はあなたの前提に必ずしも同意しないと言った。今では、型指定のないデータセットを使用していて、どこかで醜い文字列リテラルがたくさんある場合は、何でも良いでしょう。しかし、型付きデータセットは優れたデータアクセス技術です。 O/Rマッパーを好むかどうかはスタイルの問題です。あなたのスタイルにそれらを強制しようとしないでください。それは動作しません。例を作成し、明確なメリットがあるかどうかを見てみましょう。 –
- 1. MVCを使用する同僚の同僚
- 2. 城のアクティブレコード - .net 2.0の使用方法
- 3. .NET Core 2.0 ilasm.exeの使用方法は?
- 4. JAX-RS 2.0(Resteasy)でエンタープライズBeanに@InjectとCDIを使用する方法
- 5. .NET開発に使用するORMツール
- 6. C#.net 2.0のTextEditor開発
- 7. .NET Frameworkのさまざまなバージョン用に開発するために私の場合はDVCS(水銀入り)をどのように使用しますか?
- 8. 同じページに2つのデータセットを使用する方法は?
- 9. .NET 2.0を使用してDataTableをリストに変換する最速の方法
- 10. OAuth 2.0を使用しないGoogleカレンダーAPIの使用方法
- 11. 開発環境の設定方法。 .NET Core 2.0 Angularテンプレート+ NPMを使用してダウンロードしたWebサイトテンプレート
- 12. .netフレームワーク2.0を使用してwebserviceでwebapiを使用する方法
- 13. XMLを使用して同僚にFlex POCを送信
- 14. 私のような貧しい開発者には、どのオープンソースライセンスを使用するのが最適ですか?
- 15. DateTime.Now.Ticksは、私の同僚の
- 16. .NET 2.0を使用しているブロックで例外をキャッチする方法は?
- 17. Google OAuth 2.0を使用しているときにアクセスコードが表示されないようにする方法
- 18. ASP.NET ID Framework 2.0の既定のテーブルを使用しないようにする
- 19. 私のようなものであるデータセット使用していSAS 9.3
- 20. ASP .NET MVC 2.0でデータキャッシュを使用する方法
- 21. アプリケーションの主観的なスピードを改善するにはどうすればよいですか?私の同僚
- 22. iOSのエンタープライズ開発者アカウント:
- 23. ウィンドウ内にopengl es 2.0を開発する最良の方法を見つけようとしています
- 24. 大きなデータセットにマージソートを実際に使用する方法
- 25. .NET Framework 2.0用のMEF(Managed Extensibility Framework)のようなもの
- 26. どのようなチャートをAsp.net mvcプログラミングの開発に使用しますか?
- 27. Springでcontext.getbeanを使用しないようにする方法
- 28. BeforeAllでvarを使用しないようにする方法
- 29. OS X用のMonoはプロフェッショナルな.NET開発者にはいいですか?
- 30. .netサービスからデータセットを返し、アンドロイドにデータを使用する
Linq2SQLを宣伝しますか? L2Sは死んでいる - 代わりにEFを促進する。 – stephbu
@stephbu - とEFは大幅に改訂されているので、どちらも(現在の形式で)どちらも長期にわたって良い賭けとは言えません。しかし、L2Sは投資/複雑性がより少ないので、EF IMOよりも魅力的です(現在のフラックスを考慮して)。 –
みましょう... L2Sは死んでいます... EFは重い修正を受けています...ねえ!データセットはかなり安定しているようですが、おそらく使用するべきです! ;-) –