在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内部使用的数据库。
有很多方法可以做到这一点,其中一种方法已经提到了——可选参数。
另一种方法是公开一个返回当前连接字符串的通用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; }