我正处于一个项目中,我没有看到前任开发人员如何做出决定。
现有代码示例:
调用应用程序(可能是控制台应用程序或Web应用程序等......不可知)
DataSet DS = CreditMgr.GetCreditRqstInfo(ddlGEO.Text);
BAL
public class CreditMgr
{
public static DataSet GetCreditRqstInfo(String GeoID)
{
try
{
DataSet DS = new DataSet();
DS = CreditIntfDB.GetCreditRqstInfo(GeoID);
return DS;
}
catch (Exception ex)
{
throw ex;
}
}
}
DAL
public class CreditIntfDB
{
public static DataSet GetCreditRqstInfo(String GeoID)
{
try
{
Database DB = new SqlDatabase(Common.ConnectionString);
String SQLCommand = Common.SPGetRqstInfo;
DbCommand DBCommand = DB.GetStoredProcCommand(SQLCommand);
DBCommand.CommandTimeout = Common.CommandTimeOut;
DB.AddInParameter(DBCommand, "@a_geo_id", DbType.String, GeoID);
DataSet DS = new DataSet();
DB.LoadDataSet(DBCommand, DS, new String[] { "CreditRqstInfo" });
return DS;
}
catch (Exception ex)
{
throw ex;
}
}
}
是的,重点是要有分离层,但是当使用相同的方法名称和静态时,每个都只是在传递字符串并返回 DataSet 对我有“代码味道”
有关更好方法的建议?
答案 0 :(得分:0)
根据标准的面向对象编程(OOP)设计,您的BAL类应代表"事物"这有一些现实世界的商业意义。不是让CreditMgr有一个静态方法来获取CreditRqst,而是创建一个存储自己数据的类CreditRequest(例如DataSet),最好以一些商业友好的方式包装它(例如CreditLine列表或账户列表)
从那里,您可以在CreditRequest内部实现Get方法,也可以将CreditMgr转换为服务对象(例如" CreditBureau"," Bank",&#34 ; AccountsDesk"等),它有一个采用String GeoID并返回CreditRequest的方法。
此外,使用字符串作为键(例如在GeoID中)也很臭。你能想出一些更强烈打字的东西吗?您可以创建一个强制要求的类GeoID(例如最大长度,允许的字符数,校验和要求等)。