さて、ここに社内にユーティリティがあり、データベースのテーブルとビューからビジネスモデルクラスを生成します。これは、ORMに似ています(ただし、まったく同じではありません)。それを維持する際に、スキーマ内のデータが大幅に変更される可能性は低いと思いました。ただし、機能は可能性があります。今後、機能を追加したいと思うかもしれません。その機能の一部を生成したい場合や、拡張したい場合があります。
構築しているクラスは、他のライブラリやアプリケーションで使用できるようにクラスライブラリに常駐します。そこには大きな驚きはありません。しかし、ここでの難点は、クラスを再生成するときにコードをできるだけ中断しないように、生成されたクラスを設計する方法です。たとえば、コードがプロパティ(データベーステーブルの列を表す)に追加されている場合、それを失いたくありません。
したがって、頭に浮かぶ2つのアプローチがあります。
古典的な継承。すべてが単一の「モノリシック」クラスで行われ、コンシューマーは基本実装を自由にオーバーライドできます。ただし、これは時々トリッキーになり、キャストの頭痛の種になることがよくあります。さらに、派生クラスが注意を怠り、基本クラスの機能を呼び出すのを忘れると、問題がすぐに発生する可能性があります。
部分クラス。このスキームでは、ビジネスオブジェクトを個別の部分(プロパティ(列にマップされる)と動作)に分割します。ビヘイビアーは、生成されたビヘイビアーとカスタムビヘイビアーにさらに分類することもできます。ご覧のとおり、このアプローチの問題は、その固有の複雑さです。さらに、命名の問題があります。
これが皆さんへの私の質問です:あなたがこのようなシナリオを扱っているとき(もしあれば)、またはあなたがこのようなシナリオを提示された場合、あなたはどのような解決策を考えますか、そしてその理由は何ですか?