1

データベース上のデータを管理するためのすべてのメソッドを持つ一般的なライブラリを作成しようとしています。

このライブラリにはたくさんのメソッドが含まれるので、もっと整理したいと思います。以下の構文で使用したいと思います。

db.setData().insertNewAccount(username, password);

db.modifyData().deleteAccount(username, password);

db.getData().getAccount();

たとえば、setData に関連するメソッドが表示されるように setData と入力すると、そのように機能させるにはどうすればよいでしょうか。

4

3 に答える 3

3

これに間違った方法でアプローチしているようです-通常、AccountRepositoryアカウントに関連するすべてのメンバーを持つクラスのようなものがあります。ArticleRepository次に、記事に関連するすべてのメンバーを含むクラスを (たとえば)作成します。

言い換えれば、フェッチ、更新、挿入などをしようとしているかどうかではなく、扱っているデータの種類で整理してください。

次に、依存性注入を使用して、各ビジネス クラスが使用するリポジトリだけを与えることができます。

于 2012-04-28T08:33:17.030 に答える
1

本当にそのようにしたい場合は、次のようにすることができます(疑似コード):

class DataRepository
{
    public SetDataHelper setData()
    { return new SetDataHelper(); }

    public ModifyDataHelper modifyData()
    { return new ModifyDataHelper(); }

    public GetDataHelper getData()
    { return new GetDataHelper(); }
}

class SetDataHelper
{
    public void insertNewAccount(username, password) { ... }
}

class ModifyDataHelper
{
    public void deleteAccount(username, password) { ... }
}

class GetDataHelper
{
    public Account getAccount() { ... }
}

そして、あなたはそれをあなたのやり方で、より流暢に行うことができます:

var db = new DataRepository();

db.setData().insertNewAccount(username, password);

db.modifyData().deleteAccount(username, password);

db.getData().getAccount();
于 2012-04-28T08:40:53.537 に答える
0

さまざまな機能を備えたさまざまなインターフェイスを作成でき、クラスはそれらすべてを実装できます。そしてsetData()、対応するインターフェースにキャストして、クラス自体を返すことができます。例えば:

interface SetData {
  int insertNewAccount(A, B);
}

interface ModifyData {
  int deleteAccount(A, B);
}

interface GetData {
  int getAccount(A, B);
}

class DBHandler : SetData, ModifyData , GetData {
  //
  // Implement the interfaces...
  //

  // Returns the interfaces
  SetData setData(){ return (SetData)this; }
  ModifyData modifyData (){ return (ModifyData )this; }
  GetData getData (){ return (GetData )this; }
}

もちろん、プロジェクトに応じてアクセス修飾子を使用します。そして、このソリューションは、実装されたインターフェイス関数に直接到達することを妨げません。これには、別のクラスが必要になるか、すべての呼び出しを DB クラスにプロキシする何かが必要になります。

于 2012-04-28T08:39:45.973 に答える