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

本文关键字:方法 最佳 调用 | 更新日期: 2023-09-27 17:58:22

我有一些业务对象类需要知道要使用什么连接字符串。

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

我有这样的东西:

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吗?(可选参数、泛型等??)

谢谢。

edit:很抱歉我放了"连接字符串",但实际上我传递了一个字符串,表示我的BO内部使用的数据库。

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

有很多方法可以做到这一点,其中一种方法已经提到了——可选参数。

另一种方法是公开一个返回当前连接字符串的通用ConnectionString属性,然后取消1参数重载。调用方需要传递一个连接字符串,只需传递MyBOClass.ConnectionString。对于那些想知道连接信息从哪里来的代码读者来说,这可能会更清楚一些。

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

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

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

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

您可以在接受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);
};

不要在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; }