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() { ... }
}

And then you could do it your way, more fluently:

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 回答