7

ジェネリック インターフェイスで使用される DTO クラスの基本クラスが必要です。

しかし、DTO クラスには共通点がありません。それらは、いくつかのプロパティを含む単なるダムクラスです。

public void GetGridData()
{

   IDataForGrid<DTOBase> aa;

   if(request == 1) aa = new CustomerGridData;
   if(request == 2) aa = new OrderGridData;

   var coll = aa.GetList();
}

public class CustomerGridData : IDataForGrid<CustomerDTO>
{
  ...
}
4

4 に答える 4

7

やや珍しいですが、悪いデザインではありません。このように考えてみてください。欠点はありませんが、少なくとも 2 つの利点があります。

  • 基本クラスはインターフェイスのフィルターとして機能するため、オブジェクトだけを渡すことはできません (DTO オブジェクトのみ)。マーカー インターフェイスもこれに対応できます。
  • 最終的に共通点が見つかった場合、そこに追加するのは簡単で、すべてをリファクタリングする必要はありません。
于 2010-03-11T10:57:08.893 に答える
6

それらに共通点がない場合、リストから取得したインスタンスをどうしますか?

いずれにせよ、基本クラスを持つということは、後で共通にする必要があるものを特定するときに (わかりました)、すべてに戻ってリファクタリング (リベース) する必要がないことを意味します。しかし、基本的な実装を再利用する必要性が強くないように思えるので、この種のものには基本クラスではなくインターフェイスを使用することを検討します (まだ共通点がないため!)。それは、彼らが後で共通点を持つことになるとあなたが考えるものに依存します.

于 2010-03-11T10:54:09.430 に答える
3

.NET コーディング ガイドラインでは、空の基本クラスまたはインターフェイス (「タグ」インターフェイスとも呼ばれます) を持つことは、実際には悪いスタイルであると述べています。推奨されるスタイルは、同じ種類のクラスに注釈を付ける代わりに属性を使用することです。この規則を適用するためのFxCop ルールもあります。

ただし、共通の機能が存在しない場合でも、共通の基本クラスが共通の階層を示すのに役立つ場合は、(まれに) このイディオムを使用することがあります。これには属性を使用できません。

たとえば、プログラミング言語のインタプリタでは、いくつかのメソッドが特別な基本クラスValue、つまりそのプログラミング言語内で値を持つ何かを返します。基本的に、この値は、数値から文字列 (またはではなく特別なクラス) から複合オブジェクトまで、すべての値を指定できます。戻ることもできますが、これにより、パブリック インターフェイスの入力が弱くなります。System.Int32System.StringSystem.Object

優れた自己文書化コードは、制限されたインターフェースから利益を得ます。

于 2010-03-11T10:58:00.327 に答える
1

Java では、これはTag Interfaceと呼ばれます。このリンクは、タグ インターフェース、その使用法、および問題に関する適切な背景を提供します。

于 2010-03-11T11:00:02.600 に答える