2

定型コードを削減するために使用されるメタモルフィック コード、つまり、命令 (IL と Java バイトコード、およびネイティブ コードを含む) を生成して実行するコードを見た人はいますか?

アプリケーションや言語に関係なく、通常、データベースから行を取得してオブジェクトのリストを返すデータベース コードがいくつかあります。もちろん、データベース コネクタに基づいてこれを行う方法は無数にあります。インデックスによって行のセルにアクセスすることになるかもしれません ("SELECT Name, Age" を "SELECT Age, Name" に変更するとコードが破損し、さらにインデックスによって意味がわかりにくくなるため)、myObject.Age = resultRow を使用することになります。 getValue("Age") (厄介です。これは、すべてのフィールドを調べて、列に基づいてデータを設定するだけだからです)。

データベースのテーマに沿って、LINQ to SQL は素晴らしいです。ただし、データ モデルの定義は、特にデータベースに非常に多くのテーブルがあり、SSMS がオブジェクト ブラウザーにすべてのテーブルを一覧表示できない場合は、それほど優れた方法ではありません。また、私が嫌いなのは、ストアド プロシージャの作成や SQL の関与ではありません。オブジェクトをデータベースに接続するだけです。

私がインターンをしている会社の誰かが、System.Reflection.Emit で .NET リフレクションを使用する SqlCommand クラス (System one から継承) から本当に素晴らしいメソッドを作成し、フィールドを設定するメソッドを生成しました (列の名前を含む属性) を nullary コンストラクターを持つモデル オブジェクトに適用します。プログラムの特定の部分が新しいメソッドを記述するため、これは変形的であると考えます。

データベースからオブジェクトを生成するこのパターンは、ほんの一例です。私が 2 日前に見つけたのは、SWT のデータバインディングのサポート (JFace 経由) でした。setAddress(Address address) と getName() を使用してこれらの完全にクリーンなモデルを作成しましたが、PropertyChangeSupport ファイアーを使用してセッターを汚染し、PropertyChangeSupport インスタンスを持ち歩く必要があります (抽象基本クラスにある場合でも)! その後、 PojoBindablesを見つけました。今では、書く必要が減ったという理由だけで、レベル 80 のデータバインダーのように感じています。

具体的には、このようなものやJava エージェントでネイティブ コードを使用するものは非常に便利です。

4

1 に答える 1

0

ジェネリック プログラミングはあなたの路地を上るかもしれません。Concept C++のWeb サイトには、抽象化とリフティング、どの言語でも使用でき、ボイラープレート コードをポジティブな力に変えるアイデアをカバーする非常に優れたチュートリアルがあります。ほぼ同じボイラープレート メソッドの束を調べることで、コードを概念的に結合する一連の要件を導き出すことができます (「X を実現するには Y を実行する必要があるため、X1 を実現するには Y を実行する必要がありますが、違いは 1 です」)。 . そこから、テンプレートを使用して共通点を取得し、テンプレート入力を使用して相違点を指定できます。C# と Java には、現時点で独自のジェネリック実装があるため、チェックしてみる価値があるかもしれません。

于 2010-08-07T12:59:56.657 に答える