简体   繁体   English

复杂功能的静态包装是否称为不良做法?

[英]Is static wrapping of complex function calls bad practice?

I have a Factory Method that is relatively complex to call: 我有一个调用相对复杂的Factory方法:

DatabaseAccessFactory.Instance.GetDatabaseAccess().GetUserData(userId) 
DatabaseAccessFactory.Instance.GetDatabaseAccess().InsertData(dataStr1,dataStr2);

To avoid having to call this large querys i wrant to wrap these calls in a static class: 为了避免调用这么大的查询,我希望将这些调用包装在一个静态类中:

public static class SQL
{
    public static User GetUserData(int userId)
    {
        return DatabaseAccessFactory.Instance.
            GetDatabaseAccess().GetUserData(userId);
    }
    public static void InsertData(String dataStr1, String dataStr2)
    {
        DatabaseAccessFactory.Instance.
            GetDatabaseAccess().InsertData(dataStr1,dataStr2);
    }
}

So that i could simply call: 这样我就可以简单地打电话给:

SQL.GetUserData(userId) 
SQL.InsertData(dataStr1,dataStr2);

Is this considered bad practice? 这被认为是不良做法吗?

Edit: Fixed Source 编辑:固定源

Your current solution only removes the Instance part out of the method call, a better alternative would be to completely remove the nested dot-notation eg 您当前的解决方案仅将Instance部分从方法调用中删除,更好的选择是完全删除嵌套的点符号,例如

public static class SQL
{
    static IDatabase db = DatabaseAccessFactory.Instance.GetDatabaseAccess();

    public static User GetUserData(int userId)
    {
        return db.GetUserData(userId);
    }

    public static void InsertData(String dataStr1, String dataStr2)
    {
        db.InsertData(dataStr1, dataStr2);
    }
}

That way your usage would be 这样你的用法就可以了

SQL.GetUserData(userId);
SQL.InsertData(dataStr1, dataStr2);

However, just be wary how you intend on using this code, sharing database connections application-wide can be troublesome, especially in a multi-threaded environment. 但是,请警惕您打算如何使用此代码,在应用程序范围内共享数据库连接可能会很麻烦,尤其是在多线程环境中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM