定型コードを削減するために使用されるメタモルフィック コード、つまり、命令 (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 エージェントでネイティブ コードを使用するものは非常に便利です。