我有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在内部使用的数据库。
答案 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; }