组织方法以更好地访问它们

时间:2012-04-28 08:26:40

标签: c#

我正在尝试创建一个通用库,它将拥有管理数据库数据的所有方法。

这个库有很多方法,所以我想让它更有条理。我希望它与以下语法一起使用。

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

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

db.getData().getAccount();

如果输入setData,我将如何使其工作,例如与setData相关的方法会显示。

3 个答案:

答案 0 :(得分:3)

听起来你正在以错误的方式接近这一点 - 通常你会有AccountRepository课程,所有成员都与账户有关;然后你会(比方说)一个ArticleRepository课程,所有成员都与文章有关。

换句话说,按照您正在处理的类型的数据来组织而不是您是否尝试获取,更新,插入等。

然后,您可以使用依赖注入,以便为每个业务类仅提供它使用的存储库。

答案 1 :(得分: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();

答案 2 :(得分:0)

您可以创建具有不同功能的不同界面,您的类可以实现所有这些界面。然后,您的setData()可以返回类本身,转换为相应的接口。 E.g:

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类的调用。