我知道這是一個加載的問題,可能有很多很多的答案,但.....我創建了一個小應用程序供我自己和其他幾個朋友現在使用,如果它更多人們喜歡它,我會分發給他們。這是一個簡單的應用程序來跟蹤健身人的客戶。它將跟蹤客戶,付款,付款歷史,日程安排,文件(照片,電子郵件等),也許還有更多,但總體來說是一個非常簡單的程序。哦,是的,使用SQLExpress作爲後端。我的問題是:什麼是設計這個應用程序所需的對象的最佳方法?我已經閱讀了關於數據訪問層和業務對象的文章,但從未真正從頭創建過。我正在考慮像客戶端,付款等對象,當然還有所有與它們一起使用的屬性,但在修改數據庫時,如果添加,更新,刪除等方法存在於對象中,或者它們會與剛剛傳入存儲過程名稱的對象一起駐留在DAL中?編程對象建議
我知道有很多信息可能丟失,但希望你能得到我想要做的事情的要點(sp?)。
**到的一些帖子作出迴應:
我有對象是單獨的dal,但我需要更多關於如何這樣再設計它......,新的閱讀同意面向對象編程,所以我不能完全看到整個畫面。
這裏有一個DAL一個朋友提出的,讓我用它:
namespace DataAccess{
public class SQLDataBase
{
public SQLDataBase();
public SQLDataBase(string EncodedConnectionString);
public SQLDataBase(string EncodedConnectionString, int ConnectionTimeout);
public string ConnectionString { get; set; }
public int ConnectionTimeout { get; set; }
public string EncodedConnectionString { get; }
public void RunSpGetScaler(string spName, SqlParameter[] parms, ref DateTime ReturnValue);
public void RunSpGetScaler(string spName, SqlParameter[] parms, ref decimal ReturnValue);
public void RunSpGetScaler(string spName, SqlParameter[] parms, ref int ReturnValue);
public void RunSpGetScaler(string spName, SqlParameter[] parms, ref string ReturnValue);
public DataSet RunSpReturnDS(string DatasetName, string spName);
public DataSet RunSpReturnDS(string DatasetName, string spName, SqlParameter[] parms);
public int RunSpReturnRecordCount(string spName);
public int RunSpReturnRecordCount(string spName, SqlParameter[] parms);
public string RunSpReturnString(string spName, SqlParameter[] parms, string returnParm);
public SqlConnection RunSqlConnection();
}
}
很簡單......我與它唯一的問題是,當我創建任何對象使用它,我必須寫在每次調用我做的DB方法....所以例如:
//Declarations - which I don't thinkk should be in the object itself
private DataAccess.SQLDataBase oDatabase = null;
private string sEncodedConnectionString = app.Default.EncodedDBString;
private int iConnectionTimeout = 15;
public DataSet GetClientInformation(int iClinetID, string sClientName)
{
oDatabase = new SQLDataBase(
sEncodedConnectionString, iConnectionTimeout);
string spName = "GetClientInformation";
string dsName = "GetClientInformation";
try
{
SqlParameter[] Params = new SqlParameter[2];
Params[0] = new SqlParameter("@ClientID", iClientID);
Params[1] = new SqlParameter("@ClientName", sClientName);
DataSet ds = oDatabase.RunSpReturnDS(dsName, spName, Params);
return ds;
}
catch (Exception e)
{
throw (e);
}
}
所以我的客戶對象,我有這等多種方法添加,修改,或選擇數據爲「客戶」。從邏輯上講,這對我來說沒有任何意義,因爲看起來我無法使用它,而無需使用其他一些依賴項。
將CRUD操作放入數據類對於測試目的不是一個好主意。你應該檢查出[存儲庫模式](http://stackoverflow.com/questions/3175/repository-pattern-tutorial-in-c-sharp)。 – Matthias 2011-12-16 02:05:11