我正在尝试创建一个通用库,其中包含用于管理数据库中数据的所有方法。
这个库会有很多方法,所以我想让它更有条理。我希望它与以下语法一起使用。
db.setData().insertNewAccount(username, password);
db.modifyData().deleteAccount(username, password);
db.getData().getAccount();
如果我键入 setData 例如与 setData 相关的方法会出现,我将如何使其工作。
我正在尝试创建一个通用库,其中包含用于管理数据库中数据的所有方法。
这个库会有很多方法,所以我想让它更有条理。我希望它与以下语法一起使用。
db.setData().insertNewAccount(username, password);
db.modifyData().deleteAccount(username, password);
db.getData().getAccount();
如果我键入 setData 例如与 setData 相关的方法会出现,我将如何使其工作。
听起来您以错误的方式处理此问题-通常,您会开设一个AccountRepository包含与帐户相关的所有成员的类;那么你会有(比如说)一个ArticleRepository包含所有与文章相关的成员的类。
换句话说,按照您正在处理的数据类型进行组织,而不是您是否尝试获取、更新、插入等。
然后,您可以使用依赖注入,这样每个业务类将只获得它使用的存储库。
如果你真的想这样做,那么你可以做这样的事情(伪代码):
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();
您可以创建具有不同功能的不同接口,并且您的类可以实现所有这些接口。然后,您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 类的调用的东西。