在c#上调用类似方法的最佳方法

时间:2011-06-01 16:07:59

标签: c# methods

我有Business Objects类需要知道哪些连接字符串必须使用。

我从我的代码调用/创建那些BO,将连接String传递给BO的connString属性,并且也可以从框架控件调用/创建,这不允许我设置connString属性。 (我必须用连接字符串的一个附加参数调用该方法)

我有这样的事情:

public class MyBOClass{
    public FillMethodX(int ID)
    {
        //Fill the BO with data...
    };
    public FillMethodX(int ID, string connString)
    {
        SetConnString(connString);
        FillMethodX(ID);
    };

    public FillMethodY(int ID)
    {
        //Fill the BO with data...
    };
    public FillMethodY(int ID, string connString)
    {
        SetConnString(connString);
        FillMethodY(ID);
    };
}

我可以避免使用重载来复制每个方法以使用最佳方法传递connString吗? (可选参数,泛型等??)

感谢。

编辑:对不起我放了“连接字符串”,但实际上我传递了一个字符串,表示我的BO在内部使用的数据库。

4 个答案:

答案 0 :(得分:1)

您可以在接受ConnectionString的类上创建新的构造函数或创建公共属性ConnectionString,然后可以在方法中检索该值。

public class MyBOClass{

private string connectionString;
public MyBOClass(string connectioString)
{
    this.connectionString=connectionString;
}

public FillMethodX(int ID)
{
    //here use connectionString
    //Fill the BO with data...
};

HTH

<强>更新

使用可选参数:

public class MyBOClass{


public FillMethodX(int ID,[Optional, DefaultParameterValue(string.Empty)] string connString)
{
    //test if connString is null 
    SetConnString(connString);
    FillMethodX(ID);
};

答案 1 :(得分:1)

有很多方法可以做到这一点,其中一个你已经提到过 - 可选参数。

另一种方法是公开返回当前连接字符串的通用ConnectionString属性,然后取消1参数重载。调用者需要传递连接字符串,并且只能传递MyBOClass.ConnectionString。对于那些首先想知道连接信息来自何处的代码的读者来说,这实际上可能会更加清晰。

答案 2 :(得分:1)

删除不带参数的方法,只需:

 public FillMethodY(int ID, string connString)     
 {         SetConnString(connString);  //If connString is null, a default connection will be used       
           FillMethodY(ID);     
 }; 

对于想要使用默认值的调用者,为connString传递null,然后在SetConnString中处理null case并返回默认连接。否则,如果不为null则使用传递的内容并将连接设置为该值。

然后你不需要FillMethodY(int ID),方法调用减少了一半。

答案 3 :(得分:0)

不要在BO层中传递连接字符串。而是使用DAL图层中的标识符和工厂来获取连接字符串/ DAL。

例如,DAL Dll配置文件:

<Connections>
    <connection name="test" connectionString="Data Source=####\SQL2008;Initial Catalog=test;User Id=####;Password=####;" providerName="System.Data.SqlClient">test</connection>
    <connection name="test2" connectionString="Data Source=####\SQL2008;Initial Catalog=test2;User Id=####;Password=####;" providerName="System.Data.SqlClient">test2</connection> 
</Connections>

当客户端登录到您的应用程序时,请为他们提供可用连接的下拉列表(如果您不希望用户选择连接,则通过配置文件隐藏它),然后使用它来建立数据库连接。

在图层之间传递的对象将具有此标识符。使用标识符创建DAL连接。

可在层之间传递的示例数据传输对象(带标识符):

    /// <summary>
    /// A data transfer object is sent between layers.  It has a few base properties
    /// as well as a list of payload objects.
    /// </summary>
    [DataContract(Namespace= SharedModelNamespace.Namespace.SharedModel)]
    public class DataTransferObject
    {
        /// <summary>
        /// As part of the data transfer object, it specifies what environment to connect
        /// to should it make a DAL call.
        /// </summary>
        [DataMember]
        public string DataEnvironment {get; set };

        /// <summary>
        /// These are the list of objects (the payload) that will be transferred
        /// back and forth from the server to the client.
        /// </summary>
        [DataMember]
        public List<BasePOCO> DataTransferObjects { get; set; }