これはロードされた質問であり、多くの、多くの回答がある可能性があると知っていますが、私は自分自身と他のいくつかの友人によって使用される小さなアプリケーションを作成しています。それが好きな人は、私はそれらに配布します。これは、フィットネスの人々のためのクライアントを追跡するためのシンプルなアプリです。それは、クライアント、支払い、支払い履歴、スケジュール、ファイル(写真、電子メールなど)を追跡し、多分より多くのしかし全体的に非常に単純なプログラムです。ああ、SQLExpressをバックエンドとして使用する。私の質問はこれです:このアプリケーションに必要なオブジェクトを設計するための最良のアプローチは何ですか?私はデータアクセスレイヤーとビジネスオブジェクトについての記事を読んだことがありますが、まったく新しいものを作成したことはありません。私はClient、Paymentなどのオブジェクトを持っていると思っていましたが、もちろんそれらに付随するすべてのプロパティがありますが、DBの変更に関しては、追加、更新、削除などのメソッドをオブジェクトに入れるか、オブジェクトがストアドプロシージャ名を渡すだけで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
エンティティフレームワークは、これであなたが探しているものであるように思えます。 Visual Studioを使用すると、ロード、保存などの方法とともに、データアクセスオブジェクトが自動的に生成されます。 – jermny