0

Scenario

You have an Assembly for Data Transfer Objects containing 10 classes that exactly represent 10 tables in your database. You generate / build a DAL layer that has methods like -

  DTOForTable1[] GetDataFromTable1();
  DTOForTable2[] GetDataFromTable2();

and so on....

Question

How do I make a method that hides the numerous methods to get data from each table from the client code? The method I would want for example in service or business layer could look like-

SomeGenericDTO[] GetDataFromTable(TableTypeEnum tableTypeEnum);
  1. How do I do this ? Is this even possible ?

  2. If yes for (1), is it a good practice ?

  3. (1) と (2) が「はい」の場合、これは設計を単純化または複雑化しますか?

前もって感謝します。

4

3 に答える 3

2

次のように定義できます。

T[] GetDataFromTable1<T>() where T:IDto
{
   // you can know the table with the type of T
}

そうは言っても、私はむしろ、それを操作するためのさまざまなメソッドまたはクラスのいずれかを使用したいと思います。代わりにリポジトリパターンを使用します。その情報を探すことをお勧めします。

于 2009-03-12T19:00:30.963 に答える
1

これが私のDALのやり方です:

List<entity> customers = SQL.Read(new SearchCriteria(), new Customers());

結合を実行するには:

List<entity> customers = SQL.Read(new SearchCriteria(), new Customers(new Orders(new OrderDetails())));

DTOクラス自体がアクセスするテーブルを決定し、そのプロパティが取得する列を決定します。

それがベストプラクティスなのか良いプラクティスなのかは答えられません。それは私のために長い間働いてきた習慣です。「GetById」、「GetAll」などの無関係なメソッドはありません。

于 2009-03-12T19:03:55.137 に答える
1

最近では、具象テーブルクラスを抽象テーブルアクセスクラスを継承するものとして実装することが非常に一般的です。抽象クラスには、テーブルをクエリするためのジェネリックメソッドがあります。各具象クラスは、対応するデータベーステーブル(おそらく列とテーブル間の関係)を宣言できます

ActiveRecordTableDataGatewayを含めるのに役立つデザインパターン。

于 2009-03-12T19:05:50.000 に答える